點(diǎn)陣屏游戲機(jī)設(shè)計(jì)_第1頁(yè)
點(diǎn)陣屏游戲機(jī)設(shè)計(jì)_第2頁(yè)
點(diǎn)陣屏游戲機(jī)設(shè)計(jì)_第3頁(yè)
點(diǎn)陣屏游戲機(jī)設(shè)計(jì)_第4頁(yè)
點(diǎn)陣屏游戲機(jī)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

[22]。此外,國(guó)外研究人員也關(guān)注點(diǎn)陣屏游戲機(jī)的交互方式和用戶體驗(yàn)。他們研究并應(yīng)用新的控制方法,如觸摸屏、運(yùn)動(dòng)傳感器和語音識(shí)別等,以提供更直觀、更便捷的游戲操作體驗(yàn)。同時(shí),他們還注重游戲機(jī)界面的設(shè)計(jì)和美學(xué),以提升用戶的視覺享受。國(guó)外研究人員在點(diǎn)陣屏游戲機(jī)設(shè)計(jì)領(lǐng)域取得了顯著的進(jìn)展,同時(shí)也面臨一些挑戰(zhàn)。例如,如何平衡游戲性能和功耗,如何實(shí)現(xiàn)更高的圖形渲染質(zhì)量,以及如何應(yīng)對(duì)不同地區(qū)和文化對(duì)游戲需求的差異等。這些問題需要進(jìn)一步的研究和探索。綜上所述,國(guó)內(nèi)外都對(duì)點(diǎn)陣屏游戲機(jī)設(shè)計(jì)進(jìn)行了廣泛的研究。研究人員關(guān)注硬件技術(shù)、軟件開發(fā)和用戶體驗(yàn)等方面,努力提供更豐富、創(chuàng)新和具有吸引力的游戲機(jī)產(chǎn)品。隨著技術(shù)的不斷進(jìn)步和用戶需求的變化,點(diǎn)陣屏游戲機(jī)設(shè)計(jì)領(lǐng)域?qū)⒗^續(xù)取得新的突破和發(fā)展。1.3主要研究?jī)?nèi)容本課題研究的內(nèi)容為點(diǎn)陣屏游戲機(jī)設(shè)計(jì)。這套系統(tǒng)由按鍵、單片機(jī)STC15W408AS、8*8點(diǎn)陣屏和開關(guān)等組成。主控芯片采用STC15W408AS單片機(jī),用于控制8*8點(diǎn)陣顯示游戲的工作狀態(tài)。通過按鍵操作,可以控制游戲的移動(dòng)。貪吃蛇游戲中如果蛇頭撞到墻壁或者咬到蛇身,則游戲會(huì)自動(dòng)結(jié)束。當(dāng)達(dá)到一定數(shù)量時(shí),游戲會(huì)進(jìn)入下一關(guān)卡,每過一關(guān)卡,游戲速度和難度都會(huì)增加,也可通過語音模塊進(jìn)行游戲的開始,結(jié)構(gòu)框圖如圖所示:圖1.1系統(tǒng)結(jié)構(gòu)框圖第2章系統(tǒng)的總體結(jié)構(gòu)2.1設(shè)計(jì)方案本設(shè)計(jì)方案旨在介紹一套點(diǎn)陣屏游戲機(jī)的設(shè)計(jì)。該游戲機(jī)由按鍵、單片機(jī)STC15W408AS、8*8點(diǎn)陣屏和開關(guān)等組成,通過控制貪吃蛇的移動(dòng),玩家可以享受到經(jīng)典游戲的樂趣。游戲具備多關(guān)卡功能,速度和難度逐級(jí)增加,同時(shí)還加入了語音模塊,提供游戲開始的語音提示。系統(tǒng)組成:該游戲機(jī)由以下幾個(gè)主要組件組成:按鍵:用于玩家控制貪吃蛇的移動(dòng),包括向上、向下、向左和向右的操作。單片機(jī)STC15W408AS:作為主控芯片,負(fù)責(zé)控制整個(gè)系統(tǒng)的工作狀態(tài)。8*8點(diǎn)陣屏:用于顯示貪吃蛇游戲的圖像和界面。開關(guān):用于開啟和關(guān)閉游戲機(jī)的電源。語音模塊:本游戲機(jī)還配備了語音模塊,通過語音提示玩家游戲的開始。當(dāng)玩家開啟游戲機(jī)時(shí),語音模塊會(huì)發(fā)出歡迎詞,并指導(dǎo)玩家按鍵開始游戲。數(shù)碼管模塊:用于顯示記錄游戲分?jǐn)?shù)。游戲規(guī)則游戲移動(dòng)控制:玩家通過按鍵操作控制游戲的移動(dòng)方向,包括向上、向下、向左和向右或通過語音控制。游戲結(jié)束條件:如果貪吃蛇的蛇頭撞到墻壁或者咬到自己的蛇身,則游戲自動(dòng)結(jié)束。多關(guān)卡功能:當(dāng)貪吃蛇吃到一定數(shù)量的食物時(shí),游戲進(jìn)入下一關(guān)卡。每過一關(guān)卡,游戲速度和難度都會(huì)增加,提供更具挑戰(zhàn)性的游戲體驗(yàn)。1.理論知識(shí)準(zhǔn)備階段,了解并掌握有關(guān)課題的理論知識(shí);2.確定系統(tǒng)各個(gè)模塊,收集相關(guān)軟硬件資料,并理清各個(gè)模塊之間的關(guān)系;3.規(guī)劃課題,確定系統(tǒng)組成結(jié)構(gòu),勾畫出大體系統(tǒng)框架并提出原理框圖;4.利用軟件完成硬件電路部分設(shè)計(jì)并畫出各部分電路圖,將系統(tǒng)部件通過接口電路集合在一起;5.根據(jù)系統(tǒng)控制過程完成軟件設(shè)計(jì)部分,繪制出主流程圖;6.進(jìn)行模擬仿真,檢查系統(tǒng)是否能夠按照要求實(shí)現(xiàn)控制功能,并整理論文。2.2技術(shù)路線(1)硬件部分需要單片機(jī)單片機(jī)STC15w408AS、按鍵、8*8點(diǎn)陣屏、開關(guān)、HDR-F-2.54語音模塊。(2)軟件平臺(tái)程序用keil5;(3)畫原理圖用AD;(4)編程語言用C語言;2.3主要器件選擇2.3.1單片機(jī)型號(hào)選擇方案一:STC15W408AS是一款高性能、低功耗的8位單片機(jī),由STC公司生產(chǎn)。該單片機(jī)采用了高速Flash存儲(chǔ)器,可以實(shí)現(xiàn)快速啟動(dòng)和速度優(yōu)化,同時(shí)還具備低功耗、高可靠性、高抗干擾性等特點(diǎn),非常適合于嵌入式系統(tǒng)和智能控制領(lǐng)域的應(yīng)用。該單片機(jī)主頻達(dá)33MHz,F(xiàn)lash存儲(chǔ)器8KB,RAM存儲(chǔ)器512字節(jié),支持UART、SPI、I2C、定時(shí)器和PWM等多種外設(shè)接口,可實(shí)現(xiàn)數(shù)據(jù)傳輸、定時(shí)控制和PWM輸出等功能。STC15W408AS還具備較強(qiáng)的抗干擾性能,能夠有效地抵御電磁干擾和靜電干擾,保證了系統(tǒng)的穩(wěn)定性和可靠性。同時(shí),該單片機(jī)還支持多種編程方式,包括ISP編程、ICP編程、仿真編程等,方便了單片機(jī)的開發(fā)和調(diào)試。總之,STC15W408AS是一款非常優(yōu)秀的8位單片機(jī),具有高性能、低功耗、高可靠性、高抗干擾性等特點(diǎn),廣泛應(yīng)用于智能控制、醫(yī)療設(shè)備、安防系統(tǒng)、家電控制等領(lǐng)域。方案二:采用89C51單片機(jī),89C51是一種帶有4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM-FlashProgrammableandErasableReadOnlyMemory)的一種高性能、低電壓CMOS8位微處理器。單片機(jī)的可擦除式只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用了ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的89C51是一種高效微控制器。綜上所述STC15W408AS單片機(jī)更適合用于對(duì)本設(shè)計(jì)游戲的運(yùn)行狀態(tài)進(jìn)行控制,保證游戲的運(yùn)行穩(wěn)定性,還有更加豐富的接口和強(qiáng)大的處理能力。2.3.2屏幕型號(hào)選擇方案一:LED8*8點(diǎn)陣屏。LED8*8點(diǎn)陣屏是一種常見的電子顯示屏幕,由64個(gè)LED燈組成,可以顯示數(shù)字、字母、符號(hào)等簡(jiǎn)單圖形。它廣泛應(yīng)用于電子表格、計(jì)時(shí)器、溫度計(jì)、計(jì)數(shù)器等電子設(shè)備中。LED8*8點(diǎn)陣屏的特點(diǎn)是體積小、重量輕、耗電低、壽命長(zhǎng)、可靠性高、視覺效果好。它可以采用常用的掃描方式,如逐行掃描、逐列掃描等,通過改變每個(gè)LED燈的亮滅狀態(tài),實(shí)現(xiàn)不同的顯示效果。LED8*8點(diǎn)陣屏的驅(qū)動(dòng)方式可以使用常見的數(shù)字IC驅(qū)動(dòng),如MAX7219、TM1638等,也可以使用單片機(jī)控制,如51單片機(jī)、Arduino等。在控制方面,可以采用基于C語言、Python等編程語言的軟件控制,也可以采用基于開源硬件平臺(tái)的控制方式,如RaspberryPi等。LED點(diǎn)陣\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"顯示系統(tǒng)中各模塊的\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"顯示方式有靜態(tài)和動(dòng)態(tài)顯示兩種。靜態(tài)原理簡(jiǎn)單、控制方便,但硬件接線復(fù)雜,在實(shí)際應(yīng)用中一般采用顯示方式,動(dòng)態(tài)顯示采用掃描的方式工作,由峰值較大的窄脈沖驅(qū)動(dòng),從上到下逐次不斷地對(duì)顯示屏的各行進(jìn)行選通,同時(shí)又向各列送出表示圖形或文字信息的信號(hào),反復(fù)循環(huán)以上操作,就可顯示各種圖形或文字信息。方案二:OLED顯示屏。OLED,有機(jī)發(fā)光二極管,采用十分薄的有機(jī)材料圖層。當(dāng)有電流通過時(shí),這些有機(jī)材料就會(huì)發(fā)光,所以具有自發(fā)光性。同時(shí)也有更好的分辨率。綜上所述8*8點(diǎn)陣屏具有像素點(diǎn)陣排列的特點(diǎn),可以清晰地顯示游戲中的圖像和界面??紤]到貪吃蛇游戲的簡(jiǎn)單性,我們可以選擇8*8點(diǎn)陣屏,同時(shí)也具備足夠的分辨率來顯示游戲中各種元素的變化,也更容易進(jìn)行編程。

第3章系統(tǒng)的硬件部分設(shè)計(jì)3.1系統(tǒng)總體設(shè)計(jì)本課題研究的內(nèi)容為點(diǎn)陣屏游戲機(jī)設(shè)計(jì)。該套系統(tǒng)主要由按鍵、單片機(jī)STC15w408AS、8*8點(diǎn)陣屏、開關(guān)等部分組成;采用STC15w408AS單片機(jī)作為主控芯片8*8點(diǎn)陣顯示貪吃蛇工作狀態(tài),通過按鍵可以控制貪吃蛇的移動(dòng)如果蛇頭撞墻和咬到蛇身就會(huì)自動(dòng)結(jié)束游戲如果達(dá)到一定數(shù)量進(jìn)入下一個(gè)每過一關(guān)速度難度都會(huì)增加,采用SLR0283CRC1BD-3.5數(shù)碼管顯示模塊顯示游戲分?jǐn)?shù),也可用HDR-F-2.54語音模塊來進(jìn)行對(duì)游戲的控制。實(shí)現(xiàn)的功能如下:1.游戲機(jī)內(nèi)置4個(gè)游戲:俄羅斯方塊、貪吃蛇、賽車、打飛機(jī);2.游戲機(jī)選用點(diǎn)陣屏設(shè)計(jì),可調(diào)節(jié)屏幕亮度;3.游戲機(jī)可開啟或關(guān)閉游戲聲音;4.通過按鍵進(jìn)行游戲選擇;5.俄羅斯方塊操作說明:通過四個(gè)按鍵完成方塊左右移動(dòng)及方塊加速掉落和旋轉(zhuǎn)。6.貪吃蛇操作說明:通過四個(gè)按鍵改變貪吃蛇移動(dòng)方向。7.賽車操作說明:通過兩個(gè)按鍵控制游戲內(nèi)賽車左右移動(dòng)8.打飛機(jī)操作說明:通過兩個(gè)按鍵控制游戲內(nèi)飛機(jī)左右移動(dòng),一個(gè)按鍵為確定鍵,用來控制發(fā)射子彈。9.聲音控制游戲進(jìn)行。圖3.1系統(tǒng)總體原理圖3.2系統(tǒng)的主要功能模塊設(shè)計(jì)3.2.1單片機(jī)模塊設(shè)計(jì)圖3.2單片機(jī)原理圖圖3.3單片機(jī)最小系統(tǒng)原理圖單片機(jī)的時(shí)鐘電路包括外部晶振和與之相關(guān)的電路元件。外部晶振是為了提供穩(wěn)定的時(shí)鐘信號(hào),使單片機(jī)能夠按照一定的時(shí)間步進(jìn)運(yùn)行。時(shí)鐘電路主要由以下幾個(gè)部分組成:晶體振蕩電路:晶體振蕩電路是用來驅(qū)動(dòng)晶振的電路,它包括晶振引腳和相關(guān)的電容。晶振引腳通過晶振電路連接到晶振上,以便通過晶振產(chǎn)生穩(wěn)定的振蕩信號(hào)。外部電容:為了保證晶振電路的正常工作,需要在晶振的兩個(gè)引腳之間連接一個(gè)適當(dāng)?shù)碾娙?。這個(gè)電容通常稱為負(fù)載電容,它的容值一般在10pF到30pF之間,具體取值根據(jù)晶振的要求而定。單片機(jī)的復(fù)位電路是單片機(jī)系統(tǒng)中的一個(gè)重要組成部分,它用于在特定條件下將單片機(jī)恢復(fù)到初始狀態(tài)。以下是對(duì)復(fù)位電路的介紹:復(fù)位信號(hào)源:復(fù)位信號(hào)可以來自于多個(gè)源頭,包括外部復(fù)位按鍵、電源上電和其他特殊的復(fù)位源。外部復(fù)位按鍵是最常見的復(fù)位信號(hào)源,當(dāng)按下復(fù)位按鍵時(shí),會(huì)產(chǎn)生一個(gè)低電平的復(fù)位信號(hào)。電源上電時(shí)也會(huì)產(chǎn)生一個(gè)短暫的復(fù)位信號(hào),以確保系統(tǒng)在上電時(shí)處于初始狀態(tài)。復(fù)位電路:?jiǎn)纹瑱C(jī)的復(fù)位電路通常由幾個(gè)主要元件組成,包括復(fù)位按鍵、電容和電阻。復(fù)位按鍵用于手動(dòng)觸發(fā)復(fù)位信號(hào),當(dāng)按下按鍵時(shí),復(fù)位信號(hào)被拉低。為了防止復(fù)位信號(hào)的抖動(dòng),一般會(huì)使用電容和電阻組成的RC濾波電路。該電路可以平滑復(fù)位信號(hào),防止由于按鍵抖動(dòng)而產(chǎn)生誤觸發(fā)。復(fù)位控制器:在單片機(jī)內(nèi)部,有一個(gè)復(fù)位控制器用于接收外部復(fù)位信號(hào)并對(duì)單片機(jī)進(jìn)行復(fù)位操作。復(fù)位控制器負(fù)責(zé)將單片機(jī)的內(nèi)部寄存器和各個(gè)模塊恢復(fù)到初始狀態(tài)。它會(huì)監(jiān)測(cè)復(fù)位信號(hào)的狀態(tài),并在接收到復(fù)位信號(hào)時(shí)將單片機(jī)的執(zhí)行邏輯置為初始狀態(tài)。合理的復(fù)位電路設(shè)計(jì)能夠確保系統(tǒng)在特定條件下能夠可靠地進(jìn)行復(fù)位,并在復(fù)位后恢復(fù)到正確的工作狀態(tài)。在設(shè)計(jì)復(fù)位電路時(shí),需要考慮電源穩(wěn)定性、復(fù)位信號(hào)的抖動(dòng)、復(fù)位向量等因素,以保證單片機(jī)系統(tǒng)的正常運(yùn)行。3.2.2蜂鳴器模塊設(shè)計(jì)圖3.4蜂鳴器模塊設(shè)計(jì)蜂鳴器是一種常見的電子發(fā)聲器件,廣泛應(yīng)用于各種電子設(shè)備中,如計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、玩具、汽車電子設(shè)備、電話機(jī)、時(shí)器等。它通常采用壓供電,由內(nèi)部的振蕩電路驅(qū)動(dòng)發(fā)出蜂鳴聲。根據(jù)類型不同,蜂鳴器主要分為內(nèi)置振蕩器和外接振蕩器兩種。在電路中,通常用字母“H”或“HA”(也有其他標(biāo)準(zhǔn))來表示蜂鳴器。通常,蜂鳴器都有一個(gè)或多個(gè)按鍵來控制其發(fā)聲。對(duì)于內(nèi)置振蕩器的蜂鳴器,只需要通上電源即可發(fā)聲,但對(duì)于需要外接振蕩器的蜂鳴器,電阻一般為32歐姆左右,因此不能直接使用。下面為蜂鳴器模塊硬件電路設(shè)計(jì):1.蜂鳴器連接:將蜂鳴器的正極連接到電源的正極(通常是Vcc),將蜂鳴器的負(fù)極連接到電路的引腳。2.驅(qū)動(dòng)電路:為了驅(qū)動(dòng)蜂鳴器,通常需要使用一個(gè)驅(qū)動(dòng)電路,可以使用以下兩種方式之一:a.使用可控電流源驅(qū)動(dòng):將一個(gè)PNP型晶體管的集電極連接到電源的正極。將蜂鳴器的負(fù)極連接到PNP晶體管的發(fā)射極。將PNP晶體管的基極通過一個(gè)適當(dāng)?shù)碾娮柽B接到微控制器或其他信號(hào)源。確保信號(hào)源輸出高電平時(shí),PNP晶體管飽和,電流通過蜂鳴器,產(chǎn)生聲音。b.使用驅(qū)動(dòng)芯片:使用專門設(shè)計(jì)的驅(qū)動(dòng)芯片。將蜂鳴器的負(fù)極連接到驅(qū)動(dòng)芯片的輸出引腳。連接適當(dāng)?shù)碾娙莺碗娮枰栽O(shè)置驅(qū)動(dòng)芯片的頻率和占空比。3.控制信號(hào):如果使用微控制器或其他控制器來控制蜂鳴器模塊,將控制器的輸出引腳連接到驅(qū)動(dòng)電路的輸入引腳。如果只需要簡(jiǎn)單的開關(guān)控制,可以將控制信號(hào)直接連接到驅(qū)動(dòng)電路的輸入引腳。3.2.3USB供電模塊設(shè)計(jì)圖3.5USB供電模塊設(shè)計(jì)USB是一個(gè)外部總線標(biāo)準(zhǔn),用于連接和通訊電腦與設(shè)備。USB采用四線電纜,其中兩根用于傳送數(shù)據(jù)的串行通道,另兩根為下游設(shè)備提供電源。USB總線可以自動(dòng)地在所兼容的傳輸模式中根據(jù)外設(shè)情況動(dòng)態(tài)轉(zhuǎn)換傳輸速率,是基于令牌的總線,類似于網(wǎng)絡(luò)或FDDI基于令牌的總線。USB主控制器廣播令牌,總線上設(shè)備通過接收或發(fā)送數(shù)據(jù)給主機(jī)來響應(yīng)。USB還通過支持懸掛/恢復(fù)操作來管理USB總線電源。3.2.4LED8*8點(diǎn)陣屏模塊設(shè)計(jì)以下是LED8*8點(diǎn)陣屏模塊的基本硬件電路設(shè)計(jì):驅(qū)動(dòng)電路:LED點(diǎn)陣屏通常使用行列掃描的方法進(jìn)行驅(qū)動(dòng)。行掃描驅(qū)動(dòng):將點(diǎn)陣屏的行引腳連接到微控制器或其他行掃描驅(qū)動(dòng)芯片的輸出引腳,將行掃描驅(qū)動(dòng)芯片的控制引腳連接到微控制器或其他時(shí)序控制信號(hào)源的引腳。通過控制行掃描驅(qū)動(dòng)芯片的控制引腳,可以逐行選擇要點(diǎn)亮的LED。列掃描驅(qū)動(dòng):將點(diǎn)陣屏的列引腳連接到LED驅(qū)動(dòng)芯片的輸出引腳,將LED驅(qū)動(dòng)芯片的控制引腳連接到微控制器或其他時(shí)序控制信號(hào)源的引腳。通過控制LED驅(qū)動(dòng)芯片的控制引腳,可以逐列選擇要點(diǎn)亮的LED。驅(qū)動(dòng)芯片:為了簡(jiǎn)化驅(qū)動(dòng)過程,可以采用專門設(shè)計(jì)的驅(qū)動(dòng)芯片,來實(shí)現(xiàn)行列掃描驅(qū)動(dòng)和控制LED點(diǎn)亮的功能??刂菩盘?hào):如果需要使用微控制器或其他控制器來控制點(diǎn)陣屏模塊,應(yīng)將控制器的輸出引腳連接到驅(qū)動(dòng)電路的輸入引腳??刂菩盘?hào)可以用于選擇要點(diǎn)亮的行和列。這樣設(shè)計(jì)的硬件電路能夠有效地驅(qū)動(dòng)LED點(diǎn)陣屏,使其按照所選擇的行和列點(diǎn)亮相應(yīng)的LED,從而形成圖案或文字顯示。圖3.6LED8*8點(diǎn)陣屏模塊原理圖設(shè)計(jì)3.2.5HDR-F-2.54語音模塊設(shè)計(jì)HDR-F-2.54語音模塊是一種基于HDR技術(shù)的音頻模塊,可用于無線語音傳輸應(yīng)用。它采用2.54mm間距接口,可以方便地與其他電子元件連接。該模塊采用高速數(shù)據(jù)傳輸技術(shù),可在傳輸電話語音的基礎(chǔ)上,實(shí)現(xiàn)高速數(shù)據(jù)通信。HDR-F-2.54語音模塊可以實(shí)現(xiàn)傳輸率高達(dá)2.4Mbps,成本低、功能強(qiáng),適用于多種固定和移動(dòng)通信設(shè)備,如移動(dòng)電話、手持計(jì)算機(jī)和筆記本電腦無線調(diào)制解調(diào)器等。該模塊支持互聯(lián)網(wǎng)通信協(xié)議,可以實(shí)現(xiàn)高速數(shù)據(jù)傳輸和語音通信,為無線語音傳輸應(yīng)用提供了高效可靠的解決方案。HDR(高速數(shù)據(jù)傳輸技術(shù))是一種針對(duì)CDMA網(wǎng)絡(luò)開發(fā)的高速無線接入技術(shù),它可以滿足高速數(shù)據(jù)通信需求,不僅局限于傳輸電話語音。該技術(shù)是在第三代(3G)移動(dòng)電話IMT-2000的無線存取方式采用CDMA后,為滿足高速數(shù)據(jù)通信需求而推出的。在引入該技術(shù)的過程中,cdma2000陣營(yíng)提出了多個(gè)方案,其中HDR是由美國(guó)高通公司提出的一種方案。HDR技術(shù)成本低、功能強(qiáng),適用于多種固定和移動(dòng)通信設(shè)備,如移動(dòng)電話、手持計(jì)算機(jī)和筆記本電腦無線調(diào)制解調(diào)器等,并支持互聯(lián)網(wǎng)通信協(xié)議。預(yù)計(jì)該技術(shù)將于2002年投入商用,可以實(shí)現(xiàn)高達(dá)2.4Mbps的傳輸速率。圖3.7語音模塊設(shè)計(jì)HDR-F-2.54語音模塊的硬件電路設(shè)計(jì)如下:首先,進(jìn)行電源連接。將語音模塊的電源引腳(通常是Vcc和GND)連接到電源的正極和負(fù)極,以確保模塊能夠正常供電。接下來,考慮音頻輸入。將音頻輸入信號(hào)源(如麥克風(fēng)或音頻接口)連接到語音模塊的音頻輸入引腳,以實(shí)現(xiàn)音頻信號(hào)的輸入。然后,進(jìn)行揚(yáng)聲器連接。將揚(yáng)聲器的正極連接到語音模塊的揚(yáng)聲器引腳,將揚(yáng)聲器的負(fù)極連接到電源的負(fù)極或語音模塊的GND引腳,以便使揚(yáng)聲器能夠發(fā)出音頻輸出。如果需要使用控制信號(hào)來操縱語音模塊的功能,我們可以將控制信號(hào)源(如微控制器或按鍵)的輸出引腳連接到語音模塊的控制引腳。這些控制引腳可能包括播放、停止、音量調(diào)節(jié)等功能,通過控制信號(hào),我們可以實(shí)現(xiàn)對(duì)語音模塊的靈活操作。最后,根據(jù)語音模塊的規(guī)格和需求,可能需要添加一些附加組件,例如電容、電阻、濾波器等,以進(jìn)一步提高音頻質(zhì)量、過濾噪音等。3.2.6按鍵模塊設(shè)計(jì)按鈕是一種常用的控制電器元件,常用來接通或斷開‘控制電路’其中電流很?。瑥亩_(dá)到控制電動(dòng)機(jī)或其他電氣設(shè)備運(yùn)行目的的一種開關(guān)。按鈕是一種\t"/item/%E6%8C%89%E9%92%AE/_blank"人工控制的\t"/item/%E6%8C%89%E9%92%AE/_blank"主令電器。主要用來發(fā)布操作命令,接通或開斷控制電路,控制機(jī)械與電氣設(shè)備的運(yùn)行。圖3.8按鍵模塊原理3.2.7數(shù)碼管模塊設(shè)計(jì)在設(shè)計(jì)SLR0283CRC1BD-3.5數(shù)碼管顯示模塊的硬件電路時(shí),需要按照以下步驟進(jìn)行:首先,通過查閱該模塊的規(guī)格和數(shù)據(jù)手冊(cè),確定其電源需求。通常情況下,該數(shù)碼管顯示模塊需要直流電源供電,因此需要確認(rèn)所需的電壓和電流。其次,根據(jù)規(guī)格和數(shù)據(jù)手冊(cè),確定需要哪些控制信號(hào),例如時(shí)鐘信號(hào)、數(shù)據(jù)信號(hào)和使能信號(hào)等。為了生成這些信號(hào),可以使用適當(dāng)?shù)慕涌陔娐?,例如邏輯門、觸發(fā)器或移位寄存器,并將它們連接到數(shù)碼管顯示模塊的相應(yīng)引腳上。接下來,連接數(shù)碼管。SLR0283CRC1BD-3.5數(shù)碼管顯示模塊通常包含多個(gè)數(shù)碼管,每個(gè)數(shù)碼管都有多個(gè)段(如A、B、C、D、E、F、G)和一個(gè)共陽(yáng)(CA)或共陰(CC)引腳。為了連接數(shù)碼管的各個(gè)段和共陽(yáng)/共陰引腳,可以使用適當(dāng)?shù)碾娏飨拗齐娮瑁ㄈ绻枰┖瓦壿嬮T(例如解碼器或驅(qū)動(dòng)器)。針對(duì)設(shè)計(jì)需求中的外部輸入接口,例如按鈕或開關(guān),需要確定是否需要將其集成到電路中。在連接外部輸入接口時(shí),需要使用適當(dāng)?shù)碾娮琛⑷ザ秳?dòng)電路和輸入保護(hù)電路,將其與控制電路連接起來。為了保護(hù)數(shù)碼管顯示模塊和其他電路免受意外損壞,考慮添加適當(dāng)?shù)谋Wo(hù)電路,例如過流保護(hù)、過壓保護(hù)和反向極性保護(hù)。此外,確保在設(shè)計(jì)中考慮電路的穩(wěn)定性和抗干擾能力,例如添加適當(dāng)?shù)臑V波電容、終端電阻和地線布線。在完成電路連接后,進(jìn)行布線設(shè)計(jì),并確保布線符合電路設(shè)計(jì)的要求,最小化干擾和串?dāng)_的發(fā)生。如果需要,可以設(shè)計(jì)電路板(PCB)以容納所有電子元件,并確保適當(dāng)?shù)某叽纭哟谓Y(jié)構(gòu)和功耗分布。圖3.9數(shù)碼管模塊原理第4章系統(tǒng)的軟件設(shè)計(jì)4.1軟件的主要流程通過USB電源進(jìn)行供電,首先進(jìn)行的是的系統(tǒng)單片機(jī)初始化,初始化不成功時(shí),繼續(xù)進(jìn)行初始化直至成功,初始化成功后,我們可以用語音模塊開始進(jìn)行游戲,通過按鍵給單片機(jī)指令,可以控制貪吃蛇或其他游戲的移動(dòng)的方向,同時(shí)我們可以在點(diǎn)陣屏上看到我們的游戲內(nèi)容,當(dāng)我們游戲通過或者未通過時(shí)我們的蜂鳴器會(huì)進(jìn)行響應(yīng)。圖4.1主程序流程圖4.2LED8*8點(diǎn)陣屏模塊的軟件設(shè)計(jì)通過USB電源進(jìn)行供電,初始化不成功時(shí),繼續(xù)進(jìn)行初始化直至成功,初始化成功后,我們可以開始進(jìn)行游戲,通過按鍵給單片機(jī)指令,可以控制貪吃蛇的方向,同時(shí)我們可以在點(diǎn)陣屏上看到我們的游戲內(nèi)容。圖4.2LED8*8點(diǎn)陣屏軟件設(shè)計(jì)4.3HDR-F-2.54語音模塊的軟件設(shè)計(jì)我們可以用語音模塊來語音命令開始進(jìn)行游戲。DR-F-2.54語音模塊的軟件設(shè)計(jì)涉及以下幾個(gè)方面:引腳配置:首先,需要確定語音模塊所連接的引腳,并在軟件中進(jìn)行引腳配置。根據(jù)模塊規(guī)格和數(shù)據(jù)手冊(cè),選擇合適的GPIO引腳,并設(shè)置其輸入/輸出模式和初始狀態(tài)。音頻輸入處理:如果語音模塊支持外部音頻輸入,需要編寫相應(yīng)的音頻輸入處理代碼。這可能涉及配置模塊的音頻輸入接口,設(shè)置采樣率、位深度等參數(shù),并編寫音頻緩沖區(qū)的管理和處理邏輯。控制指令交互:通過控制指令與語音模塊進(jìn)行交互是常見的軟件設(shè)計(jì)要求。根據(jù)模塊的指令集和通信接口(如串口、I2C等),編寫相應(yīng)的代碼以實(shí)現(xiàn)與模塊的通信。這可能包括發(fā)送命令、接收響應(yīng)、解析數(shù)據(jù)等操作。音頻輸出控制:為了控制語音模塊的音頻輸出,需要編寫相應(yīng)的代碼來控制聲音的播放、停止、音量調(diào)節(jié)等功能。這可能涉及與模塊進(jìn)行通信,并發(fā)送特定的指令來控制音頻輸出的狀態(tài)和參數(shù)。用戶界面(可選):如果需要通過用戶界面來控制語音模塊,可以開發(fā)相應(yīng)的用戶界面,例如圖形用戶界面(GUI)或命令行界面(CLI)。用戶界面可以用于選擇音頻文件、控制音頻播放、調(diào)節(jié)音量等操作,并與語音模塊的控制指令進(jìn)行交互。調(diào)試和錯(cuò)誤處理:在軟件設(shè)計(jì)過程中,考慮適當(dāng)?shù)恼{(diào)試和錯(cuò)誤處理機(jī)制非常重要。這可能包括錯(cuò)誤檢測(cè)、異常處理、日志記錄等,以幫助識(shí)別和解決潛在的問題,并提高軟件的可靠性和穩(wěn)定性。圖4.3HDR-F-2.54語音模塊軟件設(shè)計(jì)4.4蜂鳴器模塊的軟件設(shè)計(jì)可以用語音模塊開始進(jìn)行游戲,通過按鍵給單片機(jī)指令,可以控制貪吃蛇或其他游戲的移動(dòng)的方向,同時(shí)我可以在點(diǎn)陣屏上看到我們的游戲內(nèi)容,當(dāng)我們游戲通過或者未通過時(shí)我們的蜂鳴器會(huì)進(jìn)行響應(yīng)。圖4.4蜂鳴器模塊軟件設(shè)計(jì)蜂鳴器模塊的軟件設(shè)計(jì)通常涉及以下幾個(gè)方面:引腳配置:首先,需要確定蜂鳴器模塊所連接的引腳,并在軟件中對(duì)這些引腳進(jìn)行配置。這通常涉及選擇合適的GPIO引腳,并設(shè)置其輸入/輸出模式和初始狀態(tài)。驅(qū)動(dòng)程序:為了控制蜂鳴器模塊發(fā)出聲音,需要編寫相應(yīng)的驅(qū)動(dòng)程序。這些驅(qū)動(dòng)程序通常包括以下功能:打開/關(guān)閉蜂鳴器:通過控制GPIO引腳的電平來控制蜂鳴器的開關(guān)狀態(tài)。打開時(shí),蜂鳴器發(fā)出聲音;關(guān)閉時(shí),蜂鳴器停止發(fā)聲。發(fā)聲模式:根據(jù)需要,可以實(shí)現(xiàn)不同的發(fā)聲模式,如連續(xù)發(fā)聲、間隔發(fā)聲、特定頻率發(fā)聲等。這通常涉及使用定時(shí)器或延時(shí)函數(shù)來控制蜂鳴器的開關(guān)時(shí)間和頻率??刂七壿嫞焊鶕?jù)具體應(yīng)用的需求,可能需要設(shè)計(jì)一些控制邏輯來觸發(fā)蜂鳴器的聲音。這可以通過與其他傳感器或設(shè)備的交互,或根據(jù)特定的條件觸發(fā)來實(shí)現(xiàn)。用戶界面:如果需要通過用戶界面來控制蜂鳴器模塊,可以開發(fā)相應(yīng)的用戶界面,并與驅(qū)動(dòng)程序進(jìn)行交互。這可以是一個(gè)物理按鈕、開關(guān)或通過軟件實(shí)現(xiàn)的圖形用戶界面(GUI)。調(diào)試和錯(cuò)誤處理:在軟件設(shè)計(jì)過程中,需要考慮適當(dāng)?shù)恼{(diào)試和錯(cuò)誤處理機(jī)制。這可以包括錯(cuò)誤檢測(cè)、異常處理和日志記錄,以幫助識(shí)別和解決潛在的問題。4.5按鍵模塊的軟件設(shè)計(jì)通過USB電源進(jìn)行供電,首先進(jìn)行的是系統(tǒng)單片機(jī)初始化,初始化不成功時(shí),繼續(xù)進(jìn)行初始化直至成功,初始化成功后,我們可以開始進(jìn)行游戲,通過按鍵給單片機(jī)指令,可以控制貪吃蛇的方向,同時(shí)我們可以在點(diǎn)陣屏上看到我們的游戲內(nèi)容。圖4.5按鍵模塊軟件設(shè)計(jì)4.6數(shù)碼管模塊的軟件設(shè)計(jì)SLR0283CRC1BD-3.5數(shù)碼管顯示模塊的軟件設(shè)計(jì)流程如下:首先,確定開發(fā)環(huán)境和編程語言,根據(jù)個(gè)人偏好和項(xiàng)目需求選擇適合的開發(fā)環(huán)境,例如Arduino、C/C++或Python等。然后,根據(jù)數(shù)碼管顯示模塊的規(guī)格和數(shù)據(jù)手冊(cè),確定所需的庫(kù)和依賴項(xiàng),以支持對(duì)數(shù)碼管的控制功能。接下來,根據(jù)數(shù)碼管顯示模塊的引腳布局,初始化相關(guān)引腳并聲明所需的變量。這些變量可以包括控制信號(hào)的引腳和數(shù)碼管段的引腳等。確保正確配置引腳和變量,以便后續(xù)的控制和顯示操作。根據(jù)您的需求,設(shè)置數(shù)碼管的顯示模式,可以是共陽(yáng)(CA)或共陰(CC)模式。這將影響到后續(xù)編寫的顯示函數(shù)中的引腳控制方式。接著,編寫顯示函數(shù),用于在數(shù)碼管上顯示數(shù)字或字符。通過控制相應(yīng)的引腳,打開或關(guān)閉數(shù)碼管的各個(gè)段,以呈現(xiàn)所需的數(shù)字或字符。根據(jù)數(shù)碼管的引腳布局,確保準(zhǔn)確地控制每個(gè)段的狀態(tài),從而實(shí)現(xiàn)正確的顯示效果。如果有外部輸入接口,如按鈕或開關(guān),編寫代碼來檢測(cè)輸入狀態(tài)并執(zhí)行相應(yīng)的操作。例如,可以編寫代碼來控制數(shù)碼管的亮度、切換顯示模式或調(diào)整顯示內(nèi)容等,以實(shí)現(xiàn)更豐富的用戶交互。根據(jù)具體的應(yīng)用需求,添加邏輯和控制代碼。根據(jù)數(shù)碼管顯示模塊的功能,可以編寫代碼來實(shí)現(xiàn)時(shí)鐘功能、倒計(jì)時(shí)功能、溫度顯示等,以滿足項(xiàng)目的要求。在完成軟件代碼編寫后,進(jìn)行調(diào)試和測(cè)試。連接數(shù)碼管顯示模塊和相應(yīng)的硬件,驗(yàn)證軟件的功能和性能是否符合預(yù)期。使用調(diào)試工具和監(jiān)視器,檢查程序的執(zhí)行情況和數(shù)據(jù)傳輸,確保一切正常工作。圖4.6數(shù)碼管模塊軟件設(shè)計(jì)第5章系統(tǒng)測(cè)試5.1系統(tǒng)實(shí)物圖圖5.1系統(tǒng)實(shí)物圖5.2測(cè)試步驟圖5.2測(cè)試步驟圖用USB電源供電后,我們開始進(jìn)入游戲,有菜單設(shè)置按鍵,上下左右按鍵。當(dāng)我們選擇第一個(gè)游戲是貪吃蛇,我們右邊的四個(gè)按鍵就可以控制蛇的移動(dòng)方向,使其朝著我們想要的方向去運(yùn)行。當(dāng)我們選擇第二個(gè)游戲俄羅斯方塊時(shí),我們的左右按鍵可以控制方塊下落的方向,讓他下落到我們想要的位置,還有按鍵可以改變它的形狀。

第6章總結(jié)與展望6.1總結(jié)在該設(shè)計(jì)項(xiàng)目中,我們主要針對(duì)硬件方面進(jìn)行了設(shè)計(jì),包括單片機(jī)的最小系統(tǒng)、電機(jī)驅(qū)動(dòng)電路以及蜂鳴器報(bào)警電路。同時(shí),我們還進(jìn)行了軟件設(shè)計(jì),主要是借助各種資料和資源,開發(fā)了多款程序,如貪吃蛇、俄羅斯方塊等,以實(shí)現(xiàn)系統(tǒng)的多樣化功能。在整個(gè)設(shè)計(jì)過程中,我們通過一塊開發(fā)板和Keil、STC以及自己搭建的外圍電路進(jìn)行了調(diào)試,不斷地進(jìn)行優(yōu)化和改進(jìn),最終實(shí)現(xiàn)了一個(gè)功能強(qiáng)大、性價(jià)比高、操作簡(jiǎn)便的電子儀器儀表產(chǎn)品。該產(chǎn)品的市場(chǎng)前景廣闊,具有良好的推廣和應(yīng)用價(jià)值。我們相信,通過不斷的創(chuàng)新和優(yōu)化,該產(chǎn)品將在未來的市場(chǎng)競(jìng)爭(zhēng)中占據(jù)一席之地。6.2展望基于單片機(jī)的點(diǎn)陣屏游戲機(jī)是一項(xiàng)新興的電子產(chǎn)品,具有廣闊的市場(chǎng)前景和應(yīng)用前景。展望未來,這種游戲機(jī)有很大的發(fā)展?jié)摿?。首先,隨著科技的不斷進(jìn)步和市場(chǎng)需求的不斷增長(zhǎng),點(diǎn)陣屏游戲機(jī)的功能將得到不斷的完善和提升,可以加入更多的游戲、更多的音效和更豐富的交互方式,為用戶提供更加豐富、更加有趣的游戲體驗(yàn)。其次,隨著人們對(duì)健康的關(guān)注度越來越高,點(diǎn)陣屏游戲機(jī)可以加入更多的健康功能,例如運(yùn)動(dòng)監(jiān)測(cè)、睡眠監(jiān)測(cè)、心率檢測(cè)等,以幫助用戶更好地了解和管理自己的身體健康。此外,點(diǎn)陣屏游戲機(jī)還可以與智能家居、智能辦公等領(lǐng)域相結(jié)合,通過藍(lán)牙、Wi-Fi等無線通信技術(shù)實(shí)現(xiàn)智能互聯(lián),為用戶提供更加便捷、智能的生活體驗(yàn)。最后,隨著人工智能技術(shù)的不斷發(fā)展,點(diǎn)陣屏游戲機(jī)可以加入更加智能化的功能,例如人臉識(shí)別、語音交互等,以滿足用戶對(duì)高端智能產(chǎn)品的需求。因此,基于單片機(jī)的點(diǎn)陣屏游戲機(jī)在未來的發(fā)展中將有著廣闊的市場(chǎng)前景和應(yīng)用前景,具有非常大的潛力和價(jià)值。

參考文獻(xiàn)李倩.貪吃蛇游戲設(shè)計(jì)[J].無線互聯(lián)科技,2019,16(02):162-163.李雨哲,孫煉.基于C語言的貪吃蛇游戲設(shè)計(jì)[J].河南科技,2020(07):31-33.孫嵐嵐,姚世豪,王瑤,高利杰,范忠良.基于STC15系列的多功能單片機(jī)開發(fā)板[J].甘肅科技縱橫,2021,50(12):1-3.呂橙.貪吃蛇游戲的開發(fā)設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2021,17(03):118-121.DOI:10.14004/ki.ckt.2021.0147.李營(yíng),呂兆承,陳帥,權(quán)循忠.基于FPGA的貪吃蛇游戲設(shè)計(jì)與實(shí)現(xiàn)[J].通化師范學(xué)院學(xué)報(bào),2020,41(08):14-18.DOI:10.13877/22-1284.2020.08.003.韋翠華.基于單片機(jī)與三維建模的貪吃蛇游戲機(jī)的綜合設(shè)計(jì)[J].電子技術(shù)與軟件工程,2019(20):245-246.李曉彤,羅杉,王華陽(yáng),羅勁睿,張蕾.基于51單片機(jī)的綜合游戲機(jī)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2018,31(07):143-145+153.施瑤.基于HTML5的貪吃蛇游戲設(shè)計(jì)與實(shí)現(xiàn)[J].福建電腦,2018,34(07):118-119.DOI:10.16707/ki.fjpc.2018.07.061.汪源,李宛聰,黃文敏,白金妍.一種基于LabVIEW的貪吃蛇游戲的設(shè)計(jì)[J].信息與電腦(理論版),2018(09):102-103+106.鄭馨,江克勤,程玉勝.貪吃蛇游戲在線性數(shù)據(jù)結(jié)構(gòu)中的案例教學(xué)[J].安慶師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2018,24(04):117-119+128.DOI:10.13757/34-1328/n.2018.04.026.呂達(dá),池文慧.基于STC51單片機(jī)的LED點(diǎn)陣游戲機(jī)的設(shè)計(jì)開發(fā)[J].西部皮革,2018,40(04):64.王靜霞,劉俐.基于單片機(jī)控制的簡(jiǎn)易打字游戲機(jī)系統(tǒng)設(shè)計(jì)[J].電子制作,2016(13):17-18.DOI:10.16589/11-3571/tn.2016.13.006.李忠玉,劉旭.基于STC15系列單片機(jī)的球類計(jì)分系統(tǒng)硬件設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2018(12):80-83.韋翠華.基于單片機(jī)與三維建模的貪吃蛇游戲機(jī)的綜合設(shè)計(jì)[J].電子技術(shù)與軟件工程,2019(20):245-246.徐連喜.STC15系列單片機(jī)在智能停電保護(hù)裝置中的應(yīng)用[J].電子技術(shù)與軟件工程,2021(12):84-85.張文華,廖俊杰,付乙眉.基于C語言的貪吃蛇游戲的簡(jiǎn)單設(shè)計(jì)與實(shí)現(xiàn)[J].智富時(shí)代,2019(03):183.李雨哲,孫煉.基于C語言的貪吃蛇游戲設(shè)計(jì)[J].河南科技,2020(07):31-33.劉帥,張冬,何建國(guó),張曉彪,衛(wèi)婷婷,李曉林.基于AT89C52單片機(jī)的LCD12864顯示設(shè)計(jì)及貪吃蛇游戲算法研究[J].科技通報(bào),2018,34(12):192-197.DOI:10.13774/ki.kjtb.2018.12.040.LiuKeshun,ZhangXijun,ZhouXing.ResearchonAnalysisandClassificationofVulnerabilityofElectromagneticPulsewithaSTM32Single-ChipMicrocomputer[J].SCIENTIFICPROGRAMMING,2021,2021.Edidas.InfluenceOftheSimulationProgramMethodstotheStudentsLearningOutcomesontheSubjectOftheMicrocontrollerSystem[J].JournalofPhysics:ConferenceSeries,2019,1387.NationalCentralUniversity;PatentIssuedforMulti-MicrocontrollerSystem,InternetOfThingsGatewaySystem,AndControlFlowOfMulti-MicrocontrollerSystemBasedOnNetworkBridge(USPTO10,313,432)[J].ElectronicsNewsweekly,2019.PatmantharaSyaad,YulianaOkiDwi,DwiyantoFelixAndika,WibawaAjiPrasetya.TheUseofLadderSnakeGamestoImproveLearningOutcomesinComputerNetworking[J].InternationalJournalofEmergingTechnologiesinLearning(iJET),2019,14(21).EkdahlAnnaLena.DifferentLearningPossibilitiesfromtheSameActivity—SwedishPreschoolTeachers’EnactmentofaNumberRelationActivity[J].ScandinavianJournalofEducationalResearch,2020,65(4).

附錄電路圖源代碼#include"config.h"volatileuint8datakeypad=K_NULL; //鍵盤狀態(tài)volatileuint8datakeycont=0; //鍵盤檢測(cè)消抖定時(shí)器volatileuint16datatms=0; //1msT0定時(shí)器bitkey_state=0; //按鍵狀態(tài)uint16dataspeeds=0; //游戲速度uint16datascores=0; //游戲計(jì)分bitGlife=1; //游戲生命bitsound_ON=1; //音效開關(guān)uint8dataduty=80; //PWM,默認(rèn)亮度uint8dataDispRAM[16]={0};uint8codebitman[8]={1,2,4,8,16,32,64,128};//用于數(shù)字序號(hào)定位0~7bit位uint8codenum[10][5]= //陽(yáng)碼{ {0x7,0x5,0x5,0x5,0x7}, {0x2,0x6,0x2,0x2,0x7}, {0x7,0x1,0x7,0x4,0x7}, {0x7,0x1,0x7,0x1,0x7}, {0x5,0x5,0x7,0x1,0x1}, {0x7,0x4,0x7,0x1,0x7}, {0x7,0x4,0x7,0x5,0x7}, {0x7,0x1,0x1,0x1,0x1}, {0x7,0x5,0x7,0x5,0x7}, {0x7,0x5,0x7,0x1,0x7}};/*********************PORT_INIT********************/voidPort_Init(){ P0M0=0Xff; P0M1=0X00; P1M0=0Xff; P1M1=0X00; P2M0=0Xff; P2M1=0X00; P3M0=0X00; P3M1=0X00; P4M0=0Xff; P4M1=0X00; P5M0=0Xff; P5M1=0X00;}voidInit_Timer(){/******************定時(shí)器0中斷設(shè)置**********************/ AUXR|=0x80;//定時(shí)器0為1T模式TMOD=0x00;//設(shè)置定時(shí)器為模式0(16位自動(dòng)重裝載)TL0=T1MS;//初始化計(jì)時(shí)值TH0=T1MS>>8;TR0=1;//定時(shí)器0開始計(jì)時(shí)ET0=1;//使能定時(shí)器0中斷 /*****************外部中斷設(shè)置*************************/ IT0=1;//設(shè)置INT0下降沿觸發(fā)EX0=1;//使能外部中斷INT0 IT1=1;//設(shè)置INT1下降沿觸發(fā)EX1=1;//使能外部中斷INT1 INT_CLKO|=0x70;//使能INT2,INT3,INT4(EX4=1,EX3=1,EX2=1 EA=1; }voidArray_CLR(uint8*p){ uint8i=0; while(i!=16) { p[i]=0x00; i++; }}voidShowScore(uintscore){ uint8i; uint8qx,bx,sx,gx; qx=score/1000; bx=score%1000/100; sx=score%100/10; gx=score%10; Array_CLR(DispRAM); for(i=0;i<5;i++) DispRAM[8-i]=(num[sx][i]<<4)|(num[gx][i]); for(i=0;i<5;i++) DispRAM[14-i]=(num[qx][i]<<5)|(num[bx][i]<<1); // MatxDisp(DispRAM,duty);}voidmain(){ Port_Init(); Sound_Init(); Init_Timer(); Sound_Tone(1,14,5);//滴 srand(TL0); delayms(100); Play_Music(sound_game_start); Flash_Screen_Clear(); while(1) { tms=0; keypad=K_NULL;//清除按鍵狀態(tài) switch(GUI_Main()) //進(jìn)入用戶游戲選擇界面,返回選擇的游戲 { case1: Tetris_Game(); break; case2: Snake_Game(); break; case3: RAC_Game(); break; case4: Shot_Game(); break; } Play_Music(sound_game_over); Flash_Screen_Clear(); ShowScore(scores); //將分?jǐn)?shù)載入顯存 delayms(300); keypad=K_NULL; while(keypad!=K_UP) //在沒按下OK鍵時(shí)保持分?jǐn)?shù)顯示 { MatxDisp(DispRAM,duty); SMG_Display(scores,duty); } } }/*Timer0interruptroutine*/voidT0_Timer_1ms_int()interrupt1using1{ if(tms<0xfffe) tms++; //防止溢出 if(key_state){if(!--keycont)key_state=0;} if(PIN_TR2)//TR2如果打開,則開始播放音效 { if(!sound_cnt_time--) { TR2_OFF; beep=1; if(music_p[s_p][1]) { Sound_Tone(sound_ON,music_p[s_p][0],music_p[s_p][1]); s_p++;//自動(dòng)裝載下一個(gè)音符,實(shí)現(xiàn)音效與游戲“同時(shí)”運(yùn)行 } } } if(KEY_DOWN==0&KEY_UP==0) IAP_CONTR=0x60;//軟件復(fù)位下載程序}voidT2_Timer_Sound_freq()interrupt12//中斷入口{beep=~beep;//蜂鳴器頻率震動(dòng)}uint8Get_Kvuale(uint8key_delay)//鍵值消抖處理,參數(shù)為靈敏度調(diào)節(jié){ uint8kvuale=K_NULL; //返回的初始值為空值 if(keypad!=K_NULL) //當(dāng)鍵值不為NULL時(shí),說明有按鍵按下 { if(!key_state) //當(dāng)按鍵狀態(tài)位state為0時(shí)說明是第一次觸發(fā)有效,為1時(shí)為重復(fù)觸發(fā) { key_state=1; //置1,防止重復(fù)觸發(fā) kvuale=keypad;//獲得讀取鍵值 keycont=key_delay;//載入消抖時(shí)間 } keypad=K_NULL; //清楚鍵值 } returnkvuale;}/*********外部中斷按鍵區(qū)**********/voidexint0()interrupt0//INT0{ keypad=0;}voidexint1()interrupt2//INT1{ keypad=1; }voidexint2()interrupt10//INT2{ keypad=2;}voidexint3()interrupt11//INT3{ keypad=3;}voidexint4()interrupt16//INT4{ keypad=4;}/* 2014-1-2600:00:00 :完成貪吃蛇游戲模型 2014-3-823:27:05 :增加游戲會(huì)隨著吃的食物的增加而加快游戲速度 2014-3-1520:06:15 :進(jìn)行實(shí)體硬件測(cè)剩,運(yùn)行良好,但貪吃蛇結(jié)構(gòu)設(shè)置太耗RAM,將進(jìn)行優(yōu)化。*/#include"config.h"#defineNORSPEED360#defineASPEED100#defineWIDTH8 //游戲屏幕寬度#defineLENGTH16 //游戲屏幕長(zhǎng)度staticstructFood{uint8x;//食物的橫坐標(biāo)uint8y;//食物的縱坐標(biāo)}food;structSnakesnake;enumdirec{up,down,left,right};//蛇的運(yùn)動(dòng)方向staticvoidSnake_Init(); //初始化游戲staticvoidSnake_Disp(); //游戲顯示staticvoidSnake_Run(); //蛇向前走一步staticvoidCreate_Food(); //隨機(jī)生成食物staticvoidCreate_Food(){ uint8i; food.x=rand()%WIDTH; //范圍1-16; food.y=rand()%LENGTH; //獲得隨機(jī)數(shù)種子;//用計(jì)數(shù)器作為隨機(jī)數(shù)發(fā)生器 for(i=1;i<(snake.node);i++)//檢測(cè)產(chǎn)生的食物是否與蛇本身重疊 { if((food.x==snake.x[i])&&(food.y==snake.y[i])) Create_Food(); //重疊則重新成生 }}staticvoidSnake_Init(){ uint8c; for(c=0;c<MAX_SNAKE;c++)//清除內(nèi)存數(shù)據(jù) { snake.x[c]=-1; snake.y[c]=-1; } snake.life=1; //賦予蛇生命 snake.node=3; //默認(rèn)長(zhǎng)度3節(jié) snake.direc=up;//初始方向 snake.x[0]=4; snake.y[0]=5; snake.x[1]=4; snake.y[1]=4; snake.x[2]=4; snake.y[2]=3; speeds=NORSPEED; //游戲速度 tms=0; scores=0; Create_Food(); //生成第一個(gè)食物}staticvoidSnake_Run() //蛇爬行算法{ uint8i; for(i=(snake.node-1);i>0;i--) //蛇頭作為前進(jìn)引導(dǎo),長(zhǎng)江后浪推前浪 { snake.y[i]=snake.y[i-1]; snake.x[i]=snake.x[i-1]; } switch(snake.direc) //根據(jù)蛇的方向標(biāo)前進(jìn) { caseup: snake.y[0]+=1; break; casedown: snake.y[0]-=1; break; caseleft: snake.x[0]-=1; break; caseright: snake.x[0]+=1; break; }}staticvoidSnake_Disp() //游戲畫面顯示{ uint8p=16;// for(p=0;p<snake.node;p++)//繪制蛇圖像// { // delayus(500-duty);// DisPoint(snake.x[p],snake.y[p]);// delayus(duty/5);// cdata=0xff;// }// DisPoint(food.x,food.y);//繪制食物圖像// delayus(duty);// cdata=0xff;// // for(i=0;i<16;i++)// {// DispRAM[i]=0;// } while(p--)DispRAM[p]=0; //清除緩存 for(p=0;p<snake.node;p++) //寫入新緩存 { DispRAM[snake.y[p]]|=0x80>>(snake.x[p]); }// DispRAM[food.y]|=0x80>>(food.x); MatxDisp(DispRAM,duty); DisPoint(7-food.x,food.y); delayus(duty);}voidSnake_Game() //游戲過程{ Snake_Init(); //初始化游戲 Play_Music(sound_canon); while(snake.life) //有生命,便可玩 { uint8i; switch(keypad)//直接讀取鍵值,貪吃蛇不需要消抖 { caseK_UP: if((snake.direc==left)||(snake.direc==right)) snake.direc=up; //按下UP鍵時(shí),只有蛇在水平方向時(shí)才能改變 break; caseK_DOWN:if((snake.direc==left)||(snake.direc==right)) snake.direc=down; //按下DOWN鍵時(shí),只有蛇在水平方向時(shí)才能改變 break; caseK_LEFT:if((snake.direc==up)||(snake.direc==down)) snake.direc=left; //按下left鍵時(shí),只有蛇在垂直方向時(shí)才能改變 break; caseK_RIGHT:if((snake.direc==up)||(snake.direc==down)) snake.direc=right; //按下right鍵時(shí),只有蛇在垂直方向時(shí)才能改變 break; default: break; } if(KEY_OK==0)speeds=ASPEED;//加速鍵 elsespeeds=NORSPEED; keypad=K_NULL; if(tms>speeds) //半秒前進(jìn)一格 { tms=0; Snake_Run(); //無聊散步 } if((snake.x[0]==food.x)&&(snake.y[0]==food.y))//是否吃到食物 { Sound_Tone(sound_ON,4,5);// getfood=1;//直接在此增加蛇長(zhǎng)度會(huì)在下一個(gè)顯示掃描產(chǎn)生一個(gè)原有數(shù)據(jù)留影,故通過加長(zhǎng) snake.node++;// game_speed-=10; //每吃一個(gè)食物增加10點(diǎn)速度 Create_Food(); //產(chǎn)生新食物 } if((snake.x[0]>WIDTH-1)||(snake.x[0]<0)||(snake.y[0]>LENGTH-1)||(snake.y[0]<0))//是否碰壁 { snake.life=0; //蛇碰到墻壁死亡 } for(i=3;i<snake.node;i++)//從蛇的第四節(jié)開始判斷是否撞到自己了,因?yàn)樯哳^不可能撞到二三四節(jié) { if((snake.x[i]==snake.x[0])&&(snake.y[i]==snake.y[0]))//是否自殘 snake.life=0; //蛇頭碰到自身死亡 } Snake_Disp(); //顯示游戲圖像 scores=snake.node-3; SMG_Display(scores,duty); } scores=snake.node-3; TR2_OFF;}#include"config.h"staticvoidDelay1us() //@33.000MHz{ unsignedchari; _nop_(); _nop_(); _nop_(); i=5; while(--i);}staticvoidDelay1ms() //@33.000MHz{ unsignedchari,j; i=33; j=22; do { while(--j); }while(--i);}voiddelayus(unsignedintn){ while(n--) Delay1us();}voiddelayms(unsignedintn){ while(n--) Delay1ms();}#include"config.h"#defineA 0#defineB 1#defineON 1 //共陰voidData_CLR(bitab) //硬件上的原因,點(diǎn)陣共陽(yáng),數(shù)碼管共陰,所以帶參{ LED_D0=ab;LED_D1=ab;LED_D2=ab;LED_D3=ab; LED_D4=ab;LED_D5=ab;LED_D6=ab;LED_D7=ab;}voidROW_data(uint8rdata)//行選擇模塊{ switch(rdata) { case0:LED_R16=0;LED_R1=1; break; case1:LED_R1 =0;LED_R2=1; break; case2:LED_R2 =0;LED_R3=1; break; case3:LED_R3 =0;LED_R4=1; break; case4:LED_R4 =0;LED_R5=1; break; case5:LED_R5 =0;LED_R6=1; break; case6:LED_R6 =0;LED_R7=1; break; case7:LED_R7 =0;LED_R8=1; break; case8:LED_R8 =0;LED_R9=1; break; case9:LED_R9 =0;LED_R10=1; break; case10:LED_R10 =0;LED_R11=1; break; case11:LED_R11 =0;LED_R12=1; break; case12:LED_R12 =0;LED_R13=1; break; case13:LED_R13 =0;LED_R14=1; break; case14:LED_R14 =0;LED_R15=1; break; case15:LED_R15 =0;LED_R16=1; break; case0xff: LED_R1=1;LED_R2=1;LED_R3=1;LED_R4=1; LED_R5=1;LED_R6=1;LED_R7=1;LED_R8=1; LED_R9=1;LED_R10=1;LED_R11=1;LED_R12=1; LED_R13=1;LED_R14=1;LED_R15=1;LED_R16=1; break; //0xff全選模式 default: LED_R1=0;LED_R2=0;LED_R3=0;LED_R4=0; LED_R5=0;LED_R6=0;LED_R7=0;LED_R8=0; LED_R9=0;LED_R10=0;LED_R11=0;LED_R12=0; LED_R13=0;LED_R14=0;LED_R15=0;LED_R16=0; break; //其他關(guān)閉所以列選 }}voidDisPoint(uint8x,uint8y){ #defineL_ON0 ROW_data(88); //清除 Data_CLR(B); ROW_data(y); //行選擇 switch(x) { case0: LED_D0=L_ON; break; case1: LED_D1=L_ON; break; case2: LED_D2=L_ON; break; case3: LED_D3=L_ON; break; case4: LED_D4=L_ON; break; case5: LED_D5=L_ON; break; case6: LED_D6=L_ON; break; case7: LED_D7=L_ON; break; }}voidTns(uint8n)//短暫延時(shí){ while(n--);}voidMatxDisp(uint8*buf,uint8duty){ uint8p,i; bitb; SMG_S1=1;SMG_S2=1;SMG_S3=1; Data_CLR(B); #defineLED_OFF 1; for(p=0;p<16;p++) { ROW_data(p); for(i=0;i<8;i++) { b=~(bit)(buf[p]&bitman[i]);//共陽(yáng)取反 switch(i) { case0: LED_D7=LED_OFF;Tns(100-duty);LED_D0=b; break; case1: LED_D0=LED_OFF;Tns(100-duty);LED_D1=b; break; case2: LED_D1=LED_OFF;Tns(100-duty);LED_D2=b; break; case3: LED_D2=LED_OFF;Tns(100-duty);LED_D3=b; break; case4: LED_D3=LED_OFF;Tns(100-duty);LED_D4=b; break; case5: LED_D4=LED_OFF;Tns(100-duty);LED_D5=b; break; case6: LED_D5=LED_OFF;Tns(100-duty);LED_D6=b; break; case7: LED_D6=LED_OFF;Tns(100-duty);LED_D7=b; break; default:break; } Tns(duty); } LED_D7=1; }}voidSMG_Num(uint8n) //數(shù)碼管段碼{ switch(n) { case0: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_E=ON;SMG_F=ON; break; case1:SMG_B=ON;SMG_C=ON; break; case2: SMG_A=ON;SMG_B=ON;SMG_D=ON;SMG_E=ON;SMG_G=ON; break; case3: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_G=ON; break; case4:SMG_B=ON;SMG_C=ON;SMG_F=ON;SMG_G=ON; break; case5: SMG_A=ON;SMG_C=ON;SMG_D=ON;SMG_F=ON;SMG_G=ON; break; case6: SMG_A=ON;SMG_C=ON;SMG_D=ON;SMG_E=ON;SMG_F=ON;SMG_G=ON; break; case7: SMG_A=ON;SMG_B=ON;SMG_C=ON; break; case8: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_E=ON;SMG_F=ON;SMG_G=ON; break; case9: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_F=ON;SMG_G=ON; break; }}voidSMG_Display(uint16goal,uint8duty){ ROW_data(88);//屏蔽點(diǎn)陣 Data_CLR(A); Tns(100-duty); SMG_S1=0; SMG_Num(goal/100); Tns(duty); Data_CLR(A); Tns(100-duty); SMG_S1=1;SMG_S2=0; SMG_Num(goal/10%10); Tns(duty); Data_CLR(A); Tns(100-duty); SMG_S2=1;SMG_S3=0; SMG_Num(goal%10); Tns(duty); SMG_S3=1;}#include"config.h"uint8site;uint8bullet=0;uint8aim_layer=1;uint8plane[2];uint8block[16];staticvoidShot_One();staticvoidShot_One(){ if(bullet>15){ bullet=1; return; } if(bitman[site]&block[bullet]) { block[bullet]&=(~

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論