51单片机4×4矩阵按键程序
- 格式:docx
- 大小:11.31 KB
- 文档页数:2
51单片机4×4矩阵按键程序
ORG 0000HLJMP MAIN ;跳转至主程序ORG 0100HMAIN: LCALL KEY_INMOV P0,ALCALL DELAJMP MAIN;======================;判断
有无按键,无按键直接返回;KEY_IN: MOV P1,#0F0H ;置行线为低电平,读列
线状态(在高4 位,无按键则全为1); MOV A,P1; ANL A,#0F0H ;屏蔽低四位; MOV B,A; MOV P1,#0FH ;置列线为低电平,读行线状态(在低4 位,无按键
则全为1); MOV A,P1; ANL A,#0FH; ORL A,B ;高四位与低四位重新组合; CJNE A,#0FFH,KEYSCAN ;0FFH 为末按键; RET;==========================================;//============= 键盘扫描程序
==============================================;KEYSCAN:KEY_I N: MOV R1,#0 ;初始化列地址MOV R3,#11110111B ;初始化扫描码LOOP:MOV A,R3RL AMOV R3,A ;保留扫描码MOV P1,A ;送扫描码MOV A,P1 ;读键盘ORL A,#0F0H ;屏蔽高四位CJNE A,#0FFH,NEXT31 ;A 不等于FFH,说明该列有按键动作INC R1 ;列地址加1,准备扫描下一列CJNE R1,#4,LOOP ;列地址不等于4,扫描下一列SJMP EXIT ;没有按键,退出;//=============按键判断对应位等于零,说明该行有按键按下==================NEXT31:JB
ACC.0,NEXT32MOV R2,#0 ;第0 行有按键SJMP NEXT5NEXT32:JB ACC.1,NEXT33MOV R2,#1 ;第1 行有按键SJMP NEXT5NEXT33:JB ACC.2,NEXT34MOV R2,#2 ;第2 行有按键SJMP NEXT5NEXT34:MOV R2,#3 ; 第3 行有按键NEXT5: ;计算按键地址MOV A,R1RL ARL A ;列地址乘4(每列对
应4 行)ADD A,R2 ;加行地址MOV DPTR,#KEYTABMOVC A,@A+DPTREXIT:; MOV P1,#0FFH ;置键盘接口高电平RET;延时子程序,1s 延时DEL: MOV。