×
单片机 > 单片机程序设计 > 详情

一键六种击键模式编程方法

发布时间:2020-05-23 发布时间:
|

;(程序已经通过实验,工作稳定。程序为了防止干扰特用了退出去抖,如果键一直按着也不会停止主程序,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


关键字:击键模式  编程方法 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于AT91M42800A的LED显示系统设计