分享简化的适用于郭天祥老师实验板的矩阵键盘检测程序
时间:10-02
整理:3721RD
点击:
根据郭老师程序改动而来。试过了。
#include<reg52.h>
#define uint unsigned int
typedef unsigned char uchar;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar ma[]={0xe0,0xd0,0xb0,0x70};
uchar temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
dula=1;
P0=table[aa];
dula=0;
}
//以下是键盘扫描部分
uchar keyscan()
{
uchar temp_col,j,n;
bit flag;
P3=0xf0;
delay(5);
if (P3!=0xf0)
{
temp=0xff;
for (j=1;j<5;j++)
{
flag=0;
P3=temp<<j;//0xfe,从最低位开始置零;
delay(2);//真正读取键盘码时
temp_col=P3&0xf0;
for (n=0;n<4;n++)
{
if ( temp_col==ma[n])
{
flag=1;
break;
}
}
if (flag==1)break;
} //end for j
while (1)//松手检测
{
temp_col=P3&0xf0;//只要没松手,temp_col==ma[n]
if (temp_col!=ma[n])break;
}
}//end if
return (j-1)*4+n;
}//keyscan
程序格式有待提高哦~或者是文本的原因吧!看着不是很清楚!
是的。有时候自己都看不懂了。
能不能写个详细的注释呢?