基于單片機的“乒乓球”游戲機智能控制系統(tǒng)
0 前言
日常娛樂生活中,智能化的娛樂產(chǎn)品非常流行。單片機具有功能強、可靠性高、使用方便、體積小及重量輕等優(yōu)點。國外已廣泛應(yīng)用于自動化控制的各個領(lǐng)域。近年來,國內(nèi)的單片機技術(shù)與產(chǎn)品開發(fā)應(yīng)用方面的發(fā)展也很快,各種電子產(chǎn)品已越來越多地采用單片機控制系統(tǒng)且性價比高。本文從實用的角度以AT89C2051單片機為核心設(shè)計了一種智能“乒乓球”游戲機。實踐證明,該游戲機運行狀況穩(wěn)定、可靠,滿足了智能化要求。
1 系統(tǒng)的基本工作原理
本設(shè)計中,通過5只連續(xù)排列的發(fā)光二極管的依次點亮代表“乒乓球”的運動。再用兩個按鍵模擬左右兩個球拍,鍵按下代表球拍擊球?!白笈摹卑聪驴墒拱l(fā)光二極管從左向右依次點亮,如同“乒乓球”從左向右飛來;“右拍”按下則可使發(fā)光二極管從右向左依次點亮,代表“乒乓球”從右向左運動。在游戲過程中,用數(shù)碼顯示管實時顯示雙方比分。游戲規(guī)則如下:
(1)“乒乓球”移動速度是固定的,設(shè)定每秒鐘移動一位(發(fā)光二極管)。
(2)在“乒乓球”移位一次的過程中,進行25次的測試(即每40毫秒一次),查詢接球方是否有擊球動作。
①安徽省教育廳基金項目。編號:2003JK093
(3)接球方的擊球動作應(yīng)發(fā)生在“乒乓球”到達本方最后一位發(fā)光二極管(即點亮)一秒鐘時間之內(nèi)。如接球方在此一秒鐘之內(nèi)按鍵,則接球成功,接球方得分?!捌古仪颉鞭D(zhuǎn)為相反方向運動。此后,原接球方變?yōu)榘l(fā)球方,原發(fā)球方變?yōu)榻忧蚍?。游戲繼續(xù)進行。
(4)如接球方提前或滯后擊球,則接球方失誤。雙方都不得分。這時“乒乓球”熄滅,數(shù)碼顯示管顯示雙方的比分不變。然后仍由原發(fā)球方發(fā)球。
2 硬件組成
具體電路由單片機電路、發(fā)光二極管顯示電路、按鍵電路和數(shù)碼顯示電路等部分組成。
2.1 單片機電路
AT89C2051、X1、R1、C1等組成單片機電路,R1、C1組成單片機的復位電路,接通電源的瞬間,由于電源電壓通過R1對C1的充電過程,單片機AT89C2051復位端1腳獲得一個高電平復位脈沖,使得單片機進入初始狀態(tài)。見圖1。
2.2 發(fā)光二極管顯示和按鍵電路
利用AT89C2051作發(fā)光二極管和按鍵的接口電路。P3.0~P3.4口接5只發(fā)光二極管,P3.7口接左按鍵,模擬左拍擊球動作;P3.5口接右按鍵,模擬右拍擊球動作。見圖1。
2.3 數(shù)碼顯示電路
利用顯示譯碼器MC14459組成6位共陰極LED靜態(tài)顯示電路。當P1.4=1時,譯碼器74LS138開通,由P1.5~P1.7口經(jīng)譯碼器74LS138控制各MC14459芯片依次選通各LED,同時由P1.0~P1.3口將欲顯示的十六進制數(shù)直接輸出到各MC14459芯片中,再使控制端為高電平,鎖存P1.0~P1.3口輸出的數(shù)據(jù),并進行譯碼驅(qū)動顯示。見圖1。
圖1 系統(tǒng)原理框圖
3 軟件設(shè)計
為了便于調(diào)試,本系統(tǒng)的軟件主要采用模塊化結(jié)構(gòu)設(shè)計,具體的程序由主程序、“乒乓球”左移子程序、“乒乓球”右移子程序和比分顯示子程序等模塊組成。下面給出了主程序、“乒乓球”左移子程序、“乒乓球”右移子程序及顯示子程序的流程圖。
3.1 主程序
主程序的功能是進行初始化工作,并控制“乒乓球”游戲的開始。模擬左拍的按鍵接P3.7口,模擬右拍的按鍵接P3.5口。游戲開始時,顯示的比分是零比零,此后,如左拍按下則“乒乓球”右移;如右拍按下則“乒乓球”左移。在主程序中,需要用四個通用寄存器分別作為右方得分寄存器、左方得分寄存器、1秒計時常數(shù)寄存器及“乒乓球”移位計數(shù)器。其流程圖見圖2。
圖2 主程序流程圖
3.2 “乒乓球”左移子程序
左移子程序的主要功能是控制“乒乓球”的向左移動,并在逐位移動過程中判斷是否有左拍擊球動作。只有當“乒乓球”移動到最左的一秒時間內(nèi)擊球才是有效的,左拍得分,并轉(zhuǎn)乒乓球右移子程序,使“乒乓球”向右移動,即相當于左方發(fā)球。除此之外,所有的左拍擊球都算失誤,重新開始“乒乓球”左移子程序,相當于由右方重新發(fā)球。其流程圖見圖3。
圖3 “乒乓球”左移子程序流程圖
3.3 “乒乓球”右移子程序
“乒乓球”的右移子程序的原理與左移子程序的原理相同,只要把左移子程序流程圖中的“右”與“左”互換即可。
3.4 顯示子程序
3.4.1 比分顯示格式
比分顯示用六位數(shù)碼顯示管進行顯示。其顯示格式見圖4。
圖4 “乒乓球”游戲比分顯示格式
3.4.2 顯示原理
“乒乓球”游戲的左右拍得分分別存在左方得分寄存器和右方得分寄存器中(在主程序中已設(shè)置好兩個寄存器)。首先設(shè)置初值,使二極管熄滅并使比分顯示為“00——00”,然后游戲開始,如左拍或右拍正確擊球,相應(yīng)方的比分加1分,否則比分保持原來比分不變。其流程圖見圖5。
圖5 顯示子程序流程圖
4 結(jié)束語
本文作者創(chuàng)新點:整個設(shè)計以AT89C2051單片機為核心,充分利用了AT89C2051有限的外圍引腳資源,實現(xiàn)了對“乒乓球”游戲機的左右操作及比分顯示的控制。整個系統(tǒng)通過按鍵可以很方便地操作。且運行穩(wěn)定,抗干擾能力強。真正實現(xiàn)了娛樂產(chǎn)品的智能化。
參考文獻
[1] 李廣第.單片機基礎(chǔ)[M].北京:北京航空航天大學出版社,1993.
[2] 盧存?zhèn)?,錢捷.微機原理及應(yīng)用系統(tǒng)設(shè)計[M].南京:河海大學出版社,1992.
[3] 劉淑榮,丁錄軍.基于單片機控制的溫度智能控制系統(tǒng)[J].微計算機信息,2003,19-7:29-30。
評論