内容发布更新时间 : 2025/5/21 10:35:50星期一 下面是文章的全部内容请认真阅读。
相关代码:
P0 = 0xff;
Line = 1; Mask = 0x01; for(i=0;i<4;i++) { Col = 0; P0 = ~Mask;
ScanCode = P0 & 0xf0;
if(ScanCode!=0xf0) delay(); ScanCode = P0 & 0xf0; switch(ScanCode) {
case 0xe0:Col = 1;break; case 0xd0:Col = 2;break; case 0xb0:Col = 3;break; case 0x70:Col = 4;break; default:Col = 0;break; } if(Col>0) { num = (Line-1)*4+Col; if(SAVE==0) //保存 ,灯亮 {
save[a]=num; a++; } if(num==0) {
TR0=0;
SPK=1; //在未按键时,防止长期高电平损坏喇叭 } else {
P1 = CharCode[num-1]; High=tab[num-1][0]; Low =tab[num-1][1]; TR0=1; while(1) {
ScanCode = P0 & 0xf0; if(ScanCode == 0xf0) {
}
} } }
Mask <<=1; Line ++;
TR0 = 0; SPK=1; break; }
5.2键盘接口必须具有的4个基本功能
(1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为5—20mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。
(2)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。
(3)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。
如下为键盘编码表:
unsigned char code tab[][2]= {
0x00,0x00, 0xf8,0x8c, 0xf9,0x5b, 0xfa,0x15, 0xfa,0x67, 0xfb,0x04, 0xfb,0x90, 0xfc,0x0c, 0xfc,0x44, 0xfc,0xac, 0xfd,0x09, 0xfd,0x34, 0xfd,0x82, 0xfd,0xc8, 0xfe,0x06, 0xfe,0x22, 0xfe,0x56, 0xfe,0x85,
0xfe,0x9a, 0xfe,0xc1, 0xfe,0xe4, 0xff,0