历史上的今天
今天是:2025年01月14日(星期二)
2018年01月14日 | 一键六种击键模式编程方法
2018-01-14 来源:eefocus
;(程序已经通过实验,工作稳定。程序为了防止干扰特用了退出去抖,如果键一直按着也不会停止主程序,1.5秒后自动退出中断)
; 一键六种击键模式编程方法
;电路结构:P1口接8个LED(低电平使能)
; P3.2口接键盘(占用中断)
;程序功能:可以用单键实现6种功能,
; 所有按键功能占用时间小于1秒.
;1秒内单击一次,1号灯亮
;1秒内双击,2号灯亮
;1秒内三次按键,3号灯亮
;1秒内长按,4号灯亮
;1秒内单击加长按,5号灯亮
;1秒内二次单击加长按,6号灯亮
;程序正常工作时,8号灯闪烁(2Hz)
;---------程序入口
ORG 0000H;主程序入口
JMP START
ORG 0003H;中断程序入口
JMP INTT0
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.2 ;按键(中断)
;-----------------------------------------初始化程序
START:;
SETB K1
CLR A
MOV R0,A
SETB IT0
SETB EX0
SETB EA
;--------------------------------------主程序循环
LOOP:;
CPL WLED;工作指示灯闪亮(表示程序正常)
CALL DL05S
JMP LOOP
;--------------------------------------按键中断程序
INTT0:;
CLR EA
PUSH PSW
PUSH ACC
CALL DL20MS;入键去抖
JB K1,INT0_OVER
MOV R5,#40;一次按键处理的总时间长度(800毫秒)
I1:;1秒内长按,4号灯亮
CALL DL20MS
JB K1,I2
DJNZ R5,I1
MOV R0,#4
CPL LED4
JMP INT0_WORK
I2:;1秒内单击一次,1号灯亮
CALL DL20MS
JNB K1,I3
DJNZ R5,I2
MOV R0,#1
CPL LED1
JMP INT0_WORK
I3:;1秒内单击加长按,5号灯亮
CALL DL20MS
JB K1,I4
DJNZ R5,I3
MOV R0,#5
CPL LED5
JMP INT0_WORK
I4:;1秒内双击,2号灯亮
CALL DL20MS
JNB K1,I5
DJNZ R5,I4
MOV R0,#2
CPL LED2
JMP INT0_WORK
I5:;1秒内二次单击加长按,6号灯亮
CALL DL20MS
JB K1,I6
DJNZ R5,I5
MOV R0,#6
CPL LED6
JMP INT0_WORK
I6:;1秒内三次按键,3号灯亮
MOV R0,#3
CPL LED3
INT0_WORK:;按键寄存器处理,备其它程序查用。
MOV 20H,R0
MOV R0,#0
MOV R5,#80
INT0_OVER:;按键程序退出去抖动。
CALL DL20MS
JB K1,I00
DJNZ R5,INT0_OVER
I00:;退出中断
< POP ACC
POP PSW
SETB EA
RETI
;---------------------------------延时子程序
DELAY:
DL20MS:
MOV R6,#100
DL20MS_1:MOV R7,#100
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
上一篇:HT6221/2解码成标准的键值
下一篇:单片机遥控控制的霓虹灯程序
史海拾趣
|
诚聘电子设计师一名。 要求:①.大专以上学历,电子类相关专业; ②.三年以上电子电路设计经验; ③.熟悉单片机开发、汇编语言,熟练使用protel、cad等相关设计软件,精通模拟和数字电路,了解常用电子元器件的性能及特性; ④.能独立开发设计电路 ...… 查看全部问答> |
|
verilog中 比如always @(posedge clk)//CLK频率为125MHZ. 8ns周期 begin ...... end 实际begin end中的语句执行一次 要多少时间啊… 查看全部问答> |
|
最近玩launchpad,写了个简单的小程序通过msp430g2553内部测量温度,然后通过串口通信上传给电脑,但是没有加上校正,只能简单的使用… 查看全部问答> |
|
大家好: 第二期学生的全免费培训已经正式开始,这一期的培训视频也是全部免费的除了周末外视频可能会不定时更新,敬请大家以后多关注。 以下是这一期的培训视频: 免费视频地址为: http://pan.baidu.com/share/link?shareid=484506&uk=1846172 ...… 查看全部问答> |




