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

单片机编程:键控定时灯

发布时间:2020-08-26 发布时间:
|

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



试编写实现上述功能的完整程序。 要用汇编的哦,C俺还没学。

;-------------------------------------------------------
这个题目,共有四人给出了程序,楼主选择的,却是一个最差的程序。
有位网友,已经对做而论道的程序和另一个程序,进行了对比,结果说明做而论道的程序是正确的。
下面把做而论道的程序写在下面,供大家评论。
下列程序,经过仿真,可以满足要求。
;================================
    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毫秒之内,约为万分之一。 
最佳答案:
--------------------------------------
    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 

--------------------------------------
点评:
该程序,只是在第一次按键的时候,亮灯10秒后自动关闭;以后再按下按键,就没有定时关灯的现象了。
该程序没有消抖的功能,在亮灯10秒期间,再按下按键,会有什么现象?显示将会很乱。
另外,延时10秒,误差为60毫秒,在四个程序中,这个程序的误差最大。
************************************************************



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

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法