趙志欣 趙震 羅登月 洪升
摘 要: 針對(duì)高校嵌入式課程的本科教學(xué),設(shè)計(jì)并開發(fā)一款基于ARM9的打地鼠游戲,并具體介紹此游戲的設(shè)計(jì)實(shí)現(xiàn)過程。通過整個(gè)過程讓讀者了解掌握基于ARM9嵌入式系統(tǒng)的一般游戲的設(shè)計(jì)流程及硬件環(huán)境。實(shí)驗(yàn)平臺(tái)以ARM9微處理器S3C2410A硬件平臺(tái)為控制核心,并擴(kuò)展LCD觸摸屏模塊,利用ADS開發(fā)工具對(duì)其開發(fā)并調(diào)試。通過設(shè)計(jì)實(shí)踐,提出一種創(chuàng)新型的教學(xué)方式,可以激發(fā)讀者學(xué)習(xí)的興趣,培養(yǎng)創(chuàng)新思維。
關(guān)鍵詞: ARM9; 打地鼠游戲; ADS開發(fā)工具; S3C2410A; LCD; 嵌入式教學(xué)
中圖分類號(hào): TN99?34; TP311 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2018)20?0122?05
Abstract: A whac?a?mole game based on the ARM9 is designed and developed for undergraduate teaching of embedded courses in colleges and universities. The design implementation process of the game is introduced detailly so that readers can learn and understand the design process and hardware environment of general games based on the ARM9 embedded system. In the experimental platform, the ARM9 microprocessor S3C2410A is taken as the control core of the hardware platform, and the LCD touch screen module is extended, which is developed and debugged by using the ADS development tool. An innovative teaching method is proposed by means of the design practice, which can stimulate readers′ learning interest and cultivate their innovative thinking.
Keywords: ARM9; whac?a?mole game; ADS development tool; S3C2410A; LCD; embedded teaching
隨著嵌入式系統(tǒng)在消費(fèi)電子領(lǐng)域的發(fā)展,消費(fèi)者對(duì)嵌入式系統(tǒng)的游戲娛樂功能也越來越關(guān)注。對(duì)于嵌入式系統(tǒng)而言,在硬件方面,ARM微處理器體系結(jié)構(gòu)被認(rèn)為是較成熟的32位嵌入式RISC微處理器結(jié)構(gòu)[1],市場(chǎng)占有率較高。ADS[2]是ARM公司的集成開發(fā)軟件;ADS的編譯器調(diào)試器較SDT都有了非常大的改觀,ADS 1.2提供完整的Windows界面開發(fā)環(huán)境。C編譯器效率極高,支持C以及C++[3],使工程師可以很方便地使用C語言進(jìn)行開發(fā);提供軟件模擬仿真功能,使沒有Emulators的學(xué)習(xí)者也能夠熟悉ARM的指令系統(tǒng)。配合FFT?ICE使用,ADS 1.2提供強(qiáng)大的實(shí)時(shí)調(diào)試跟蹤功能,片內(nèi)運(yùn)行情況盡在掌握。但ADS 1.2需要硬件支持才能發(fā)揮強(qiáng)大功能,目前支持的硬件調(diào)試器有Multi?ICE以及兼容Multi?ICE的調(diào)試工具,如FFT?ICE。
打地鼠游戲是一款實(shí)用性小游戲,娛樂性很強(qiáng),現(xiàn)在網(wǎng)絡(luò)上也出現(xiàn)了許多關(guān)于打地鼠游戲的設(shè)計(jì)[4?5]。本文在ARM9微處理器S3C2410A開發(fā)板和ADS開發(fā)工具下設(shè)計(jì)并實(shí)現(xiàn)了打地鼠游戲。
打地鼠游戲整體由開始說明部分、游戲主部分、游戲進(jìn)階部分組成。首先運(yùn)行進(jìn)入游戲的開始說明部分來介紹游戲的規(guī)則;接著進(jìn)入游戲的主要部分,在游戲的主要部分界面上隨機(jī)出現(xiàn)2只動(dòng)物(動(dòng)物的種類為老鼠、野兔或者青蛙),其中打中1次老鼠得1分,打中1次野兔得2分,打中1次青蛙減1分;游戲主界面循環(huán)出現(xiàn)15次動(dòng)物后進(jìn)入游戲的進(jìn)階部分界面來選擇是否提升難度,玩家可以自主選擇提升游戲難度、降低難度或者等待。整個(gè)游戲設(shè)計(jì)的流程圖如圖1所示。
圖1中:游戲開始動(dòng)畫中的游戲說明部分向用戶介紹游戲的玩法和注意事項(xiàng);游戲的核心部分是游戲功能實(shí)現(xiàn),程序的具體操作在此部分實(shí)現(xiàn);游戲進(jìn)階部分是給玩家選擇下一輪游戲的難度,同時(shí)還會(huì)有等待時(shí)間給玩家休息。
打地鼠游戲設(shè)計(jì)需要使用到控制芯片的內(nèi)部定時(shí)器[6];可以提供控制外部的LCD觸摸屏蜂鳴器的端口及驅(qū)動(dòng);并且需要極高的工作頻率等條件。S3C2410A處理器集成了常用的接口,提供了豐富的內(nèi)部設(shè)備,包含8通道10位ADC和觸摸屏接口以及內(nèi)部PLL倍頻器,其時(shí)鐘頻率可以通過內(nèi)部倍頻最高達(dá)到266 MHz。同時(shí)內(nèi)部擁有5個(gè)獨(dú)立的定時(shí)器并且提供1通道LCD專用DMA與觸摸屏所需要的兩路ADC通道,保障了系統(tǒng)的二次開發(fā)。因此使用S3C2410A處理器[7?8]滿足游戲設(shè)計(jì)的條件,同時(shí)還需要LCD及觸摸屏、串行接口及蜂鳴器。嵌入式設(shè)備處理速度快,而且采用高速閃存進(jìn)行存儲(chǔ),因此系統(tǒng)的整體處理速度得到保障。硬件結(jié)構(gòu)如圖2所示。
2.1 S3C2410最小系統(tǒng)設(shè)計(jì)
最小系統(tǒng)是保證一款芯片正常工作的最簡(jiǎn)外圍硬件電路,包括電源電路、晶振電路與復(fù)位電路。為了便于芯片程序下載,通常將FLASH擦寫電路也設(shè)計(jì)到最小系統(tǒng)之中,本設(shè)計(jì)中擦寫接口為JTAG電路[9]。
2.1.1 電源電路
S3C2410A最小系統(tǒng)工作電壓為3.3 V,由于LM117具有短路保護(hù)功能的擴(kuò)展及溫度可調(diào)節(jié)線性穩(wěn)壓器,因此最小系統(tǒng)由外接的USB接口的5 V電源通過LM117?3.3芯片轉(zhuǎn)化為3.3 V(見圖3)。電源電路中增加了濾波電容,使芯片工作更加穩(wěn)定。
2.1.2 復(fù)位電路
S3C2410A為低電平復(fù)位,因此電路連接如圖4所示,電源通過開關(guān)、下拉電阻接地組成復(fù)位電路,當(dāng)開關(guān)按下時(shí),輸入信號(hào)為低電平。
2.1.3 JTAG電路
JTAG(Joint Test Action Group)接口用于實(shí)現(xiàn)程序的下載與調(diào)試,包含4根控制數(shù)據(jù)線,分別為TMS(模式選擇),TCK(時(shí)鐘),TDO(數(shù)據(jù)輸出),TDI(數(shù)據(jù)輸入),4個(gè)引腳依次連接芯片如圖5所示。
2.2 S3C2410A與蜂鳴器接口電路
S3C2410A處理器通過控制PNP三極管的導(dǎo)通與關(guān)斷來使蜂鳴器發(fā)聲,通過導(dǎo)通關(guān)斷的時(shí)間不同來產(chǎn)生不同的音調(diào),用來指示不同的情況,例如得分鳴高音減分鳴低音等。其電路圖如圖6所示。
2.3 S3C2410與LCD觸摸屏接口電路
2.3.1 S3C2410與LCD液晶屏的連接
本節(jié)設(shè)計(jì)采用LCD觸摸屏來人機(jī)交互,選用的顯示模塊是夏普液晶模組LQ080V3DG01(TFT?LCD模塊)。LQ080V3DG01由彩色TFT?LCD面板、驅(qū)動(dòng)電路、控制電路、供電電路及背光單元組成。支持最大分辨率為640×480的圖形和文字顯示,數(shù)據(jù)輸入格式為18 bit,綠色、紅色及藍(lán)色均為6 bit,提供的顏色共有26萬多種。
其電路圖如圖7所示。
2.3.2 S3C2410與觸摸屏的連接
觸摸屏采用四線式電阻式屏,S3C2410A 的AIN[7]和AIN[5]用于連接觸摸屏的模擬信號(hào)輸入。觸摸屏接口電路一般由觸摸屏、4個(gè)外部晶體管和一個(gè)外部電壓源組成,如圖8所示。觸摸屏接口的控制和選擇信號(hào)(nYPON,YMON,nXPON和XMON) 連接切換X坐標(biāo)和Y坐標(biāo)轉(zhuǎn)換的外部晶體管。模擬輸入引腳(AIN[7],AIN[5])則連接到觸摸屏引腳。觸摸屏控制接口包括一個(gè)外部晶體管控制邏輯和具有中斷產(chǎn)生邏輯的ADC接口邏輯。
2.4 系統(tǒng)軟件設(shè)計(jì)
打地鼠游戲設(shè)計(jì)的軟件部分[10]主要由同時(shí)在不同地點(diǎn)出現(xiàn)多只動(dòng)物,出現(xiàn)不同種類的動(dòng)物,判斷是否擊打中及提升擊打難度等模塊組成。
2.5 程序主流程圖
打地鼠游戲設(shè)計(jì)的主程序工作流程如圖9所示。
步驟1:定義一些全局變量。數(shù)組a[2],b[2]隨機(jī)選擇動(dòng)物出現(xiàn)的位置;pic用于區(qū)分當(dāng)前所展示的不同界面,以及在觸摸中斷中判斷當(dāng)前的觸摸位置是什么功能;Num用于記錄動(dòng)物出現(xiàn)的次數(shù),滿15次一輪;c用于判斷此時(shí)應(yīng)該出現(xiàn)幾只動(dòng)物;d[2]用于判斷此時(shí)刻出現(xiàn)哪一只動(dòng)物。
步驟2:LCD及觸摸屏ADC等驅(qū)動(dòng)初始化。
步驟3:顯示開機(jī)界面,等待觸摸中斷使標(biāo)志位Flag置0,跳出While死循環(huán)。
步驟4:跳出While循環(huán)后配置定時(shí)器后進(jìn)入While死循環(huán),等待定時(shí)器及觸摸屏判斷Num來確定當(dāng)前狀態(tài)。
2.6 程序的定時(shí)器中斷流程圖
打地鼠游戲設(shè)計(jì)的定時(shí)器中斷的工作流程如圖10所示。
定時(shí)器的計(jì)數(shù)器減到零時(shí),觸發(fā)進(jìn)入定時(shí)器中斷。首先在定時(shí)器中斷中判斷Num的大小,當(dāng)出現(xiàn)動(dòng)物的次數(shù)等于15次時(shí)進(jìn)入界面3,判斷選擇是否提升難度或者繼續(xù)當(dāng)前難度(通過觸摸中斷來選擇);當(dāng)選擇完后在觸摸中斷中將Num置為17,然后跳轉(zhuǎn)到界面2的同時(shí)將Num置0,開始新的一輪記錄動(dòng)物次數(shù);c通過獲取2以內(nèi)的隨機(jī)數(shù)來選擇當(dāng)前要出現(xiàn)動(dòng)物的數(shù)量,a[],b[]通過獲取3以內(nèi)的隨機(jī)數(shù)來確定在哪個(gè)位置顯示,d[]通過或者3以內(nèi)的隨機(jī)數(shù)來選擇要顯示的動(dòng)物種類,接著用for循環(huán)來在確定的位置畫出d[]選擇的動(dòng)物。
總的來說,定時(shí)器的主要功能是通過獲取隨機(jī)數(shù)函數(shù)rand()來選擇動(dòng)物種類地方等;接著在觸摸中斷中通過判斷觸摸點(diǎn)的坐標(biāo)與d[],a[],b[]的大小比較來確定是否擊中,這部分是本游戲設(shè)計(jì)的核心。
2.7 程序的觸摸屏中斷流程圖
打地鼠游戲設(shè)計(jì)的觸摸屏中斷的工作流程如圖11所示。
當(dāng)游戲啟動(dòng)后停留在開始說明界面,首先判斷Pic的值,然后判斷操作者觸摸位置與開始界面的“開始新游戲”按鈕位置的坐標(biāo)是否匹配,如果匹配則清除標(biāo)志位Flag同時(shí)蜂鳴器鳴笛,接著配置定時(shí)器0進(jìn)入界面2(游戲主界面),同時(shí)Pic置為2。
進(jìn)入界面2(游戲主界面)后,定時(shí)器會(huì)根據(jù)設(shè)定的時(shí)間定時(shí)地刷新屏幕隨機(jī)出現(xiàn)動(dòng)物。操作者觸摸屏幕,將觸摸位置的坐標(biāo)與a[],b[],d[]相比較,如果d[]等于0則打中老鼠,則記錄分?jǐn)?shù)增加1分;如果d[]等于1,則打中野兔,記錄分?jǐn)?shù)增加2分;如果d[]等于2,則打中青蛙,記錄分?jǐn)?shù)減1分;蜂鳴器分別根據(jù)頻率不同發(fā)出不同的音量。擊中后將a[],b[]的值置4來防止一只動(dòng)物被點(diǎn)擊多次,記錄多次分?jǐn)?shù)。
當(dāng)動(dòng)物出現(xiàn)的次數(shù)達(dá)到15次即Num的值為16,Pic的值為3,進(jìn)入界面3(進(jìn)階界面)后,觸摸位置的坐標(biāo)與界面3上的“提升難度”按鈕和“再次挑戰(zhàn)”按鈕相比較來判斷是否減少定時(shí)器的每次計(jì)時(shí)時(shí)間;接著通過配置定時(shí)器的寄存器來改變計(jì)時(shí)時(shí)間,同時(shí)將Num置為17,等到下次進(jìn)入定時(shí)器后會(huì)將界面切換至界面2重新開始游戲;如果無觸摸則在界面3(進(jìn)階界面)長(zhǎng)時(shí)間等待。
游戲設(shè)計(jì)通過編譯器調(diào)試無誤之后,將其下載至S3C2410A處理器上,其部分效果圖如圖12~圖14所示。
圖12為開始游戲界面。通過觸摸屏為用戶提供了人機(jī)交互界面,介紹了游戲規(guī)則并且讓用戶選擇此時(shí)是否開始游戲或者退出游戲。
圖13為游戲中運(yùn)行界面。通過觸摸屏為用戶提供了人機(jī)交互界面,用戶通過擊打動(dòng)物所在的位置來完成游戲、獲取分?jǐn)?shù)。圖13a)是青蛙與兔子在一個(gè)界面上可以分別擊打;圖13b)與圖13d)是青蛙與地鼠同框且圖13d)是地鼠在時(shí)間周期到或者被擊打消退的過程;圖13c)是兩只地鼠同框;
圖14為游戲結(jié)束進(jìn)階界面。通過觸摸屏為用戶提供了人機(jī)交互界面,用戶選擇“提升難度”來增快動(dòng)物出現(xiàn)的頻率或者“再次挑戰(zhàn)”來降低游戲難度。
本文基于ARM9嵌入式微控制器進(jìn)行游戲設(shè)計(jì),能夠在游戲運(yùn)行過程中進(jìn)行游戲難度修改,并且能夠通過多組隨機(jī)函數(shù)產(chǎn)生多個(gè)擊中后有不同效果的目標(biāo)。由此增加游戲樂趣同時(shí)增加了游戲難度的可選擇。以后的設(shè)計(jì)中可以在美化界面、多人機(jī)對(duì)戰(zhàn)、分?jǐn)?shù)排行榜等方面加以改善。本游戲可以為開發(fā)者提供指引,使開發(fā)者能夠系統(tǒng)地制作,在程序設(shè)計(jì)過程當(dāng)中熟練程度不斷得到提升,具有借鑒與教學(xué)參考意義。
參考文獻(xiàn)
[1] 徐英慧,馬忠梅,王磊,等.ARM9嵌入式系統(tǒng)設(shè)計(jì):基于S3C2410與Linux[M].北京:北京航空航天大學(xué)出版社,2007.
XU Yinghui, MA Zhongmei, WANG Lei, et al. ARM9 embedded system design based on S3C2410 and Linux [M]. Beijing: Beihang University Press, 2007.
[2] 李哲英,駱麗,劉元盛.ARM核嵌入式系統(tǒng)的開發(fā)平臺(tái)ADS[J].半導(dǎo)體技術(shù),2002,27(2):13?16.
LI Zheying, LUO Li, LIU Yuansheng. The development platform ADS based on ARM core embedded system [J]. Semiconductor technology, 2002, 27(2): 13?16.
[3] BARR M. C/C++嵌入式系統(tǒng)編程[M].北京:中國(guó)電力出版社,2001.
BARR M. C/C++ programming for embedded systems [M]. Beijing: China Electric Power Press, 2001.
[4] 李倩.基于PLD的打地鼠游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)現(xiàn)代教育裝備,2015(7):121?123.
LI Qian. Design and implementation of whac?a?mole game based on PLD [J]. China modern educational equipment, 2015(7): 121?123.
[5] 毋玉芝,段向東.基于Authorware的打地鼠游戲設(shè)計(jì)[J].科技信息,2008(4):79.
WU Yuzhi, DUAN Xiangdong. Design of whac?a?mole game based on Authorware [J]. Science & technology information, 2008(4): 79.
[6] 吳明暉.基于ARM的嵌入式系統(tǒng)開發(fā)與應(yīng)用[M].北京:人民郵電出版社,2004.
WU Minghui. Development and application of embedded systems based on ARM [M]. Beijing: Posts & Telecom Press, 2004.
[7] 馬義德,湯書森,張北斗,等.嵌入式系統(tǒng)課程群建設(shè)與創(chuàng)新型人才培養(yǎng)[J].高等理科教育,2008(2):23?25.
MA Yide, TANG Shusen, ZHANG Beidou, et al. Embedded system course group construction and innovative talent cultivation [J]. Higher education of sciences, 2008(2): 23?25.
[8] 俸皓.嵌入式系統(tǒng)教學(xué)體系改革的討論[J].科技信息,2007(30):157.
FENG Hao. Discussion on teaching system reform of embedded system [J]. Science & technology information, 2007(30): 157.
(上接第126頁(yè))
[9] 楊雪,羅賢全,馬俊濤.基于嵌入式Linux的測(cè)試系統(tǒng)軟件實(shí)現(xiàn)研究[J].現(xiàn)代電子技術(shù),2008,31(6):117?119.
YANG Xue, LUO Xianquan, MA Juntao. Research on realization of test system software based on embedded Linux [J]. Modern electronics technique, 2008, 31(6): 117?119.
[10] 張舸,林世勇.基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2009,32(6):86?90.
ZHANG Ge, LIN Shiyong. Gobang design based on embedded system [J]. Modern electronics technique, 2009, 32(6): 86?90.
[11] 熊光澤,古幼鵬,桑楠.嵌入式應(yīng)用軟件設(shè)計(jì)方法學(xué)研究綜述[J].計(jì)算機(jī)應(yīng)用,2004,24(4):1?4.
XIONG Guangze, GU Youpeng, SANG Nan. Overviews on design methodologies for embedded software [J]. Journal of computer applications, 2004, 24(4): 1?4.