|
目的:矩阵键盘扫描并返回按键值,数码管动态显示按键值
烧写运行情况:S4、S8、S12、S16(最后一列)不能显示键值
求大佬帮忙分析下,感激不尽。
程序如下:
#include<reg51.h>
#define K P1;
void Delay(unsigned char b)
{
unsigned char i;
while(--b!=0)
{
for(i=0;i<125;i++);
}
}
unsigned char keyscan()
{
static unsigned char key,on_off,j;
P1=0x0f;
if(P1!=0x0f)
{
Delay(20);
if(P1!=0x0f&on_off==0)
{
on_off=1;
P1=0x0f;
switch(P1&0x0f)
{
case(0x0e):j=0;break;
case(0x0d):j=1;break;
case(0x0b):j=2;break;
case(0x07):j=3;break;
default:break;
}
P1=0xf0;
switch(P1&0xf0)
{
case(0xe0):key=1+4*j;break;
case(0xd0):key=2+4*j;break;
case(0xb0):key=3+4*j;break;
case(0x70):key=4+4*j;break;
default:break;
}
}
on_off=0;
}
return(key);
}
void Display(unsigned char a)
{
unsigned char code Tab_led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
P2=0xff;
P0=Tab_led[a%10];
P2=0xfe;
Delay(5);
P2=0xff;
P0=Tab_led[a/10];
P2=0xfd;
Delay(5);
P2=0xff;
}
void main()
{
unsigned char k;
while(1)
{
k=keyscan();
Display(k);
}
} |
|