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