(玩電子) 電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機匯編:多路延時開關

作者:佚名   來源:本站原創   點擊數:x  更新時間:2013年06月12日   【字體:

感謝百度網友“做而論道”的幫助!
要求:51單片機,8個按鍵、8個發光二極管。

;一個鍵按下則對應燈亮,3秒后滅,每個鍵控制一個燈。


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


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


;針對每個燈,都要有一個計時單元,用來控制亮燈 3 秒鐘的時間。


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


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    ;定[email protected]

    SETB  TR0

    SETB  ET0

    SETB  EA

    SJMP  $           ;主程序結束

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

T0_INT:

    MOV   TH0, #40    ;定[email protected]

    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       ;關閉LED


    RR    A           ;右移R2

    MOV   R2, A

    INC   R0

    CJNE  R0, #48H, T0_L2


T0_END:

    RETI

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

END

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


本程序,使用了定時中斷方式,對按鍵進行檢測;并含有延時消抖、等待釋放的環節。


在按鍵按下、再釋放后,即刻,就能使 LED 發光,經過 3 秒鐘之后,自動熄滅。


各個按鍵的動作互不影響,各個 LED 的亮滅,互不干擾,都是獨立的進行控制。


仿真運行的截圖如下:

 

發表評論】【告訴好友】【收藏此文】【關閉窗口

文章評論

相關文章

全天计划时时彩