51单片机汇编:多路延时开关
;一个键按下则对应灯亮,3秒后灭,每个键控制一个灯。
;题目要求的电路,非常简单,用 P1 连接按键、P2 连接 LED 即可。
;用定时器,定时 7.5 ms,中断 400 遍,即为 3 秒钟。
;针对每个灯,都要有一个计时单元,用来控制亮灯 3 秒钟的时间。
;用汇编语言编写程序如下:
KEY EQU 30H
K_L EQU 31H
K_T EQU 32H
ORG 0000H
AJMP START
ORG 000BH ;T0中断入口地址
JMP T0_INT
START:
MOV TH0, #40 ;定时7.5ms@11.0592MHz
SETB TR0
SETB ET0
SETB EA
SJMP $ ;主程序结束
;--------------------------------
T0_INT:
MOV TH0, #40 ;定时7.5ms@11.0592MHz
MOV A, P1
CPL A ;有按键,为1
MOV KEY, A
XRL A, K_L
MOV K_T, A
MOV K_L, KEY
MOV A, KEY
CPL A ;没按则为1
ANL A, K_T ;释放则为1
;-----------------------------------
MOV R0, #40H
MOV R2, #127
T0_L1:
JNB ACC.7, $ + 9
MOV @R0, #200
XCH A, R2
ANL P2, A ;打开LED
XCH A, R2
RL A
XCH A, R2
RR A ;右移R2
XCH A, R2
INC R0
CJNE R0, #48H, T0_L1
;-----------------------------------
CPL F0
JNB F0, T0_END
MOV R0, #40H
MOV R2, #128
MOV A, R2
T0_L2:
DEC @R0
CJNE @R0, #255, $ + 6
INC @R0
ORL P2, A ;关闭LED
RR A ;右移R2
MOV R2, A
INC R0
CJNE R0, #48H, T0_L2
T0_END:
RETI
;-----------------------------------
END
;-----------------------------------
本程序,使用了定时中断方式,对按键进行检测;并含有延时消抖、等待释放的环节。
在按键按下、再释放后,即刻,就能使 LED 发光,经过 3 秒钟之后,自动熄灭。
各个按键的动作互不影响,各个 LED 的亮灭,互不干扰,都是独立的进行控制。
仿真运行的截图如下:
51单片机汇编多路延时开 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)