⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kb.a51

📁 4*4键盘控制一个七段数码管显示
💻 A51
字号:
ORG 00H
       JMP START
;-----------------------------------------------------------
KB_PORT EQU P1
LED_PORT EQU P2
;-----------------------MAIN_PRO----------------------------
ORG 40H
START:
	CALL KEY_SCAN
	MOV P2,R3
	MOV R5,#10
L1:	CALL DL20MS
	DJNZ R5,L1
JMP START	
;--------------------查表法得顺序码------键码存于R3中------------------------
KEY_SCAN: 
	MOV KB_PORT,#0FH	;用反转法查键 
	MOV A,KB_PORT
	ANL A,#0FH
	MOV B,A
	MOV KB_PORT,#0F0H
	MOV A,KB_PORT
	ANL A,#0F0H
	ORL A,B
	CJNE A,#0FFH,KEY1
	RET			;无键按下
KEY1: 
	MOV B,A			;有键按下,存键码 
	MOV DPTR,#TABLE 
	MOV R3,#0FFH		;存顺序码单元初始化 
KEY2: 
	INC R3 
	MOV A,R3 
	MOVC A,@A+DPTR 
	CJNE A,B,KEY3		;判键码,求顺序码 
	MOV A,R3		;若找到键码,存顺序码 
	RET 
KEY3: 
	CJNE A,#0FFH,KEY2	;判是否查完
	RET			;已查完,键码未找到,以无按键处理
;--------------------------------------------------------------------------------------------
DL20MS:
       MOV R7,#100
D1:    MOV R6,#100
       DJNZ R6,$
       DJNZ R7,D1
       RET
;-------------------可改表的须序来改变对应键的顺序--------------------------------------------	
TABLE: 
	DB 0E7H,0D7H,0DBH,0DDH;7	8	9	F
	DB 0B7H,0BBH,0BDH,077H;4	5	6	E
	DB 07BH,07DH,0EBH,0EDH;1	2	3	D
	DB 0EEH,0DEH,0BEH,07EH;0	A	B	C
	DB 0FFH
;------------------可改表的须序来改变对应键的顺序--------------------------------------------	
;TABLE: 
;	DB 077H,07BH,07DH,07EH		;0	1	2	3
;	DB 0B7H,0BBH,0BDH,0BEH		;4	5	6	7	
;	DB 0D7H,0DBH,0DDH,0DEH		;8	9	A	B
;	DB 0E7H,0EBH,0EDH,0EEH		;C	D	E	F
;	DB 0FFH				;查表的结束标记
;--------------------delay 20 ms-----------------------
END














;------------------------------------------------------------------------
;KEY_SCAN:
;	MOV KEY_PORT,#0FH		;置高4位为低电平,低四位为输入	
;	MOV A,KEY_PORT			;保存键码
;	CJNE A,#0FH,KEY1		;有键按下就到KEY1
;	JMP OUT	
;KEY1:
;	CALL DL20MS			;去抖
;	MOV A,KEY_PORT			;再次读键码
;	CJNE A,#0FH,KEY2		;是否有键按下
;	JMP OUT
;KEY2:
;	MOV KEY_PORT,#0F0H		;置低四位为低电平,高四位为输入
;	MOV B,KEY_PORT			;保存键码
;KEY3:
;	ORL A,B				;将两次的键码合并为1B的键码并放在A中
;----------------------------查表-----------------------------------------
;	MOV B,A				;保存键码于B中
;	MOV DPTR,#TABLE 		;取表首地址
;	MOV R3,#00H			;存顺序码单元初始化 
;KEY4: 
;	MOV A,R3 
;	MOVC A,@A+DPTR
;	CJNE A,B,KEY5			;判键码,求顺序码 
;	MOV A,R3			;若找到键码,存顺序码
;        JMP OUT
;KEY5:
; 	INC R3				;指向表的下一个
;	CJNE R3,#16,KEY4		;判断是否查完
;OUT:	RET


;-------------------------KEY_SCAN---------------------------
;采用行送低电平,列设输入,读列值
;列送低电平,行设为输入,读行值,
;最后得到按键对应唯一的代码,优点:可识别多键同时按下的情况
;------------------------------------------------------------  
;KB_PORT EQU P1 
;KEY_CODE EQU 30H
;
;KEY_SCAN:
;       MOV KEY_CODE,#0
;       MOV KB_PORT,#0FH
;       MOV A,KB_PORT
;       ANL A,#0FH
;       CJNE A,#0FH,SAV1                
;       JMP OUT                 ;若无键按下,退出
;SAV1:  MOV KEY_CODE,A          ;保存
;
;       CALL DELAY              ;去抖动
;
;       MOV KB_PORT,#0F0H
;       MOV A,KB_PORT
;       ANL A,#0F0H
;       CJNE A,#0F0H,SAV2       ;若无键按下,退出
;       JMP OUT
;SAV2:
;       ORL A,KEY_CODE          ;得到8位键盘码
;       MOV KEY_CODE,A          ;保存8位键盘码
;OUT:   RET
;---------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -