一键多能开关.7z
(114.91 KB, 下载次数: 13)
先上程序。
哈哈!大家如果不想花黑币,何不来粘贴免费的程序(所有代码如下):
;
;;
;;;
;;;一键多能开关程序
;;;
;;;电路结构: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
|