voidReadKey(void);//扫描键盘获取键值voidmain(void)//入口函数{while(1){ReadKey();//调用键盘扫描if(l_key!=0xff)//如果有键按下,将其输出P2口LED灯显示,{switch(l_key){case0x7... void ReadKey(void); //扫描键盘 获取键值
void main(void) //入口函数
{
while(1){
ReadKey(); //调用键盘扫描
if(l_key!=0xff) //如果有键按下,将其输出P2口LED灯显示,
{ switch(l_key)
{ case 0x7e:
num=1;
break;
case 0xbe:
num=2;
break;
case 0xde:
num=3;
break;
case 0xee:
num=4;
break;
}
P2=table[num] ;
} //这里取反是因为LED灯采用共阴接法
}
}
void ReadKey(void) //读键盘值
{
P0=0xfe; //将diyi列拉低,扫描是否有按键按下,diyi列按键包括:0,4,8,C
l_key=P0; //读取键值
if(l_key!=0xfe) //如果l_key不等于0xfe,说明有键按下,就返回,否则继续扫描下一列
return;
P0=0xfd; //将第二列拉低,扫描是否有按键按下,第二列按键包括:1,5,9,D
l_key=P0; //读取键值
if(l_key!=0xfd) //如果l_key不等于0xfd,说明有键按下,就返回,否则继续扫描下一列
return;
P0=0xfb; //将第三列拉低,扫描是否有按键按下,第三列按键包括:2,6,A,F
l_key=P0; //读取键值
if(l_key!=0xfb) //如果l_key不等于0xfb,说明有键按下,就返回,否则继续扫描下一列
return;
P0=0xf7; //将第四列拉低,扫描是否有按键按下,第四列按键包括:3,7,B,F
l_key=P0; //读取键值
if(l_key!=0xf7) //如果l_key不等于0xf7,说明有键按下,就返回,否则扫描完毕将l_key=0xff
return;
l_key=0xff;
}
void delay()
{
unsigned int x,y;
for(x=100;x>0;x--)
for(y=200;y>0;y--);
}
这个程序是用来扫描diyi列键盘,diyi个和第二个键按下,数码管会显示1和2,但是第三个键和第四个键按下,就不显示不出来三和四,这是为什么呢?
从你程序没看出什么问题,可以从以下方面检查下:
1.
不知道你table数组存的什么东西,
你可以直接将P2=table[num] ;直接改为P2=table[3];和P2=table[4];首先确定问题是不是出在3、4led显示上,
2.
如果不是,可以将
case 0x7e:
num=1; //改为3
break;
case 0xbe:
num=2; //改为4
break;
确定是不是没有产生3、4按键,检查3、4按键的外部电路。