新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機匯編:多路延時開關

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

        作者: 時間:2016-11-30 來源:網絡 收藏
        要求:51單片機,8個按鍵、8個發光二極管。

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

        本文引用地址:http://www.104case.com/article/201611/323739.htm


        ;題目要求的電路,非常簡單,用 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 ;定時7.5ms@11.0592MHz

        SETB TR0

        SETB ET0

        SETB EA

        SJMP $ ;主程序結束

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

        T0_INT:

        MOV TH0, #40 ;定時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 ;關閉LED


        RR A ;右移R2

        MOV R2, A

        INC R0

        CJNE R0, #48H, T0_L2


        T0_END:

        RETI

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

        END

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


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


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


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


        仿真運行的截圖如下:



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 庄河市| 东光县| 辽宁省| 长宁县| 杂多县| 德化县| 通州区| 西峡县| 潢川县| 友谊县| 普洱| 安化县| 湘潭县| 集安市| 瓮安县| 榆树市| 南丰县| 深水埗区| 罗山县| 阜新| 松原市| 巢湖市| 武汉市| 阳东县| 新安县| 建始县| 利川市| 永定县| 南充市| 尼勒克县| 怀远县| 平定县| 黄大仙区| 红安县| 黔东| 上犹县| 凤阳县| 宁河县| 柯坪县| 桐柏县| 偏关县|