51 汇编编程:多路延时开关 -
[导读]
;51单片机,8个按键、8个发光二极管。;一个键按下则对应灯亮,3秒后灭,每个键控制一个灯。;;题目要求的电路,非常简单,用P1连接按键、P2连接LED即可。;;用定时器,定时7.5ms,中断400遍,即为3秒钟。
;51单片机,8个按键、8个发光二极管。
本文引用地址: http://www.21ic.com/app/mcu/201806/764356.htm
;一个键按下则对应灯亮,3秒后灭,每个键控制一个灯。
;
;题目要求的电路,非常简单,用P1连接按键、P2连接LED即可。
;
;用定时器,定时7.5ms,中断400遍,即为3秒钟。
;针对每个灯,都要有一个计时单元,用来控制亮灯3秒钟的时间。
;用汇编语言编写程序如下:
KEYEQU30H
K_LEQU31H
K_TEQU32H
ORG0000H
AJMPSTART
ORG000BH;T0中断入口地址
JMPT0_INT
START:
MOVTH0,#40;定时7.5ms@11.0592MHz
SETBTR0
SETBET0
SETBEA
SJMP$;主程序结束
;--------------------------------
T0_INT:
MOVTH0,#40;定时7.5ms@11.0592MHz
MOVA,P1
CPLA;有按键,为1
MOVKEY,A
XRLA,K_L
MOVK_T,A
MOVK_L,KEY
MOVA,KEY
CPLA;没按则为1
ANLA,K_T;释放则为1
;-----------------------------------
MOVR0,#40H
MOVR2,#127
T0_L1:
JNBACC.7,$+9
MOV@R0,#200
XCHA,R2
ANLP2,A;打开LED
XCHA,R2
;
RLA
XCHA,R2
RRA;右移R2
XCHA,R2
INCR0
CJNER0,#48H,T0_L1
;-----------------------------------
CPLF0
JNBF0,T0_END
MOVR0,#40H
MOVR2,#128
MOVA,R2
T0_L2:
DEC@R0
CJNE@R0,#255,$+6
INC@R0
ORLP2,A;关闭LED
;
RRA;右移R2
MOVR2,A
INCR0
CJNER0,#48H,T0_L2
T0_END:
RETI
;-----------------------------------
END
;-----------------------------------
本程序,使用了定时中断方式,对按键进行检测;并含有延时消抖、等待释放的环节。
在按键按下、再释放后,即刻,就能使LED发光,经过3秒钟之后,自动熄灭。
各个按键的动作互不影响,各个LED的亮灭,互不干扰,都是独立的进行控制。
仿真运行的截图如下:
查看评论 回复
"51 汇编编程:多路延时开关 -"的相关文章
- 上一篇:51 汇编编程:8×8 点阵驱动 -
- 下一篇:51单片机设计测距仪原理及其应用 -