新聞中心

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

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

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

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

本文引用地址:http://2s4d.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

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


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


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


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


仿真運行的截圖如下:



評論


技術專區(qū)

關閉