51 匯編編程:多路延時開關(guān)
掃描二維碼
隨時隨地手機看文章
;51單片機,8個按鍵、8個發(fā)光二極管。
;一個鍵按下則對應(yīng)燈亮,3秒后滅,每個鍵控制一個燈。
;
;題目要求的電路,非常簡單,用P1連接按鍵、P2連接LED即可。
;
;用定時器,定時7.5ms,中斷400遍,即為3秒鐘。
;針對每個燈,都要有一個計時單元,用來控制亮燈3秒鐘的時間。
;用匯編語言編寫程序如下:
KEYEQU30H
K_LEQU31H
K_TEQU32H
ORG0000H
AJMPSTART
ORG000BH;T0中斷入口地址
JMPT0_INT
START:
MOVTH0,#40;定時7.5ms@11.0592MHz
SETBTR0
SETBET0
SETBEA
SJMP$;主程序結(jié)束
;--------------------------------
T0_INT:
MOVTH0,#40;定時7.5ms@11.0592MHz
MOVA,P1
CPLA;有按鍵,為1
MOVKEY,A
XRLA,K_L
MOVK_T,A
MOVK_L,KEY
MOVA,KEY
CPLA;沒按則為1
ANLA,K_T;釋放則為1
;-----------------------------------
MOVR0,#40H
MOVR2,#127
T0_L1:
JNBACC.7,$+9
MOV@R0,#200
XCHA,R2
ANLP2,A;打開LED
XCHA,R2
;
RLA
XCHA,R2
RRA;右移R2
XCHA,R2
INCR0
CJNER0,#48H,T0_L1
;-----------------------------------
CPLF0
JNBF0,T0_END
MOVR0,#40H
MOVR2,#128
MOVA,R2
T0_L2:
DEC@R0
CJNE@R0,#255,$+6
INC@R0
ORLP2,A;關(guān)閉LED
;
RRA;右移R2
MOVR2,A
INCR0
CJNER0,#48H,T0_L2
T0_END:
RETI
;-----------------------------------
END
;-----------------------------------
本程序,使用了定時中斷方式,對按鍵進(jìn)行檢測;并含有延時消抖、等待釋放的環(huán)節(jié)。
在按鍵按下、再釋放后,即刻,就能使LED發(fā)光,經(jīng)過3秒鐘之后,自動熄滅。
各個按鍵的動作互不影響,各個LED的亮滅,互不干擾,都是獨立的進(jìn)行控制。
仿真運行的截圖如下: