#include "reg51.h"
void main()
{
unsigned char key;
while(1)
{
key=kbscan(); //键盘扫描函数
delay10ms(); //健消除抖动的延时函数
}
}
void delay10ms()
{
unsigned char i;
for(i=0xff;i>0;i--);
}
unsigned char kbscan()
{
unsigned char sccode,recode;
P1=0xf0; //发全“0”行扫描,列线输入
if(P1&0xf0)!=0xf0) //有键按下
{
delay10ms(); //延时去抖动
if((P1&0xf0)!=0xf0)
{
sccode =0xf0; //逐行扫描初值
while((sccodeZ&0x10)!=0)
{
P1=sccode; //输出行扫描码
if((P1&0XF0)!=0XF0) //本行有键按下
{
ecode=(P1&0xf0)|0xf0;
return((~sccode)+(~recode); //返回特征码
}
else
sccode=(sccode<<1)|0x01; //行扫描码左移一位
}
}
}
return 0; //无键按下,返回0
}