段奕竹
摘 要:該文主要介紹了一個運用單片機技術(shù)實現(xiàn)電子寵物的制作,這一系統(tǒng)是對于市場上已有的PC機上運行的電子寵物系統(tǒng)在單片機為開發(fā)平臺上的實現(xiàn)。在這個游戲中,用戶可已根據(jù)電子寵物當前的各種生命狀態(tài)來決定給寵物何種操作,而這些操作可以改變寵物的當前的各種生命狀態(tài),使得寵物不會隨著時間的流逝而餓死或者死于其他原因。LED顯示寵物當前的狀態(tài),獨立鍵盤對寵物進行各種操作,蜂鳴器輔助游戲的進行。從本系統(tǒng)的構(gòu)架,設(shè)計,實施,調(diào)試,最終得到一個智能化的界面和人性化的接口,真正地體現(xiàn)了把單片機這樣一門實用性課程放到實際中去的意義,也讓我們組內(nèi)成員在過程中學習到了團隊合作和明確分工,還有將比較龐大的目標拆分成小型的模塊各個擊破的道理。本產(chǎn)品可以用于智能化玩具中,配合以更加逼真的音效,更加絢麗的色彩,將有希望占領(lǐng)一定份額的市場。
關(guān)鍵詞:智能化電子寵物 生命狀態(tài)檢測與控制 LED顯示 鍵盤控制操作
中圖分類號:TN914 文獻標識碼:A 文章編號:1674-098X(2015)03(c)-0016-01
此系統(tǒng)旨在設(shè)計一個基于單片機的“電子寵物”情感游戲系統(tǒng),其主要功能是:用戶使用鍵盤選擇性地對電子寵物進行五種活動操作,從而改變和控制其三種狀態(tài)值,以使寵物的生命狀態(tài)值維持在一定的水平上;若不對寵物進行操作,其生命狀態(tài)值將隨著時間而減少;若狀態(tài)值減少到一定程度,將對用戶進行提醒;在寵物接收到用戶的某種操作時,則出現(xiàn)相應(yīng)的圖像和并發(fā)出鼓勵信號;當寵物的生命值耗盡時,寵物死亡,游戲結(jié)束。以上是該系統(tǒng)所能完成的功能,是基于傳統(tǒng)的電子寵物產(chǎn)品的基本功能設(shè)計的,構(gòu)成了電子寵物系統(tǒng)的基本框架,但仍有很大的自主設(shè)計和擴展空間。
1 設(shè)計要求
1.1 基本要求
(1)電子寵物能按設(shè)定時間吃飯、睡覺、洗澡等(吃飯最少兩次,一次最少吃5個食物)。(2)當某一設(shè)定沒有滿足時,電子寵物發(fā)出提示報警或哭泣。(3)該電子寵物要有聲、光或動作(死活之分)。(4)當某一設(shè)定長期沒有滿足或到壽命時,電子寵物會死去。(5)當所有要求(設(shè)定)滿足時,電子寵物會高興。
1.2 發(fā)揮部分
(1)電子寵物會有生病,生病時要看醫(yī)生。(2)電子寵物知恩圖報。(3)所有功能全部由動作實現(xiàn)。
2 總體結(jié)構(gòu)設(shè)計
合理的C語言設(shè)計和多個硬件模塊的配合應(yīng)用是完成該系統(tǒng)預(yù)期目標的兩個重要部分。軟件結(jié)構(gòu)設(shè)計方面,為了實現(xiàn)電子寵物的基本游戲功能,我們設(shè)計了軟件程序框圖。硬件模塊設(shè)計方面根據(jù)設(shè)計內(nèi)容的要求,我們使用了六個硬件模塊,分別是:二極管,數(shù)碼管,LED點陣,時鐘,蜂鳴器,獨立式按鍵。
3 主要硬件設(shè)計
3.1 LED點陣
LED顯示區(qū)由一塊8*8LED點陣構(gòu)成,整個顯示模塊大小是8列*8行。要通過LED的靜態(tài)顯示一張圖案,必須采用循環(huán)控制。第一個8位寄存器存儲一個字節(jié),通過該字節(jié)的8位二進制碼信息控制當前操作的LED小燈所處的行數(shù),例如#80H表示當前將對第八行LED進行操作。LED點陣是通過單片機的PO口和P2口以及74HC138芯片相連。
3.2 鍵盤
使用獨立式鍵盤,輸入到單片機的P2口。每個鍵的功能如表1所示。
3.3 時鐘
本程序采用的時鐘是T0和T1,其中T0時鐘采用中斷,在中斷子程序中采用查詢是否有按鍵按下的方法,而T1時鐘為了配合聲音產(chǎn)生特定頻率的方波,采用查詢方法定時。其中時鐘0采用第2種工作方式,而時鐘1采用第1種工作方式,所以在一開始初始化的時候就有MOV TMOD,#12H。
3.4 蜂鳴器
本程序中所使用的聲音是蜂鳴器發(fā)出的,通過一根一位口線(P3.3)連接。輔助以計時器T1的幫助,產(chǎn)生特定頻率的方波,產(chǎn)生相應(yīng)的音符。要做到這一點,給T1設(shè)定正確的初始值尤為重要。例如頻率為523 Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計1912/2=956次,后將I/O反相,就可以得到523Hz的音符,中音“DO”。
定時/計數(shù)器選擇8分頻CTC模式,下表中每格內(nèi)上行為頻率,下行為OCR的值,沒有寫出的說明需要改變分頻。第一列列出了4個八度區(qū)。
曲目選擇功能使用switch語句,通過改變整型j的值改變曲目序號,從而選擇不同的play函數(shù)進行調(diào)用。歌曲的暫停使用掃描按鍵程序,每播放一個音符都會掃描一下暫停鍵,如果被按下則跳出play函數(shù)的循環(huán)。在曲目選擇時,根據(jù)不同的j值,使用數(shù)組選擇不同字符元素驅(qū)動LCD點陣,顯示所要播放的曲目。
在本實驗中,有三種情況下會發(fā)出聲音:(1)饑餓的情況下會發(fā)出報警的聲音;(2)生病的時候會發(fā)出報警的聲音;(3)高興的時候會唱歌,歌曲為祝你平安的純音樂。
4 結(jié)語
這個電子寵物的競賽設(shè)計通過點陣顯示設(shè)計出一個比較智能化和人性化的電子寵物游戲,于是構(gòu)架出這個游戲的大框架和模塊,但是從開始著手做系統(tǒng)設(shè)計到在電路設(shè)計中遇到了很多問題。windows的畫圖軟件設(shè)計好圖像,將畫布設(shè)定為128*64像素大小,只用黑色筆在畫布上作畫。每一張圖都是我們親筆在畫圖軟件上設(shè)計的,讓我們在緊張的編程時間之余體驗一下藝術(shù)帶來的快樂。對應(yīng)的I/O口線始終等電位。這個問題本身并不復雜,但通過這個小問題我們更體會到運用課本知識的過程中一定要結(jié)合實際情況。雖然在整個程序的編寫過程中,雖然內(nèi)容不斷地豐富,問題也不斷地出現(xiàn),但我們的思路還是非常清晰的,這一方面得益于最初開題時我們對整系統(tǒng)的結(jié)構(gòu),各個模塊的功能和實現(xiàn)方案的細致研究,這也讓我們認識到項目前期規(guī)劃的重要性。
通過這一次的單片機自主訓練,關(guān)于這門課程的學習我們最深的體會是:硬件功能模塊在使用時最好不要照搬例程,而是應(yīng)該理解硬件工作的原理,明白每一句軟件控制程序?qū)?yīng)的具體硬件操作, 這一點對于之后程序調(diào)試和故障排除都將大有裨益。同時,對于工科生來說掌握一定的硬件知識也是非常必要的。除了具體的課程學習體會,我們通過這八周來的訓練,自身自主學習的精神 得到了很大的激發(fā),自主學習能力也得到了很大的提高,也一次次地感受到了學習帶來我們的快樂和成就感。