标题:
基于51单片机的4x4键盘显示原理图与汇编语言程序
[打印本页]
作者:
奔跑@666
时间:
2022-5-15 19:24
标题:
基于51单片机的4x4键盘显示原理图与汇编语言程序
1.png
(39.06 KB, 下载次数: 33)
下载附件
2022-5-15 19:35 上传
2.png
(38.4 KB, 下载次数: 29)
下载附件
2022-5-15 19:35 上传
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: LCALL KEY_IN
MOV P1,A
LCALL DEL ; 延时去抖
AJMP MAIN
;======================================================================
; == == ==判断有无按键,无按键直接返回 ===========
KEY_IN: MOV P2,#0FH ;置列线为低电平,读行线状态(低四位,无按键则全为1)
MOV A,P2 ;读取中
ANL A,#0FH ;屏蔽高四位
MOV B,A
MOV P2,#0F0H ;置行线为低电平,读列线状态(低四位,无按键则全为1)
MOV A,P2
ANL A,#0F0H ;屏蔽低四位
ORL A,B ;高低四位重新组合
CJNE A,#0FFH,KEYSCAN
AJMP MAIN
;================================================================================
;//========= 键盘扫描程序 //================================
KEYSCAN:
MOV R1,#0 ;初始化列地址
MOV R3,#01111111B ;初始化扫描码
LOOP: MOV A,R3
RL A
MOV R3,A ;保留扫描码
MOV P2,A ;送扫描码
MOV A,P2 ;读键盘
ORL A,#0FH ;屏蔽低四位
CJNE A,#0FFH,NEXT31 ;A不等于FFH,说明该列有按键按下
INC R1 ;行地址加1,扫描下一行
CJNE R1,#4,LOOP ;行地址不等于4,继续扫描下一行
SJMP EXTI ;没有按键,返回
;================// //============================
NEXT31: JB ACC.4,NEXT32
MOV R2,#0 ;第1列有按键
SJMP NEXT5
NEXT32: JB ACC.5,NEXT33
MOV R2,#1 ;第2列有按键
SJMP NEXT5
NEXT33: JB ACC.6,NEXT34
MOV R2,#2 ;第3列有按键
SJMP NEXT5
NEXT34:
MOV R2,#3 ;第4列有按键
NEXT5: MOV A,R1 ;计算按键地址
RL A
RL A ;行地址乘4
ADD A,R2 ;加列地址
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
EXTI: MOV P2,#0FFH ;置键盘接口为高电平
RET
;===========// 延时子程序,0.1S延时 //====================
DEL: MOV R7,#1
DEL1: MOV R6,#200
DEL2: MOV R5,#248
HERE: DJNZ R5,HERE
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
;==========//按键名称码,共阴数码管//============================
KEYTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
;====================================================================
END
作者:
梦情殇终成伤
时间:
2022-11-1 16:38
按键显示的效果相反应该改哪里?您是0~F,我是F~0
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1