51 汇编编程:多路延时开关

;

;51单片机,8个按键、8个发光二极管。

;一个键按下则对应灯亮,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 汇编编程:多路延时开关 - 非著名博主 - 电子信息角落


图片链接:http://xiangce.baidu.com/picture/detail/e7d9d2d123f30cf1be711b4dd73d7a2aae580020


题目网址:http://zhidao.baidu.com/question/557503303.html



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值