

1)判断有无键按下;(2)有键按下时,进行按键消抖;(3)正确识别被按下的按键编号。首先设置单片机定时器/计数器的工作方式,让定时器/计数器T0设为外部计数方式,允许T0中断;并给TL0、TH0赋初值FFH,一旦有键按下时,T0便产生中断,由此可以判断是否有键按下;然后延时8ms实现按键抖动的消除;接着将T1设为内部定时方式,定时时间为50ms,T0在这50ms的时间里对NE555输出频率信号进行计数,通过对计数值的大小范围的判断就可以识别按键的编号。有关延时和测频的程序很常见,读者可以参考有关资料。按键识别这部分的汇编程序如下文?眼2?演。程序入口参数FRQH、FRQL分别是50ms定时时间内对外部频率计数的高位和低位,判断结果放在KEYCODE中。 KEYCODE???? EQU 30H????? ;存放键值(1-8 )有效;???????????????????????????? ;0FFH无键按下,0EEH出错 FRQH??????? EQU 32H????? ;频率测量值高位 FRQL??????? EQU 31H????? ;频率测量值低位 ORG 0000H MOV DPTR,#TABLE MOV R0,#0 MOV KEYCODE,#0NEXT:MOV A,R0 MOVC A,@A+DPTR INC R0 CJNE A,FRQH,J1 MOV A,R0 INC R0 MOVC A,@A+DPTR CJNE A,FRQL,J2 MOV KEYCODE,#0EEH ;频率在边界上出错 LJMP WAIT J1:JNC? WAIT INC R0 NNT:INC KEYCODE LJMP NEXTJ2:JNC WAIT??? JMP NNTWAIT:MOV A,KEYCODE? ;? ...? ;? ...????? 添加用户应用程序? ; 判断频率区间上下限的数据表:TABLE: DB 00H,0FAH,01H,5EH,01H,0C2H??????? DB 02H,26H,02H,8AH,02H,0EEH??????? DB 03H,52H,03H,0B6H,04H,1AH??????? DB 04H,7EH,0FFH,0FFH3 特点及注意事项 采用频率编码具有抗干扰力强、接口简单的优点,并且易于实现光电隔离。在键盘与主机分离的场合,还可以大大简化二者互连的电缆。另外,若将此信号去调制红外发射组件,也可以实现遥控键盘而无需额外的编码逻辑。但是它对多键的同时按下和单键的连击检测能力较差,在与实际应用结合的时候,应尽量避免这两种情况的出现并恰当地进行处理。同时NE555的上限工作频率是500kHz,采用传统的MCS-51单片机测量外部频率时,最高可测的频率为晶振频率的24分频,设计中应考虑可用的频率范围。采用其它型号的单片机时,也应注意这一点。| 欢迎光临 DIY编程器网 (http://www.diybcq.com/) | Powered by Discuz! X3.2 |