CLR P1.0 ;扫描第一行(第一行为0)
MOV A,P1 ;读入P1口值
ANL A,#0F0H ;低四位为0
CJNE A,#0F0H,KEYCON ;高四位不为全1(有键按下)转KEYCOON
SETB P1.0 ; 扫描第二行(第二行为0)
CLR P1.1 ;
MOV A,P1 ; 读入P1口值
ANL A,#0F0H ; 低四位为0
CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
SETB P1.1 ; 扫描第三行(第三行为0)
CLR P1.2 ;
MOV A,P1 ; 读入P1口值
ANL A,#0F0H ; 低四位为0
CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
SETB P1.2 ; 扫描第四行(第四行为0)
CLR P1.3 ;
MOV A,P1 ; 读入P1口值
ANL A,#0F0H ; 低四位为0
CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
SETB P1.3 ;结束行扫描
RET ;子程序返回
KEYCON: LCALL DL10MS ;消抖处理
MOV A,P1 ;再读入P1口值
ANL A,#0F0H ; 低四位为0
CJNE A,#0F0H,KEYCHE ; 高四位不为全1,确有键按下,转KEYCHE
KEYOUT: RET ;干扰,子程序返回
KEYCHE: MOV A,P1 ;读P1口值
MOV KEYWORD,A ;放入23H暂存
CJLOOP: LCALL DISPLAY ;调显示子程序
MOV A,P1 ;读P1口值
ANL A,#0F0H ;低四位为0
CJNE A,#0F0H,CJLOOP ;高四位为全1(键还按着),转CJLOOP等待释放
MOV R7,#00H ;键释放,置R7初值为#00H(查表次数)
MOV DPTR,#KEYTAB ;取键值表首址
CHEKEYLOOP: MOV A,R7 ;查表次数入A
MOVC A,@A+DPTR ;查表
XRL A,KEYWORD ;查表值与P1口读入值比较
JZ KEYOK ;为0(相等)转KEYOK
INC R7 ;不等,查表次数加1
CJNE R7,#10H,CHEKEYLOOP ;查表次数不超过16次转CHEKEYLOOP再查
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
本文关键字:数控 51单片机,单片机-工控设备 - 51单片机