89c52獨立按鍵介紹?的主要設(shè)備主要包括數(shù)碼管(用于顯示倒計時時間和搶答成功的玩家人數(shù))按鈕(主持人按鈕和玩家按鈕)。使用單獨的鍵盤,程序循環(huán)等待鍵輸入。一旦玩家按下該鍵,即單片機輸入端口為1(或0,自行設(shè)置)時,阻止其他鍵輸入,并相應(yīng)顯示玩家號,倒計時結(jié)束無人搶答時將失效。
單片機編程實現(xiàn)0---20秒計時器,并用proteus軟件設(shè)計硬件電路?
可以設(shè)置倒計時定時器的時間,并可以選擇5/15/20/30/35/45/50分鐘倒計時。倒計時時間由四個dip開關(guān)位的1/2/3控制,
第二個數(shù)字表示5分鐘,第三個數(shù)字表示15分鐘,第四個數(shù)字表示30分鐘。
5/15/20/30/35/45/50分鐘倒計時可以通過不同的組合產(chǎn)生。
P1.0端口的外接發(fā)光二極管為狀態(tài)LED,在計時未開始時常亮,計時過程中閃爍。
K1是開始按鈕,K2是停止按鈕。
A_bitequ20h數(shù)碼管一位數(shù)存儲單元
B_bitequ21h數(shù)碼管十位存儲單元
Tempequ22h計數(shù)器值存儲位置
引導(dǎo)初始化
Movp3和#0ffh初始化p3端口,并將其設(shè)置為高電平,用于按鍵輸入。
MOVP0,#0FFH關(guān)閉數(shù)碼管顯示時間。
CLRP1.0點亮L:JBP3.6,$loop確定開始按鈕K1是否按下?
呼叫延遲10延遲10毫秒觸點抖動消除
JBP3.6,如果是干擾,START返回。
JNBP3.6,$等待按鈕被釋放。
讀取dip開關(guān)的狀態(tài),并獲得倒計時時間。
S:
MOVA,#0先清除A。
JBP2.0,A1判斷dip開關(guān)第二位是否連接,如果連接則A加5。
添加一個,#5
A1:JBp2.1和A2判斷dip開關(guān)第三位是否接通,如果接通則A加15。
加一個,#15
A2:JBp2.2和A3判斷dip開關(guān)的第四位是否接通,如果接通則A加30。
加一個,#30
A3:·MOV臨時雇員
此時,T:
CLRP2.4釋放繼電器1并開始計時(啟動時繼電器處于吸合狀態(tài))。
CLRP2.3釋放繼電器2并開始計時(啟動時繼電器處于吸合狀態(tài))。
MOV·R2#120
AB1:MOVR3,編號250
TIM:MOV一,臨時轉(zhuǎn)換成十進制數(shù)臨時十六進制數(shù)。
Movb,#1010十進制/10=十進制
分部ab
Movb_bit,一個十在一個。
Mova_bit,b位在b中。
Movdptr,#numtab指定查找表的起始地址。
movr0,#4
dpl1:movR1,#250
Dplop:MOVA,A_BIT取個位數(shù)。
MOVCA,@ADPTR,用個位數(shù)查7段碼。
Movp0,a發(fā)送7位代碼。
Clrp2.7打開位顯示。
呼叫延遲1顯示1毫秒。
Setbp2.7關(guān)閉單元顯示器以防止重影。
Mova,b_bit取十位數(shù)。
MOVC一個,@DPTR一個,檢查十位數(shù)的7段碼。
Movp0,a發(fā)送七段十位數(shù)的代碼。
Clrp2.6打開十位數(shù)顯示。
呼叫延遲1顯示1毫秒。
Setbp2.6關(guān)閉十位數(shù)顯示,防止重影。
插入一個程序段,判斷計時過程中是否有按鍵輸入。
C1:JBp3.6,B1
呼叫延遲10延遲10毫秒以消除抖動。
JBP3.6,C1
JNBP3.6,$等待按鈕被釋放。
AJMP集合1
B1:JBp3.7,M33
呼叫延遲10延遲10毫秒以消除抖動。
JBP3.7,B1
JNBP3.7,$等待按鈕被釋放。
AJMP結(jié)束
M33:DjNZR3,時間12ms循環(huán)執(zhí)行250次,時間約為0.5秒。
CPLP1.0使LED每1秒閃爍一次。
Djnzr2,AB1循環(huán)在1分鐘內(nèi)執(zhí)行120次。
十二月溫度零下1度整整一分鐘。
MOVA,臨時
JNZ顯示
判斷TEMP的值是否為0?不為0的周期。
結(jié)束計時
overCHO15-@.comclrp1.0L:·MOV·R4,排名第二D1:MOVR5,編號248
DJNZR5,美元
D1DJNZR4
浸水使柔軟
10毫秒延遲子程序
D:MOVR4,#20
D2:MOVR5,編號248
DJNZR5,美元
D2DJNZR4
浸水使柔軟
實驗板上7個數(shù)碼管的0~9位的常用負顯示碼。
NUMTAB:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
結(jié)束