请问下边的代码哪有问题啊,下到板子上按键全是乱的,不按也是乱的<span]
<span]
#include<reg52.h>
#define KEY P1
unsigned char display[10];
int data_a;
short keynum;
sbit LCD_1602_RW = P2^5;
sbit LCD_1602_RS = P2^6;
sbit LCD_1602_E = P2^7;
void delay1ms(unsigned char c)
{
unsigned char a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void LCDWriteCom(unsigned char com)
{
LCD_1602_E=0;
LCD_1602_RW=0;
LCD_1602_RS=0;
P0=com;
delay1ms(1);
LCD_1602_E=1;
delay1ms(1);
LCD_1602_E=0;
P0=com<<4;
delay1ms(1);
LCD_1602_E=1;
delay1ms(1);
LCD_1602_E=0;
}
void LCDWriteData(unsigned char dat)
{
LCD_1602_E=0;
LCD_1602_RW=0;
LCD_1602_RS=1;
P0=dat;
delay1ms(1);
LCD_1602_E=1;
delay1ms(1);
LCD_1602_E=0;
P0=dat<<4;
delay1ms(1);
LCD_1602_E=1;
delay1ms(1);
LCD_1602_E=0;
}
void IniLCD()
{
LCDWriteCom(0x32);
LCDWriteCom(0x28);
LCDWriteCom(0x0c);
LCDWriteCom(0x06);
LCDWriteCom(0x01);
}
void display_a()
{
unsigned char i;
display[3]=data_a/1000;
display[2]=(data_a%1000)/100;
display[1]=(data_a%100)/10;
display[0]=data_a%10;
for(i=0;i<=3;i++)
{
LCDWriteCom(0x80+i);
LCDWriteData('0'+display[3-i]);
}
}
void keyscan()
{
unsigned char a,keynum;
KEY=0x0f;
if(KEY!=0x0f)
{
delay1ms(1); //延时进行消抖
if(KEY!=0x0f)
{
KEY=0x0f;
switch(KEY)
{
case 0x0e:keynum=3;break;
case 0x0d:keynum=2;break;
case 0x0b:keynum=1;break;
case 0x07:keynum=0;break;
}
KEY=0xf0;
switch(KEY)
{
case 0xe0:keynum=keynum+12;break;
case 0xd0:keynum=keynum+8;break;
case 0xb0:keynum=keynum+4;break;
case 0x70:keynum=keynum;break;
}
while((a<50)&&(KEY!=0xf0)) //检测按键松手检测
{
delay1ms(1);
a++;
}
}
}
}
unsigned char numpro(unsigned char a)
{
switch(a)
{
case 0:return 7;break;
case 1:return 8;break;
case 2:return 9;break;
case 3:return 0x0d;break; //按键/
case 4:return 4;break;
case 5:return 5;break;
case 6:return 6;break;
case 7:return 0x0c;break; //按键*
case 8:return 1;break;
case 9:return 2;break;
case 10:return 3;break;
case 11:return 0x0b;break; //按键-
case 12:return 0;break;
case 13:return 0x0f;break; //按键CE
case 14:return 0x0a;break; //按键+
case 15:return 0x0e;break; //按键=
default:return 0xff;
}
}
void main()
{
unsigned char b=0xff;
IniLCD();
data_a=0;
display_a();
while(1)
{
keyscan();
b=numpro(keynum);
if(b!=0xff)
{
if(b<10)
{
data_a=b+data_a*10;
display_a();
}
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>