單片機(jī)編程:鍵控定時(shí)燈
如圖所示的電路,要求開機(jī)時(shí)燈滅,按一下按鈕,燈D1亮,延時(shí)10秒后自動(dòng)熄滅。
若在燈亮期間再按一下按鈕,則燈立即熄滅。
試編寫實(shí)現(xiàn)上述功能的完整程序。 要用匯編的哦,C俺還沒學(xué)。
;-------------------------------------------------------
這個(gè)題目,共有四人給出了程序,樓主選擇的,卻是一個(gè)最差的程序。
有位網(wǎng)友,已經(jīng)對做而論道的程序和另一個(gè)程序,進(jìn)行了對比,結(jié)果說明做而論道的程序是正確的。
下面把做而論道的程序?qū)懺谙旅妫┐蠹以u(píng)論。
下列程序,經(jīng)過仿真,可以滿足要求。
;================================
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 ;延時(shí)10ms
DELAY:
MOV R7, #248
DJNZ R7, $
DJNZ R6, $ - 4
RET
;================================
END
;本程序雖然沒有使用定時(shí)器,經(jīng)過仿真證明,時(shí)間的誤差在11毫秒之內(nèi),約為萬分之一。
最佳答案:
--------------------------------------
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 ;延時(shí)
SETB P1.0
LJMP $ ;繼續(xù)等待
INTI:
CPL P1.0
RETI
DELAY: ;延時(shí)10.060秒
MOV R7, #80
D1: MOV R6, #250
D2: MOV R5, #250
DJNZ R5, $
DJNZ R6, D2
DJNZ R7, D1
RET
END
--------------------------------------
點(diǎn)評(píng):
該程序,只是在第一次按鍵的時(shí)候,亮燈10秒后自動(dòng)關(guān)閉;以后再按下按鍵,就沒有定時(shí)關(guān)燈的現(xiàn)象了。
該程序沒有消抖的功能,在亮燈10秒期間,再按下按鍵,會(huì)有什么現(xiàn)象?顯示將會(huì)很亂。
另外,延時(shí)10秒,誤差為60毫秒,在四個(gè)程序中,這個(gè)程序的誤差最大。
************************************************************