您现在的位置: 主页 > MCU > 单片机技术应用 > 单片机编程:键控定时灯 -
本文所属标签:
为本文创立个标签吧:

单片机编程:键控定时灯 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]
如图所示的电路,要求开机时灯灭,按一下按钮,灯D1亮,延时10秒后自动熄灭。若在灯亮期间再按一下按钮,则灯立即熄灭。试编写实现上述功能的完整程序。 要用汇编的哦,C俺还没学。;------------------

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

本文引用地址: http://www.21ic.com/app/mcu/201806/764336.htm



试编写实现上述功能的完整程序。 要用汇编的哦,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毫秒,在四个程序中,这个程序的误差最大。
************************************************************




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > 单片机编程:键控定时灯 -
 

"单片机编程:键控定时灯 -"的相关文章

网站地图

围观()