專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)匯編:多路延時(shí)開關(guān)

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年06月12日   【字體:

感謝百度網(wǎng)友“做而論道”的幫助!
要求:51單片機(jī),8個(gè)按鍵、8個(gè)發(fā)光二極管。

;一個(gè)鍵按下則對(duì)應(yīng)燈亮,3秒后滅,每個(gè)鍵控制一個(gè)燈。


;題目要求的電路,非常簡(jiǎn)單,用 P1 連接按鍵、P2 連接 LED 即可。


;用定時(shí)器,定時(shí) 7.5 ms,中斷 400 遍,即為 3 秒鐘。


;針對(duì)每個(gè)燈,都要有一個(gè)計(jì)時(shí)單元,用來控制亮燈 3 秒鐘的時(shí)間。


;用匯編語言編寫程序如下:


KEY   EQU  30H

K_L   EQU  31H

K_T   EQU  32H


    ORG   0000H

    AJMP  START

    ORG   000BH       ;T0中斷入口地址

    JMP   T0_INT

START:

    MOV   TH0, #40    ;定時(shí)7.5ms@11.0592MHz

    SETB  TR0

    SETB  ET0

    SETB  EA

    SJMP  $           ;主程序結(jié)束

;--------------------------------

T0_INT:

    MOV   TH0, #40    ;定時(shí)7.5ms@11.0592MHz

    MOV   A, P1

    CPL   A           ;有按鍵,為1

    MOV   KEY, A

    XRL   A, K_L

    MOV   K_T, A

    MOV   K_L, KEY

    MOV   A, KEY

    CPL   A           ;沒按則為1

    ANL   A, K_T      ;釋放則為1

;-----------------------------------

    MOV   R0, #40H

    MOV   R2, #127

T0_L1:

    JNB   ACC.7, $ + 9

    MOV   @R0, #200

    XCH   A, R2

    ANL   P2, A       ;打開LED

    XCH   A, R2


    RL    A

    XCH   A, R2

    RR    A           ;右移R2

    XCH   A, R2

    INC   R0

    CJNE  R0, #48H, T0_L1

;-----------------------------------

    CPL   F0

    JNB   F0, T0_END

    MOV   R0, #40H

    MOV   R2, #128

    MOV   A, R2

T0_L2:

    DEC   @R0

    CJNE  @R0, #255, $ + 6

    INC   @R0

    ORL   P2, A       ;關(guān)閉LED


    RR    A           ;右移R2

    MOV   R2, A

    INC   R0

    CJNE  R0, #48H, T0_L2


T0_END:

    RETI

;-----------------------------------

END

;-----------------------------------


本程序,使用了定時(shí)中斷方式,對(duì)按鍵進(jìn)行檢測(cè);并含有延時(shí)消抖、等待釋放的環(huán)節(jié)。


在按鍵按下、再釋放后,即刻,就能使 LED 發(fā)光,經(jīng)過 3 秒鐘之后,自動(dòng)熄滅。


各個(gè)按鍵的動(dòng)作互不影響,各個(gè) LED 的亮滅,互不干擾,都是獨(dú)立的進(jìn)行控制。


仿真運(yùn)行的截圖如下:

 

關(guān)閉窗口

相關(guān)文章