我要EDA網(wǎng) 發(fā)布日期:2005-11-17 瀏覽次數(shù):768 | ;程控數(shù)碼顯示倒計時紅綠燈(NS-1型51單片機(jī)試驗(yàn)板程序范例)
;單片機(jī)AT89s52控制的倒計時控制電路, ;2005/3
;P2.2--紅燈輸出(繼電器1)
;P2.3--綠燈輸出(繼電器2)
;P3.0--黃燈輸出(繼電器擴(kuò)展)
;P1.7--指示燈,外接的發(fā)光二極管為狀態(tài)LED,定時未開始時LED常亮,定時過程中LED閃爍
;P1.0--P1.6撥碼開關(guān)輸入
;P0----LED數(shù)碼管(0.36英寸)數(shù)據(jù)輸出
;P2.7、P2.6、P2.5、P2.4---LED數(shù)碼管位控制輸出
;K1為開始按鈕,K2為停止按鈕
;由接入P1口的8位撥碼開關(guān)的4.5.6.組合控制
;000=40。001=50S。010=60S。011=70S。100=80S。101=90S。110=100S。111=110S。
;黃燈點(diǎn)亮的時間由8位撥碼開關(guān)的7,8組合控制。
;00=2.0S。01=2.5S。10=3.0S。11=3.5S(秒)。
;停頓時間由8位撥碼開關(guān)的2.3.組合控制:00=0.0S。01=0.5S。10=1.0S。11=1.5S。
首先從P1口讀入撥碼開關(guān)狀態(tài)
;讀撥碼開關(guān)的狀態(tài),獲得倒計時時間
SET1:;MOV A,#0;;首先對A清零
MOV a,p1
rr a
rr a
anl a,#00000111b
MOV b,#10
mul ab;
add a,#5;40
MOV temp1,a;設(shè)置紅綠燈時長撥碼開關(guān)4.5.6位
;============
MOV a,p1
anl a,#00000011b
MOV b,#5
mul ab;
add a,#20
MOV temp2,a;設(shè)置黃燈時長撥碼開關(guān)7.8位
;========================
MOV a,p1
rr a;邏輯右移
swap a
anl a,#00000011b
MOV b,#5
mul ab
MOV temp3,a;設(shè)置停頓時長由撥碼開關(guān)2.3位控制
start1:
MOV a,#01h
MOV r6,a
MOV r7,a
MOV a,temp1
MOV temp,a
;這時TEMP中的值就是倒計時時間
;數(shù)碼管顯示定時時間的子程序
timea:MOV b,#100 ;
div ab
MOV c_bit,a;百位
MOV a,b
MOV b,#10
div ab
MOV b_bit,a;十位
MOV a_bit,b;個位
ret
dpl1: MOV dptr,#numtab ;指定查表啟始地址
MOV r0,#4
MOV r1,#250 ;
dplop: MOV a,a_bit ;取個位數(shù)
MOVC A,@A+DPTR ;查個位數(shù)的7段代碼
MOV p0,a ;送出個位的7段代碼
clr p2.4 ;開個位顯示
ACALL DELY1;顯示1毫秒
setb p2.4;關(guān)閉個位顯示
MOV a,b_bit ;取十位數(shù)
MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
MOV p0,a ;送出十位的7段代碼
clr p2.7 ;開十位顯示
ACALL DELY1;顯示1毫秒
setb p2.7;關(guān)閉十位顯示
MOV a,c_bit ;取百位數(shù)
MOVC A,@A+DPTR ;查百位數(shù)的7段代碼
MOV p0,a ;送出百位的7段代碼
clr p2.6 ;開百位顯示
ACALL DELY1;顯示1毫秒
setb p2.6;關(guān)閉百位顯示
ret |
|
|