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