单片机编程:键控定时灯
扫描二维码
随时随地手机看文章
如图所示的电路,要求开机时灯灭,按一下按钮,灯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毫秒,在四个程序中,这个程序的误差最大。
************************************************************