独立按键扫描程序
- 格式:doc
- 大小:26.50 KB
- 文档页数:2
;*****独立按键************
;**2011.01.20*************
;**11.0592MHZ*************
;*************************
;*************************
;----单元定义-------------
KEY EQU 20H;开关键
ENKEY EQU 21H;前沿键
L20MS EQU 30H;20ms单元
KEY0 EQU 31H;暂存
;----字节定义-------------
SW0 BIT KEY.0
SW1 BIT KEY.1
SW2 BIT KEY.2
SW3 BIT KEY.3
ESW0 BIT ENKEY.0
ESW1 BIT ENKEY.1
ESW2 BIT ENKEY.2
ESW3 BIT ENKEY.3
;****主程序***************
ORG 0000H
LJMP MAIN
MAIN: MOV SP,#60H
MOV P2,#0FFH
MOV R1,#0FFH
MOV TMOD,#01H
MOV TH0,#0F7H;2.5MS
MOV TL0,#000H
SETB TR0
MAIN1: JNB TF0,$
CLR TF0
MOV TH0,#0F7H
MOV TL0,#000H
CALL DULIKEY
JNB SW0,D6
D0: ;DJNZ R1,MAIN1
; MOV R1,#0FFH
MOV P2,#0FEH
DJNZ R0,MAIN1
MOV R0,#0C8H
; DJNZ R1,MAIN1
; INC R2
; MOV P2,R2
; LJMP MAIN1
D6: JNB ESW1,D1
MOV P2,#0DFH
DJNZ R0,MAIN1
MOV R0,#0C8H
D1: JNB SW1,D7
DJNZ R1,MAIN1
MOV R1,#0FFH
MOV P2,#0FDH
DJNZ R0,MAIN1
MOV R0,#0C8H
D7: JNB ESW3,MAIN1
MOV P2,#0BFH
DJNZ R0,MAIN1
MOV R0,#0C8H
LJMP MAIN1
;*************************
;****子程序***************
;----独立按键-------------
;----DULIKEY--------------
;----2011.01.20-----------
;----11.0592MHZ-----------
DULIKEY:MOV P1,#0FH;设置口
NOP
MOV A,P1;读键
ANL A,#0FH;
XRL A,#0FH;逻辑正
MOV KEY0,A
CJNE A,KEY,ANJ0;键变转移
MOV L20MS,#08H;去抖初值
SJMP ANJ1
ANJ0: MOV A,L20MS
JZ ANJ1
DEC L20MS
MOV KEY0,KEY;放弃不稳定的键
ANJ1: MOV A,KEY;提取键前沿
XRL A,KEY0
ANL A,KEY0
MOV ENKEY,A;前沿键
MOV KEY,KEY0;开关新键
RET
END