?? 1key6.asm
字號:
;
;;
;;;
;;;一鍵多能開關程序
;;;杜洋 2005年7月30日0:57
;;;
;;;電路結構:P1口接8個LED(低電平使能)
;;;P3.3口接鍵盤(占用中斷)
;;;
;;;程序功能:
;;;可以用單鍵實現6種功能,
;;;所有按鍵功能占用時間小于1秒.
;;;1秒內單擊一次,1號燈亮
;;;1秒內雙擊,2號燈亮
;;;1秒內三次按鍵,3號燈亮
;;;1秒內長按,4號燈亮
;;;1秒內單擊加長按,5號燈亮
;;;1秒內二次單擊加長按,6號燈亮
;;;程序正常工作時,8號燈閃爍(2HZ)
;;;
;;
;
;----------------------------------------程序入口
ORG 0000H;主程序入口
LJMP START
ORG 0013H;中斷程序入口
LJMP INTT1
ORG 0030H
;----------------------------------------引腳定義
LED1 EQU P1.0;1秒內單擊一次,1號燈亮
LED2 EQU P1.1;1秒內雙擊,2號燈亮
LED3 EQU P1.2;1秒內三次按鍵,3號燈亮
LED4 EQU P1.3;1秒內長按,4號燈亮
LED5 EQU P1.4;1秒內單擊加長按,5號燈亮
LED6 EQU P1.5;1秒內二次單擊加長按,6號燈亮
WLED EQU P1.7;程序正常工作閃爍指示燈
RAM1 EQU 20H ;按鍵功能寄存器
K1 EQU P3.3 ;按鍵(中斷)
;-----------------------------------------初始化程序
START:
CLR P3.7 ;選通WS 系列實驗板的LED 流水燈的電源控制端
SETB K1
CLR A
MOV R0,A
SETB IT1
SETB EX1
SETB EA
;--------------------------------------主程序循環
LOOP:;
CPL WLED;工作指示燈閃亮(表示程序正常)
CALL DL05S
JMP LOOP
;--------------------------------------按鍵中斷程序
INTT1:
CLR EA
PUSH PSW
PUSH ACC
CALL DL20MS;入鍵去抖
JB K1,INT1_OVER
MOV R5,#40;一次按鍵處理的總時間長度(800毫秒)
I1:;1秒內長按,4號燈亮
CALL DL20MS
JB K1,I2
DJNZ R5,I1
MOV R0,#4
CPL LED4
JMP INT1_WORK
I2:;1秒內單擊一次,1號燈亮
CALL DL20MS
JNB K1,I3
DJNZ R5,I2
MOV R0,#1
CPL LED1
JMP INT1_WORK
I3:;1秒內單擊加長按,5號燈亮
CALL DL20MS
JB K1,I4
DJNZ R5,I3
MOV R0,#5
CPL LED5
JMP INT1_WORK
I4:;1秒內雙擊,2號燈亮
CALL DL20MS
JNB K1,I5
DJNZ R5,I4
MOV R0,#2
CPL LED2
JMP INT1_WORK
I5:;1秒內二次單擊加長按,6號燈亮
CALL DL20MS
JB K1,I6
DJNZ R5,I5
MOV R0,#6
CPL LED6
JMP INT1_WORK
I6:;1秒內三次按鍵,3號燈亮
MOV R0,#3
CPL LED3
INT1_WORK:;按鍵寄存器處理,備其它程序查用。
MOV 20H,R0
MOV R0,#0
MOV R5,#80
INT1_OVER:;按鍵程序退出去抖動。
CALL DL20MS
JB K1,I00
DJNZ R5,INT1_OVER
I00:;退出中斷
POP ACC
POP PSW
SETB EA
RETI
;---------------------------------延時子程序
DELAY:
DL20MS: ;
MOV R6,#255
DL20MS_1:MOV R7,#255
DJNZ R7,$
DJNZ R6,DL20MS_1
RET
DL100MS: ;
MOV R4,#5
DL100MS_1:CALL DL20MS
DJNZ R4,DL100MS_1
RET
DL05S: ;
MOV R4,#25
DL05S_1:CALL DL20MS
DJNZ R4,DL05S_1
RET
;--------------------------------程序結束
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -