单片机编程:键控定时灯

如图所示的电路,要求开机时灯灭,按一下按钮,灯D1亮,延时10秒后自动熄灭。
若在灯亮期间再按一下按钮,则灯立即熄灭。

单片机编程:键控定时灯 - 非著名博主 - 电子信息角落

试编写实现上述功能的完整程序。 要用汇编的哦,C俺还没学。
悬赏分:50 - 解决时间:2010-5-9 20:09
原题网址:http://zhidao.baidu.com/question/151624337.html
;-------------------------------------------------------
这个题目,共有四人给出了程序,楼主选择的,却是一个最差的程序。
有位网友,已经对做而论道的程序和另一个程序,进行了对比,结果说明做而论道的程序是正确的。
下面把做而论道的程序写在下面,供大家评论。
下列程序,经过仿真,可以满足要求。
;================================
    ORG 0000H
START:
    JNB P3.2, $
    SETB P1.0
    JB   P3.2, $
    CALL DL10ms
    JB   P3.2, START
    JNB P3.2, $
    CLR P1.0
    MOV R4, #10
S2_DL1:
    MOV R5, #100
S2_DL2:
    JNB P3.2, START
    CALL DL10ms
    DJNZ R5, S2_DL2
    DJNZ R4, S2_DL1
    SJMP START
;--------------------------------
DL10ms:
    MOV R6, #20      ;延时10ms
DELAY:
    MOV R7, #248
    DJNZ R7, $
    DJNZ R6, $ - 4
    RET
;================================
END
;本程序虽然没有使用定时器,经过仿真证明,时间的误差在11毫秒之内,约为万分之一。
回答者:做而论道 - 十三级   2010-5-7 21:03
************************************************************
下面是楼主选择的最佳答案:
--------------------------------------
    ORG 0000H
    LJMP MAIN
    ORG 0003H
    LJMP INTI
    ORG 0030H
MAIN:
    MOV SP, #60H
    SETB EX0
    SETB EA
    SETB IT0
    JB   P1.0, $      ;等待按键按下
    LCALL DELAY       ;延时
    SETB P1.0
    LJMP $            ;继续等待

INTI:
    CPL P1.0
    RETI

DELAY:                ;延时10.060秒
    MOV R7, #80
D1: MOV R6, #250
D2: MOV R5, #250
    DJNZ R5, $
    DJNZ R6, D2
    DJNZ R7, D1
    RET
END
回答者:XXXXXXXX 2010-5-9 19:59
--------------------------------------
做而论道的点评:
该程序,只是在第一次按键的时候,亮灯10秒后自动关闭;以后再按下按键,就没有定时关灯的现象了。
该程序没有消抖的功能,在亮灯10秒期间,再按下按键,会有什么现象?显示将会很乱。
另外,延时10秒,误差为60毫秒,在四个程序中,这个程序的误差最大。
************************************************************
其它的程序,或多或少都有些不足,感兴趣的网友可以到原题网址去查看。
呵呵,胡乱评论,欢迎拍砖。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值