#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 }
|