打印

12864串行+键盘

[复制链接]
1052|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2014-5-7 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了一段12864串行+键盘的代码,目的是实现第一行显示:PLEASE INPUT:.........然后第二行根据按键依次显示数字...........然后结果第一行显示出来了,按键只出来乱码,不知道是我的液晶屏幕坏了(摔过......),或者是我的键盘扫描程序错了,恳请朋友们的指点。
沙发
tianli1980|  楼主 | 2014-5-7 09:32 | 只看该作者
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P3^5;
sbit SID=P3^6;
sbit SCLK=P3^4;
sbit LCD_PSB=P3^7;
sbit wela=P2^6;
sbit dula=P2^7;
uchar code dis2[]={"PLEASE INPUT:"};
uchar code table[]={0,1,2,3,4,5,6,7,8,9};
uchar i;
void delay(uint x)
{
uint i,j;
for(j=0;j<x;j++)
  for(i=0;i<110;i++);
}
void sendbyte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
  SCLK=0;
  byte=byte<<1;
  SID=CY;
  SCLK=1;
  SCLK=0;
}
}
void write_cmd(uchar cmd)
{
CS=1;
sendbyte(0xf8);
sendbyte(0xf0&cmd);
sendbyte(cmd<<4&0xf0);
CS=0;
}
void write_dat(uchar dat)
{
CS=1;
sendbyte(0xfa);
sendbyte(0xf0&dat);
sendbyte(dat<<4&0xf0);
CS=0;
}
void init()
{
LCD_PSB=0;
write_cmd(0x30);
delay(10);
write_cmd(0x0e);
delay(10);
write_cmd(0x01);
delay(10);
}
void keyscan()
{
uchar tempt,key,num;
P3=0xfd;
tempt=P3;
tempt=tempt&0xf0;
if(tempt!=0xf0)
{
  delay(10);
  tempt=P3;
  tempt=tempt&0xf0;
  if(tempt!=0xf0)
  {
   tempt=P3;
   switch(tempt)
   {
    case 0xed:
             key=0;
         num=0;
                 break;
        case 0xdd:
             key=1;
         num=1;
                 break;
    case 0xbd:
             key=2;
         num=2;
                 break;
        case 0x7d:
             key=3;
         num=3;
                 break;
   }
   while(tempt!=0xf0)
   {
    tempt=P3;
        tempt=tempt&0xf0;
   }
   if(key==0||key==1||key==2||key==3)
   {
    write_dat(table[key]+0x30);
        delay(5);
   }
  }
}
P3=0xfb;
tempt=P3;
tempt=tempt&0xf0;
if(tempt!=0xf0)
{
  delay(10);
  tempt=P3;
  tempt=tempt&0xf0;
  if(tempt!=0xf0)
  {
   tempt=P3;
   switch(tempt)
   {
    case 0xeb:
             key=4;
         num=4;
                 break;
        case 0xdb:
             key=5;
         num=5;
                 break;
    case 0xbb:
             key=6;
         num=6;
                 break;
        case 0x7b:
             key=7;
         num=7;
                 break;
   }
   while(tempt!=0xf0)
   {
    tempt=P3;
        tempt=tempt&0xf0;
   }
  if(key==4||key==5||key==6||key==7)
  {
   write_dat(table[key]+0x30);
   delay(5);
  }
  }
}
P3=0xf7;
tempt=P3;
tempt=tempt&0xf0;
if(tempt!=0xf0)
{
  delay(10);
  tempt=P3;
  tempt=tempt&0xf0;
  if(tempt!=0xf0)
  {
   tempt=P3;
   switch(tempt)
   {
    case 0xe7:
             key=8;
         num=8;
                 break;
        case 0xd7:
             key=9;
         num=9;
                 break;
    case 0xb7:
             key=10;
                 break;
        case 0x77:
             key=11;
                 break;
   }
   while(tempt!=0xf0)
   {
    tempt=P3;
        tempt=tempt&0xf0;
   }
  if(key==8)
  {
    write_dat(table[key]+0x30);
        delay(5);
  }
  if(key==9)
  {
   write_dat(table[0]+0x30);
   delay(5);
   write_dat(table[9]+0x30);
   delay(5);
  }
  if(key==11)
  {
init();
write_cmd(0x80);
i=0;
while(dis2[i]!='\0')
{
  write_dat(dis2[i]);
  i++;
}

write_cmd(0x90);
  }
  }
}
}
void main()
{
wela=0;
dula=0;
delay(10);
init();
write_cmd(0x80);
i=0;
while(dis2[i]!='\0')
{
  write_dat(dis2[i]);
  i++;
}
delay(10);
write_cmd(0x90);
while(1)
{
  keyscan();
}
}


  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝