單片機(jī)八人搶答器程序設(shè)計(jì)
有一個(gè)《單片機(jī)八人搶答器程序設(shè)計(jì)》的題目。
設(shè)計(jì)要求:
利用?KEIL?軟件編制控制程序。
利用?PROTEUS?仿真軟件,繪制單片機(jī)控制系統(tǒng):
P1?口接?8?個(gè)按鈕,編號(hào)為1、2、3、...7、8;
P3.7?接主持人“開(kāi)始/復(fù)位”按鈕;
P0?口接一個(gè)數(shù)碼管(共陽(yáng)極);
P2?口接?8?個(gè)LED燈,用于對(duì)應(yīng)8個(gè)小組搶答指示。
(1)當(dāng)主持人沒(méi)有按下“開(kāi)始”按鈕時(shí),數(shù)碼管顯示0;
(2)當(dāng)主持人按下“開(kāi)始”按鈕并松開(kāi)后,數(shù)碼管顯示P,允許各小組搶答;
(3)若有某一個(gè)小組按鈕按下,點(diǎn)亮搶答小組的指示燈,并將搶答小組號(hào)顯示在數(shù)碼管上。
(4)當(dāng)主持人按下“復(fù)位”按鈕并松開(kāi)后,重新進(jìn)入(1)。
源程序?匯編?和?C51?都可以!
做而論道的設(shè)計(jì)程序如下:
;簡(jiǎn)易搶答器
;------------------------------------------?
KAI??BIT??P3.7?????????;開(kāi)始鍵
;------------------------------------------?
????ORG???0000H
????JMP???START
START:
;----------------------;下面是清零(復(fù)位)
????MOV???P0,?#0C0H????;顯示0
????MOV???P2,?#255?????;熄燈
????MOV???R4,?#0
;----------------------;下面等待按下"開(kāi)始"鍵
KAISHI:
????JB????KAI,?KAISHI??;沒(méi)有按"開(kāi)始",就循環(huán)
????CALL??DELAY????????;延時(shí)
????JB????KAI,?KAISHI??;消抖
????JNB???KAI,?$???????;等待釋放
;----------------------
????MOV???P0,?#0CH?????;顯示P
WAIT:??????????????????;等待搶答
????MOV???A,?P1
????CPL???A
????JZ????WAIT?????????;繼續(xù)等待
;----------------------
XS:????????????????????;查找選手按鍵的位置
????CPL???A
????MOV???P2,?A
????JNB???ACC.0,?J0
????JNB???ACC.1,?J1
????JNB???ACC.2,?J2
????JNB???ACC.3,?J3
????JNB???ACC.4,?J4
????JNB???ACC.5,?J5
????JNB???ACC.6,?J6
;????JMP??????????J7
J7:?INC???R4
J6:?INC???R4
J5:?INC???R4
J4:?INC???R4
J3:?INC???R4
J2:?INC???R4
J1:?INC???R4
J0:?INC???R4
????MOV???A,?R4
????MOV???DPTR,?#D_TAB
????MOVC??A,?@A?+?DPTR
????MOV???P0,?A
;----------------------;下面等待按下復(fù)位鍵
W_FW:
????JB????KAI,?W_FW????;沒(méi)有按,則轉(zhuǎn)
????CALL??DELAY????????;延時(shí)
????JB????KAI,?W_FW????;消抖
????JNB???KAI,?$???????;等待釋放
????JMP???START
;------------------------
D_TAB:????
????DB???0C0H,0F9H,0A4H,0B0H,?99H?;共陽(yáng)極0-9
????DB????92H,?82H,0F8H,?80H,?90H,0BFH?;-
;------------------------------------------
DELAY:??????;延時(shí)約10ms
????MOV???R6,?#20
????DJNZ??R7,?$
????DJNZ??R6,?$?-?2
????RET
;==========================================
????END
程序運(yùn)行后,主持人按下開(kāi)始按鍵時(shí)顯示的畫(huà)面如下:
有人搶答后,顯示的畫(huà)面如下:
單片機(jī)的控制,有時(shí)序先后的區(qū)別。
程序中,每次都是先檢查?P1.0?處的按鍵,最后檢查?P1.7?的按鍵。
如果,?P1.7?按鍵先按下,P1.3?后按下,但是,開(kāi)始查詢(xún)的時(shí)候,還查不到?P1.7,而是先查到了?P1.3,那么,單片機(jī)將把后按下的,認(rèn)定為成功搶答。
甚至,?P1.7?比?P1.3?先按下?10?微秒,單片機(jī)都會(huì)錯(cuò)誤的認(rèn)定?P1.3?是先按下的。
為了避免出現(xiàn)這種不公平現(xiàn)象,應(yīng)該在《搶答控制》部分,使用純電子器件的電路,以取得高速處理的效果。而單片機(jī)僅僅適用于數(shù)碼顯示等的低速處理。