基于單片機(jī)的數(shù)字爆炸游戲_第1頁
基于單片機(jī)的數(shù)字爆炸游戲_第2頁
基于單片機(jī)的數(shù)字爆炸游戲_第3頁
基于單片機(jī)的數(shù)字爆炸游戲_第4頁
基于單片機(jī)的數(shù)字爆炸游戲_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

中文題目:基于單片機(jī)的數(shù)字爆炸游戲英文題目:Thegameof‘theexplosivefigure’basedonthesinglechipsystem專業(yè)班級09電子信息工程2班提交日期2013年5摘要雖然社會不斷進(jìn)步和經(jīng)濟(jì)快速增長,但是現(xiàn)代人的幸福感卻越來越少。超負(fù)荷的工作壓力,急功近利的心理傾向,學(xué)習(xí)任務(wù)過于繁重,高考不如意如何調(diào)整心態(tài),生活貧困加重心理壓力,老年人缺乏精神關(guān)愛等等問題,使得社會各個階層的人的生活壓力越來越大,苦不堪言。因此,通過適當(dāng)?shù)挠螒蚧顒痈纳七@種生活狀態(tài)顯得尤為重要。本論文設(shè)計一款基于單片機(jī)的數(shù)字爆炸游戲。基于目前社交活動日漸頻繁,人們在日常聚會中為了調(diào)節(jié)氣氛,會安排適當(dāng)?shù)挠螒?,從而釋放生活壓力,添加生活樂趣,同時也增進(jìn)了同學(xué)朋友之間友誼,而數(shù)字爆炸游戲是其中常用的一種游戲。本設(shè)計以STC89C52單片機(jī)為基礎(chǔ),帶有按鍵及顯示屏的游戲平臺,基于C語言開發(fā)游戲程序,給人們?nèi)粘S螒蛱峁┓奖?。關(guān)鍵詞數(shù)字爆炸游戲平臺單片機(jī)Thegameof‘theexplosivefigure’basedonthesingle-chipsystemAbstractNowadays,thesenseofhappinessofmodernpeopleislessandless,althoughthesocialprogressandrapideconomicgrowth.Thepressureoftheirworkistoohard,thepsychologicaltendenciesofquicksuccessistooserious,thetaskoflearningistooheavy,howtoadjusttheirattitudewhenfailureinthecollegeentranceexamination,thepsychologicalpressureincreasebecauseofthelivingofpoverty,lackofspiritualcareofolderpersons,andsoon.Pressureoflifeforpeopleofalllevelsofsocietyismoreandmoremiserable.Toimprovethelivingconditionsthroughappropriateactivitiesandgamesisparticularlyimportant.Inthisthesis,the‘theexplosivefigure’gamebasedonthesingle-chipisdesigned.Basedonthecurrentsocialeventsbecomemorefrequent,inordertoregulatetheatmosphereataparty,peoplewillarrangesomecasualgamestoreleasethepressureoflife,andfindmorehappinessintheirownlife,aswellastopromotethefriendshipbetweenclassmatesandfriends.Thegame,‘theexplosivefigure’,iscommonlyused.Thework,basedontheSTC89C52single-chipsystem,isagamingplatformwithkeygroupsanddisplay,whichisdevelopedusingClanguage.Anyway,theworkcanproveconveniencetothemodernpeople’sdailygame.KeywordsTheexplosivefigureGamingplatformSingle-chipsystem目錄1緒論 11.1聚會游戲的背景及研究意義 11.2各種聚會游戲及其比較 12游戲平臺總體設(shè)計 32.1游戲具體流程實(shí)現(xiàn) 32.2游戲模塊設(shè)計 42.2.1單片機(jī)控制主模塊 42.2.2顯示電路模塊 52.2.3鍵盤輸入模塊 52.2.4語音提示模塊 53游戲平臺硬件設(shè)計 53.1設(shè)計概述與要求 53.2基于STC89C52的最小系統(tǒng)硬件設(shè)計 63.2.1STC89C52單片機(jī)簡介 63.2.2復(fù)位電路 73.2.3時鐘電路 73.3顯示電路模塊設(shè)計 93.3.1TFT-LCD模塊 93.2.2TFT-LCD與單片機(jī)連接電路 93.4鍵盤輸入模塊 103.4.1矩陣鍵盤 103.4.2矩陣鍵盤電路圖 113.5語音提示模塊 113.5.1SYN6288語音芯片 113.5.2系統(tǒng)構(gòu)成框圖 123.6電源穩(wěn)壓模塊 124游戲平臺軟件設(shè)計 124.1軟件總體設(shè)計和開發(fā)平臺 124.2數(shù)字范圍更新 144.3模塊軟件設(shè)計 155結(jié)論 16致謝 17參考文獻(xiàn) 18附錄一單片機(jī)STC89C52主程序 20附錄二TFTLCD顯示程序 26附錄三矩陣鍵盤程序 341緒論1.1聚會游戲的背景及研究意義隨著國內(nèi)經(jīng)濟(jì)的高速發(fā)展,越來越多的人往城市遷移,國內(nèi)城市化步伐加快,但在繁華背后人們出現(xiàn)的心理問題不容忽視,城市的繁華與人們心中的空洞形成了十分鮮明的對比。城市人多,但是卻一個個形同陌路,這是很多城市人心中難以訴說的悲劇。因此,人們會在工作學(xué)習(xí)之余,與相識相知的朋友進(jìn)行聚會,微妙的情感牽引著人們走到了一起。在聚會過程中,為了避免冷場情況,人們經(jīng)常會在聚會過程中進(jìn)行一系列的聚會游戲。聚會游戲的具體定義是指朋友、同事、家人或公司單位等在平時聚會、開派對以及過年過節(jié)酒宴上為了活躍氣氛、加深彼此感情、提高凝聚力等目的而進(jìn)行的集體互動游戲,一般是至少2人以上的多人互動游戲。聚會游戲其實(shí)并非是現(xiàn)代社會的產(chǎn)品,在我國自古以來就有聚會游戲,大多在文人雅士間盛行,其中行酒令是很常見的一種助興方式。一般是指席間推舉一人為令官,余者聽令輪流說詩詞、聯(lián)語或其他類似游戲,違令者或負(fù)者罰飲,所以又稱“行令飲酒”。而到現(xiàn)代社會,聚會游戲則越趨通俗化、簡單化,從而適合更普遍的人群進(jìn)行游戲。1.2各種聚會游戲及其比較人們在聚會過程中進(jìn)行的游戲是多種多樣的,以下列舉一些在實(shí)際生活中聚會過程中應(yīng)用較多的游戲予以介紹:(1)桌游棋牌類游戲 桌上游戲發(fā)源于德國,在歐美地區(qū)已經(jīng)風(fēng)行了幾十年。大家以游戲會友、交友。在國外,桌上游戲內(nèi)容涉及戰(zhàn)爭、貿(mào)易、文化、藝術(shù)、城市建設(shè)、歷史等多個方面,大多使用紙質(zhì)材料加上精美的模型輔助。它是一種面對面的游戲,非常強(qiáng)調(diào)交流。因此,桌面游戲是家庭休閑、朋友聚會、甚至商務(wù)閑暇等多種場合的最佳溝通方式。21世紀(jì)初它也登陸到中國國內(nèi),風(fēng)靡白領(lǐng)群體。 從有人類文明開始就有了桌上游戲的開始。幾乎在各種古文明甚至某些史前文明中都可以發(fā)現(xiàn)桌上游戲的痕跡。在大量的歷史文獻(xiàn),考古遺跡中我們都發(fā)現(xiàn)了桌上游戲存在的證據(jù)——MERKNERA埃及法老古墓中我們發(fā)現(xiàn)了SENET這一迄今認(rèn)為是最古老的桌上游戲。桌上游戲在現(xiàn)代的復(fù)興起于20世紀(jì)初期,隨著西方國家里中產(chǎn)階級的形成而興起。這一人群有著可供休閑消費(fèi)的時間和金錢條件并且受過良好的教育,他們理所當(dāng)然的成為這一游戲方式的接受者。這種流行在二戰(zhàn)后更加廣泛:世界政治經(jīng)濟(jì)體系面臨戰(zhàn)后重建,但人們又無法熄滅對戰(zhàn)爭與競爭渴求的星星之火,于是大量以游戲方式模擬競技的桌上游戲營運(yùn)而生,其中更包括了大量以虛擬戰(zhàn)爭為主題材的原形,這成為了桌上游戲發(fā)展的黃金時代。電腦游戲是桌面游戲的近親,很多里程碑式的電腦游戲如“文明”全是在其桌上游戲的版本上發(fā)展而來。隨著電腦游戲的興起,桌上游戲有著衰退的跡象,直到近年來,博智式,也被稱為德式桌面游戲的興起使得桌上游戲又煥發(fā)了新的青春。如今,桌上游戲在歐美地區(qū)已經(jīng)風(fēng)行了幾十年,亦早已是風(fēng)靡社會的社交活動。大家以游戲會友、交友。在國外,桌面游戲已經(jīng)成為與書本一樣品種多樣的出版物,內(nèi)容涉及戰(zhàn)爭、貿(mào)易、文化、藝術(shù)、城市建設(shè)、歷史等多個方面。而在我國常見的桌游棋牌類游戲有:象棋、圍棋、五子棋、大富翁、三國殺、UNO、斗地主…在近幾年來,我國普遍不如小康水平,溫飽等問題得到解決,人們有更多的時間進(jìn)行游戲,因此也推進(jìn)了該類桌游棋牌游戲的發(fā)展,更有多種多樣的棋牌類游戲產(chǎn)生,使得人們的游戲選擇更多樣化。(2)語言交互式游戲語言交互式游戲,是以多人語言交流彼此所得到的信息從而進(jìn)行游戲的。游戲原理是各人所得到信息的不同,而語言交流時信息的正確性無法得到保證,因此要通過自身對信息的辨別能力,挖掘出其中真實(shí)的信息碎片,找出事實(shí)真相。典型的語言交互式游戲代表作品有殺人游戲、狼人游戲等。語言交互式游戲?qū)τ螒虺蓡T智力和心力進(jìn)行考驗(yàn),概括地說,是一個多人參與的較量口才和分析判斷能力(推理)的游戲,當(dāng)然,心理素質(zhì)在中間也起著很關(guān)鍵的作用。此類游戲吸引人的地方在于壞勢力隱蔽藏匿表演時候的刺激和好勢力找出真相時候的成就感。該類游戲能鍛煉人的觀察能力、邏輯能力、想象力、判斷力、口才、表述能力、心理素質(zhì)及表演能力;能培養(yǎng)團(tuán)隊精神、活躍團(tuán)體氣氛、增進(jìn)團(tuán)隊成員的感情交流、提高凝聚力;提高人的語言表達(dá)能力,提高人的判斷能力,相當(dāng)于一場激烈的辯論會;以游戲交識朋友,可以和各種職業(yè)、各種類型的人結(jié)交朋友,通過游戲了解對方的性格特點(diǎn)并借助游戲中的交流加深彼此間的了解。(3)隨機(jī)選取懲罰游戲此種游戲主要是通過隨機(jī)選取游戲玩家,給予其一定的懲罰進(jìn)行游戲的,主要游戲方士是其隨機(jī)選取玩家的過程,游戲玩家為了避免受到懲罰從而害怕被隨機(jī)選取到,因此增添了游戲的刺激感。該類游戲有流行已久的轉(zhuǎn)酒瓶游戲、投骰子、數(shù)字爆炸游戲等,游戲以簡單為主,游戲門檻低,因此十分適合普遍大眾。經(jīng)典的轉(zhuǎn)酒瓶游戲,是以一個空酒瓶為道具,游戲玩家圍成一圈,將酒瓶放平在中間后,對酒瓶進(jìn)行旋轉(zhuǎn),規(guī)定酒瓶停止旋轉(zhuǎn)后,瓶口所指向的玩家即為隨機(jī)選取到的懲罰對象,通過對懲罰對象進(jìn)行一系列的懲罰,增添游戲的刺激性以及樂趣。在本論文中主要研究的是數(shù)字爆炸游戲,此游戲是通過生成一個規(guī)定數(shù)字范圍的隨機(jī)數(shù)后,游戲玩家對該數(shù)字的估測進(jìn)行的,通過玩家的估測逐步縮小數(shù)字范圍,直到有玩家說中該隨機(jī)數(shù)為止,則數(shù)字達(dá)到爆炸條件,該玩家成為懲罰對象。該游戲具有很強(qiáng)的刺激性和娛樂性,當(dāng)數(shù)字范圍縮小到一定值后,會引起游戲成員的緊張心理,而對于懲罰的內(nèi)容也是一個值得關(guān)注的方面。對于游戲懲罰,比較常見的是真心話大冒險,玩家可以選擇說“真心話”或者做“大冒險”之一,“真心話”則是對其他游戲成員的各種難堪的問題進(jìn)行真實(shí)地回答;“大冒險”則是完成一件由游戲成員規(guī)定的事情。2游戲平臺總體設(shè)計2.1游戲具體流程實(shí)現(xiàn)數(shù)字爆炸游戲,一般以3個人以上進(jìn)行游戲,在游戲過程中,首先設(shè)定角色,由一個人作為主持人,通過手機(jī)或者紙等工具設(shè)定一個數(shù)值(一般設(shè)定范圍為1-100),然后輪流其他每一個游戲成員必須在該數(shù)字范圍內(nèi)選擇一個數(shù)值,如果該數(shù)值與設(shè)定的數(shù)值相吻合,則該數(shù)值達(dá)到爆炸要求,游戲結(jié)束,懲罰對象已經(jīng)生成;否則根據(jù)新的數(shù)值重新設(shè)定數(shù)字范圍:假如設(shè)定的數(shù)值是50,初始數(shù)值范圍是1-100,第一位游戲玩家選取的數(shù)值是40,數(shù)字不吻合,重新設(shè)定數(shù)字范圍,繼續(xù)游戲,新的數(shù)字范圍為40-100,由下一個玩家在此范圍內(nèi)選取一個數(shù)值。以此繼續(xù)縮小數(shù)字范圍,直至有人選擇的數(shù)字與設(shè)定的數(shù)值相吻合為止。在該游戲中有幾個缺點(diǎn)需要克服,第一,因?yàn)樾枰腥藫?dān)任主持人職位,因此無法投身到具體游戲當(dāng)中,這便給游戲團(tuán)體帶來了很嚴(yán)重的問題,具體由誰擔(dān)任主持人,無法公正地進(jìn)行選擇;第二,因?yàn)樵O(shè)定的爆炸數(shù)字是由人為進(jìn)行設(shè)定的,因此含有主觀性,設(shè)定的人可能會根據(jù)自己平時喜歡的數(shù)字進(jìn)行設(shè)定,因此平時熟知其習(xí)慣的游戲玩家會有很大的優(yōu)勢,造成了游戲的不公平性;第三,在游戲過程中,主持人很容易報錯數(shù)字范圍而給游戲帶來一些不必要的影響,甚至有可能在游戲過程中一不小心將設(shè)定的數(shù)值說出,造成游戲的失敗……我們可以很清楚地了解到,由人為地進(jìn)行游戲控制會造成許許多多問題。本論文則設(shè)計一款游戲作品,代替主持人的位置,使得每個人都能夠投入到游戲當(dāng)中,而且避免了許多認(rèn)為因素的影響,給我們聚會游戲“數(shù)字爆炸”帶來極大的方便,增添樂趣。在游戲平臺中,設(shè)定的初始數(shù)值范圍是0-100,在游戲開始之后,會首先隨機(jī)生成一個數(shù)值,并通過顯示屏以及語音提示對用戶進(jìn)行數(shù)值范圍的提醒,游戲用戶通過矩陣鍵盤輸入選擇的數(shù)值。通過單片機(jī)進(jìn)行數(shù)據(jù)比對,當(dāng)用戶選擇的數(shù)字與隨機(jī)生成的數(shù)值相吻合時,數(shù)字達(dá)到爆炸條件,則通過顯示屏以及語音提示數(shù)字已經(jīng)爆炸,此時該輪戲結(jié)束,開始下一輪游戲。如果用戶選擇的數(shù)字與生成的隨機(jī)數(shù)值不吻合時,則游戲平臺進(jìn)行數(shù)字范圍更新,確定新的數(shù)字范圍后,通過顯示屏以及語音通知游戲用戶新的數(shù)字范圍,繼續(xù)進(jìn)行游戲,直到數(shù)字達(dá)到爆炸條件。2.2游戲模塊設(shè)計 在游戲平臺的設(shè)計中,將總體設(shè)計分成4個模塊設(shè)計,分別為單片機(jī)控制主模塊、顯示電路模塊、鍵盤輸入模塊、語音提示模塊。2.2.1單片機(jī)控制主模塊單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機(jī)系統(tǒng)。單片機(jī)是嵌入式系統(tǒng)中重要而且發(fā)展迅速的組成部分,單片機(jī)接上振蕩元件(振蕩源)、復(fù)位電路和接口電路,載入軟件之后,可以后稱單片機(jī)應(yīng)用系統(tǒng)。單片機(jī)具備許多實(shí)際應(yīng)用上的優(yōu)點(diǎn):體積小、靈活性強(qiáng)、可靠性高、用途廣、價格低等……不僅如此,單片機(jī)還具備許多特點(diǎn):(1)突出控制功能,單片機(jī)設(shè)計的依據(jù)是對象體系的控制要求,其結(jié)構(gòu)、功能和指令系統(tǒng)都突出了控制功能,因此對外信息能夠及時采集,對控制對象能夠?qū)崟r進(jìn)行控制;(2)ROM和RAM分開,ROM用來固化調(diào)試好的程序、常數(shù)、數(shù)據(jù)表格等,RAM只用來存放運(yùn)行中的臨時數(shù)據(jù)、變量等,ROM和RAM分開,可使得系統(tǒng)運(yùn)行可靠,即使掉電,也能確保程序、常數(shù)、數(shù)據(jù)表格等的安全;(3)資源易于擴(kuò)展,單片機(jī)具有標(biāo)語擴(kuò)展的結(jié)構(gòu)和控制引腳,如果單片機(jī)本身ROM、RAM、定時器或者中斷源等資源不夠時,可以進(jìn)行資源擴(kuò)展。在“數(shù)字爆炸”游戲設(shè)計中,以單片機(jī)為主要控制模塊,通過單片機(jī)的控制作用,使得各個相應(yīng)的模塊能夠有序地進(jìn)行工作,達(dá)到游戲平臺的作用效果。2.2.2顯示電路模塊在顯示電路模塊,我們使用的主要顯示元件是TFT-LCD。TFT-LCD即薄膜晶體管LCD(ThinFilmTransistor),是有源矩陣類型液晶顯示器(AM-LCD)中的一種。TFT的顯示采用“背透式”照射方式,這樣的作法是在液晶的背部設(shè)置特殊光管,光源照射時通過下偏光板向上透出。由于上下夾層的電極改成FET電極和共通電極,在FET電極導(dǎo)通時,液晶分子的表現(xiàn)也會發(fā)生改變,可以通過遮光和透光來達(dá)到顯示的目的,響應(yīng)時間大大提高到80ms左右。顯示電路模塊是游戲平臺將信息輸出的主要方式,游戲用戶通過顯示電路模塊就能夠很輕易地獲知當(dāng)前游戲信息,這是游戲用戶實(shí)現(xiàn)與游戲平臺信息交互的基礎(chǔ)。2.2.3鍵盤輸入模塊鍵盤輸入模塊是在本游戲作品中游戲用戶給游戲平臺提供外部數(shù)據(jù)的唯一方法。在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,稱為矩陣鍵盤。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,相比于直接將端口用于鍵盤輸入,矩陣鍵盤一個端口的按鍵數(shù)量多出了許多,而且線數(shù)越多,矩陣鍵盤的作用效果越明顯。2.2.4語音提示模塊為了給予用戶更加優(yōu)質(zhì)的游戲體驗(yàn),在顯示電路模塊的基礎(chǔ)上,添加了語音提示模塊,使得用戶在游戲過程中不用將注意力一直集中在顯示屏幕上,通過語音功能就能夠獲取當(dāng)前游戲信息,從而為游戲提供更好的效果。在語音提示模塊添加之后,顯示電路模塊則起到另外一個作用,當(dāng)游戲用戶在聽不清語音提示信息、或者沒注意聽到語音信息的時候,則能夠通過顯示電路模塊獲取當(dāng)前游戲信息。3游戲平臺硬件設(shè)計3.1設(shè)計概述與要求游戲平臺主要分為四個模塊的設(shè)計,各個模塊相互獨(dú)立,但要有機(jī)的接合在一起,通過各個元器件端口的相互連接,信息的輸入輸出等進(jìn)行信息互通,并與游戲用戶進(jìn)行信息交互,用戶通過顯示電路模塊以及語音提示模塊獲取游戲平臺信息,使用鍵盤輸入模塊給游戲平臺提供外部數(shù)據(jù),而整個游戲平臺的靈魂所在則是其單片機(jī)控制主模塊,進(jìn)行游戲過程中最重要的數(shù)據(jù)處理匹配部分,并控制其他模塊的具體實(shí)現(xiàn)。因此在游戲設(shè)計過程中,必須十分重視單片機(jī)控制主模塊的設(shè)計,以下將對游戲平臺設(shè)計過程中幾個重要部分進(jìn)行具體介紹。3.2基于STC89C52的最小系統(tǒng)硬件設(shè)計3.2.1STC89C52單片機(jī)簡介STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。MCS-51系列單片機(jī)是目前國內(nèi)應(yīng)用最廣泛的單片機(jī)之一。隨著基于MCS-51系列單片機(jī)的嵌入式實(shí)時操作系統(tǒng)的出現(xiàn)與推廣,在很長一段時間內(nèi),MCS-51系列單片機(jī)仍將占據(jù)嵌入式系統(tǒng)產(chǎn)品中的中、低端產(chǎn)品市場。由于STC89C52具備上述多種優(yōu)點(diǎn),以及其在國內(nèi)的廣泛,因此在本作品設(shè)計中使用STC89C52作為控制器件。STC89C52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時器,內(nèi)置2KBEEPROM,MAX810復(fù)位電路,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件,可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。單片機(jī)最高運(yùn)作頻率35Mhz,6T/12T可以進(jìn)行選則。圖3-1引腳定義圖單片機(jī)STC89C52各個引腳定義如圖3-1所示。圖3-1引腳定義圖3.2.2復(fù)位電路為確保單片機(jī)電路穩(wěn)定可靠工作,復(fù)位電路是必不可少的一部分。如果系統(tǒng)在通電時得不到有效的復(fù)位,則程序計數(shù)器PC將得不到一個合適的初值,因此,單片機(jī)可能會從一個未被定義的位置開始執(zhí)行程序。復(fù)位操作完成單片機(jī)內(nèi)電路的初始化,使單片機(jī)從一種確定的狀態(tài)開始運(yùn)行。當(dāng)保持STC89C52單片機(jī)的RST引腳高電平10ms以上時,單片機(jī)就完成了復(fù)位電路操作。需要注意的是,當(dāng)復(fù)位端RST持續(xù)高電平的時間過長,單片機(jī)就會處于循環(huán)復(fù)位狀態(tài),這樣,單片機(jī)就無法執(zhí)行程序。因此,要求單片機(jī)復(fù)位后能夠脫離復(fù)位狀態(tài)。本系統(tǒng)的復(fù)位電路采用上電開關(guān)復(fù)位電路。上電復(fù)位的工作過程是:在加電時,復(fù)位電路通過電容加給RST端一個短暫的高電平信號,此高電平信號隨著Vcc對電容的充電過程而逐漸回落,即RST端的高電平持續(xù)時間取決于電容的充電時間。為了保證系統(tǒng)能夠可靠地復(fù)位,RST端的高電平信號必須維持足夠長的時間。上電時,Vcc的上升時間約為10ms,而振蕩器的起振時間則取決于振蕩頻率。當(dāng)單片機(jī)已經(jīng)在運(yùn)行時,按下復(fù)位鍵也能使RST持續(xù)一段時間的高電平,從而實(shí)現(xiàn)上電開關(guān)復(fù)位的功能。本設(shè)計系統(tǒng)的復(fù)位電路見圖3-2所示。圖3-2復(fù)位電路圖3.2.3時鐘電路單片機(jī)內(nèi)有時鐘電路(時鐘發(fā)生器),與振蕩器共同產(chǎn)生單片機(jī)工作所需要的時鐘信號,單片機(jī)在時鐘信號的控制下,按一定的時序進(jìn)行工作。振蕩器可由單片機(jī)內(nèi)震蕩電路外接振蕩元件實(shí)現(xiàn),構(gòu)成內(nèi)部時鐘方式,也可以是外振蕩源,直接接入外部時鐘信號,構(gòu)成外部時鐘方式。在本設(shè)計中,采用內(nèi)部時鐘方式。片內(nèi)高增益反相放大器通過XTAL1、XTAL2外接作為反饋元件的晶體(呈感性)與電容組成的并聯(lián)諧振回路構(gòu)成一個自激振蕩,向內(nèi)部時鐘提供振蕩時鐘。振蕩器的頻率主要取決于晶體的振蕩頻率,一般晶體在1.2~12MHZ之間任選,本設(shè)計中由于要進(jìn)行串口通信,選11.0592MHZ的晶振;電容器C1、C2起穩(wěn)定振蕩頻率,快速起振作用,通常取30pF左右。本設(shè)計系統(tǒng)的時鐘電路如圖3-3所示。圖3-3時鐘電路圖 綜合上述設(shè)計,則單片機(jī)控制主模塊的硬件設(shè)計電路圖包含復(fù)位電路、時鐘電路、單片機(jī)各端口連接線路、上拉電阻等。而單片機(jī)控制主模塊電路圖如圖3-4所示。圖3-4單片機(jī)控制主模塊電路圖3.3顯示電路模塊設(shè)計3.3.1TFT-LCD模塊ThinFilmTransistor(薄膜場效應(yīng)晶體管),是指液晶顯示器上的每一液晶象素點(diǎn)都是由集成在其后的薄膜晶體管來驅(qū)動。從而可以做到高速度高亮度高對比度顯示屏幕信息。TFT-LCD顯示基本原理:顯示屏由許多可以發(fā)出任意顏色的光線的像素組成,只要控制各個像素顯示相應(yīng)的顏色就能達(dá)到目的了。TFT(ThinFilmTransistor)LCD即薄膜晶體管LCD,是有源矩陣類型液晶顯示器(AM-LCD)中的一種。TFT的顯示采用“背透式”照射方式。3.3.2TFT-LCD與單片機(jī)連接電路 TFT-LCD主要包含有以下接口:BL_K(LED1的陰極);BL_A(LED電源電壓,LED的陽極)GND(接地)VDD(供電電壓2.5-3.3V)NC(不接)NC(不接)/CS低電平有效(低電平:片選高電平:不片選)/RESET(復(fù)位)RS(指令/數(shù)據(jù)選擇)/WR(允許讀寫低電平:寫高電平:讀)/RD(允許讀)D7(數(shù)據(jù)線接口7)D6(數(shù)據(jù)線接口6)D5(數(shù)據(jù)線接口5)D4(數(shù)據(jù)線接口4)D3(數(shù)據(jù)線接口3)D2(數(shù)據(jù)線接口2)D1(數(shù)據(jù)線接口1)D0(數(shù)據(jù)線接口0)GND(接地)通過TFT-LCD各個端口與單片機(jī)的對應(yīng)端口相連接,實(shí)現(xiàn)單片機(jī)控制主模塊與顯示電路模塊的有機(jī)結(jié)合,從而顯示電路模塊在單片機(jī)的控制下,為游戲用戶提供必要的游戲信息,成為人機(jī)交互界面中游戲平臺的信息輸出端口。顯示電路模塊的各端口與單片機(jī)的電路連接圖如圖3-5所示。圖3-5顯示電路模塊電路圖3.4鍵盤輸入模塊3.4.1矩陣鍵盤在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,稱為矩陣鍵盤。矩陣鍵盤的工作原理:按鍵設(shè)置在行、列線路交點(diǎn)上,行、列線路分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接到+5V電源上。無按鍵按下時,行線處于高電平的狀態(tài),而當(dāng)有按鍵按下時,則行線電平與此行線相連的列電平?jīng)Q定。行列掃描法原理:(1)使行線為編程的輸入線,列線是輸出線,拉低所有的列線路點(diǎn)平,判斷行線的變化,如果有按鍵按下,按鍵按下的對應(yīng)行線被拉低,否則所有的行線都為高電平。(2)在第一步判斷有鍵按下后,延時10ms消除機(jī)械抖動,再次讀取行值,如果此行線還處于低電平狀態(tài)則進(jìn)入下一步,否則返回第一步重新判斷。(3)開始掃描按鍵位置,采用逐行掃描,每間隔1ms的時間,分別拉低第一列,第二列,第三列,第四列,無論拉低哪一列其他三列都為高電平,讀取行值找到按鍵的位置,分別把行值和列值儲存在寄存器里。(4)從寄存器中找到行值和列值并把其合并,得到按鍵值,對此按鍵值進(jìn)行編碼,按照從第一行第一個一直到最后一行最后一個按鍵逐行進(jìn)行編碼,在提取按鍵值時,對編碼值進(jìn)行譯碼即可。3.4.2矩陣鍵盤電路圖在本游戲設(shè)計中使用4×4矩陣鍵盤,通過JP4與單片機(jī)控制主模塊進(jìn)行連接,游戲用戶通過矩陣鍵盤給游戲平臺的單片機(jī)控制主模塊提供外部數(shù)據(jù),即輸入游戲用戶選擇的數(shù)值,矩陣鍵盤輸入模塊是人機(jī)交互界面中游戲平臺的信息輸入端口。矩陣鍵盤的電路連接圖如圖3-6所示圖3-6矩陣鍵盤電路圖3.5語音提示模塊3.5.1SYN6288語音芯片SYN6288中文語音合成芯片是一款性價比高,效果自然的中高端語音合成芯片。芯片具有文本智能分析處理功能對常見的數(shù)值、電話號碼、時間日期、度量衡符號等格式的文本芯片能夠根據(jù)內(nèi)置的文本匹配規(guī)則進(jìn)行正確的識別和處理。SYN6288使用全雙工異步串行通信接口,實(shí)現(xiàn)與單片機(jī)的數(shù)據(jù)傳輸。支持多種格式的文本,具有清晰、自然、準(zhǔn)確的中文語音合成效果,每次合成的文本量最多可達(dá)200字節(jié),滿足該作品設(shè)計需求。其封裝形式如圖3-7所示。圖3-7SYN6288封裝形式3.5.2系統(tǒng)構(gòu)成框圖單片機(jī)通過異步串行接口向SYN6288-A語音模塊發(fā)送控制命令和轉(zhuǎn)換文本,當(dāng)SYN6288-A語音模塊接收到轉(zhuǎn)換文本后,通過特定的編碼格式合成為語音信號并通過揚(yáng)聲器播放。在本設(shè)計中,單片機(jī)通過命令幀的格式向SYN6288發(fā)送文本,SYN6288只需要檢測帶合成的文本,就能夠?qū)⑽谋拘畔⑥D(zhuǎn)換成語音信號,控制起來方便方便簡單。SYN6288語音模塊系統(tǒng)圖如圖3-8所示。圖3-8SYN6288語音系統(tǒng)構(gòu)成框圖3.6電源穩(wěn)壓模塊從系統(tǒng)穩(wěn)定性等方面考慮,為了在輸入電壓、負(fù)載、環(huán)境溫度、電路參數(shù)等發(fā)生變化時仍能保持輸出電壓恒定,在本游戲作品設(shè)計中還設(shè)計了電源穩(wěn)壓電路,用于提供穩(wěn)定的直流電源。具體電路設(shè)計如圖3-9所示。圖3-9電源穩(wěn)壓電路4游戲平臺軟件設(shè)計4.1軟件總體設(shè)計和開發(fā)平臺游戲軟件設(shè)計主要完成單片機(jī)控制主模塊的功能,實(shí)現(xiàn)單片機(jī)控制主模塊、顯示電路模塊、鍵盤輸入模塊、語音提示模塊4個模塊的有機(jī)結(jié)合。游戲開始之后,首先由軟件隨機(jī)生成一個數(shù)值,控制顯示電路模塊顯示數(shù)字范圍提示信息,并控制語音提示模塊給游戲用戶播放語音提示信息,用戶通過鍵盤輸入模塊輸入選擇數(shù)值,通過編譯碼功能,單片機(jī)讀取用戶輸入數(shù)值,通過軟件功能進(jìn)行數(shù)據(jù)匹配,并分析出下一個步驟,即進(jìn)行數(shù)字范圍更新或者進(jìn)行數(shù)字爆炸提示。游戲軟件設(shè)計流程如圖4-1所示。圖4-1游戲流程圖游戲軟件采用C語言編寫,使用KEIL4平臺開發(fā),如圖4-2。KEIL軟件具有許多特點(diǎn),操作界面友好,集編譯、編輯、仿真于一體,支持匯編語言和C語言的程序設(shè)計。C語言程序的一般開發(fā)操作步驟為:建立一個新項(xiàng)目project→保存項(xiàng)目→選擇項(xiàng)目單片機(jī)型號→創(chuàng)建C文件→將C文件加入項(xiàng)目→編輯C語言源程序→設(shè)置輸出文件格式→編譯鏈接C語言源程序→運(yùn)行程序。通過反復(fù)的編譯和debug,最終得到可運(yùn)行的C語言程序,將該程序固化在單片機(jī)上即可。圖圖4-2KEIL4軟件4.2數(shù)字范圍更新 當(dāng)游戲用戶選擇的數(shù)字與隨機(jī)生成的數(shù)值吻合時,直接在顯示電路模塊以及語音提示模塊輸出提示信息即可;而當(dāng)數(shù)據(jù)不吻合時,則要根據(jù)原先的數(shù)字范圍、用戶輸入的數(shù)字以及隨機(jī)生成的數(shù)值,生成一個新的數(shù)字范圍。假設(shè)某一時刻游戲原先的數(shù)字范圍為[min,max],設(shè)定的隨機(jī)數(shù)值為random,用戶選擇的數(shù)字為data,其中data和random都在數(shù)字范圍[min,max]內(nèi)。當(dāng)data=random時,直接在顯示電路模塊以及語音提示模塊輸出提示信息。當(dāng)data≠random時,此時進(jìn)行范圍判定:如果data>random,則新的數(shù)字范圍為[min,data];如果data<random,則新的數(shù)字范圍為[data,max]。數(shù)字范圍更新的流程圖如圖4-3所示。圖4-3數(shù)字范圍更新流程圖4.3模塊軟件設(shè)計對于游戲平臺其他三個模塊,在單片機(jī)控制主模塊的程序控制下進(jìn)行工作,則在單片機(jī)對應(yīng)軟件設(shè)計中要對其余三個模塊進(jìn)行編程。其中包括矩陣鍵盤各個鍵位的設(shè)定,即設(shè)定每個鍵位對應(yīng)的信息(1、2、…、9、0);顯示電路模塊的顯示信息,由單片機(jī)控制每個中文提示信息對應(yīng)的液晶顯示點(diǎn)的亮和暗,從而完成提示工作;語音提示功能的播放,由單片機(jī)輸出對應(yīng)的文本信息,通過文本合成得到語音信息,再進(jìn)行語音播放,軟件設(shè)計主要完成其文本信息的輸出編排工作。對于各個模塊的程序設(shè)計源程序見附錄。圖4-4游戲流程圖5結(jié)論社會的不斷進(jìn)步和經(jīng)濟(jì)的快速增長,其優(yōu)點(diǎn)缺點(diǎn)都顯得十分的突?!,F(xiàn)代城市人的幸福感不斷地減少,呼吁著進(jìn)行社會工作以及精神減負(fù)。因此,通過適當(dāng)?shù)挠螒蚧顒痈纳七@種生活狀態(tài)顯得尤為重要。在本論文中設(shè)計的一款游戲作品,為人們在休閑娛樂時間提供娛樂工具(大多用于朋友親人聚會時間)。本設(shè)計以STC89C52單片機(jī)為基礎(chǔ),帶有按鍵及顯示屏的游戲平臺,基于C語言開發(fā)游戲程序,給人們?nèi)粘S螒颍ā皵?shù)字爆炸”游戲)提供方便,改善了游戲過程中的幾個缺陷,使得人們在進(jìn)行該游戲時能夠有更優(yōu)質(zhì)的游戲體驗(yàn)。該設(shè)計成本較低、攜帶方便、功能完善,因此相信會有很大的作用空間。實(shí)驗(yàn)得到結(jié)果為一個完整的游戲作品。開啟電源之后,在液晶顯示屏中提示數(shù)字范圍,按下數(shù)字鍵盤的‘*’鍵,系統(tǒng)將隨機(jī)生成一個爆炸數(shù)值。接下來游戲玩家開始進(jìn)行游戲,玩家在顯示屏提示的數(shù)字范圍內(nèi)選擇一個數(shù)值,通過矩陣鍵盤進(jìn)行輸入,并按下‘D’鍵進(jìn)行確認(rèn),游戲作品通過玩家輸入的數(shù)字進(jìn)行判別,更新數(shù)字范圍或者提示數(shù)字已經(jīng)爆炸。游戲作品完整,過程流暢,語音提示正確,可見實(shí)驗(yàn)已經(jīng)成功。但是,由于本人知識水平的限制,時間和精力也有限,本作品也有一些缺陷,需要在今后進(jìn)一步完善。主要需要進(jìn)行改善的有以下幾個方面:(1)游戲平臺外觀問題,由于設(shè)計只注重作品的核心功能問題,對于其外觀方面沒有進(jìn)行設(shè)計,而對于一款游戲作品而言,其外觀設(shè)計是非常重要的,因此在外觀模型方面需要進(jìn)行改善;(2)游戲平臺語音效果方面略顯粗糙,由于語音模塊限制,不能增加過程音樂和與游戲相響應(yīng)的爆炸聲音,在這方面需要對各種語音功能模塊進(jìn)行進(jìn)一步的探索和研究。(3)游戲平臺不夠穩(wěn)定,在游戲過程中可能會出現(xiàn)一些問題,使得游戲失敗,在這方面需要對該游戲平臺進(jìn)行進(jìn)一步調(diào)試以及改善。對該游戲平臺進(jìn)行進(jìn)一步改善之后,相信該作品能夠得到進(jìn)一步的應(yīng)用。致謝轉(zhuǎn)眼間,大學(xué)四年時間已悄然流逝。四年以來在學(xué)校中,我認(rèn)真學(xué)習(xí)本專業(yè)知識,汲取新知識,不斷向新的未知領(lǐng)域探索,在各個方面也不斷進(jìn)行自我完善,使得自我素質(zhì)有了很大的提升。在此向大學(xué)四年來對我進(jìn)行指導(dǎo)的老師表示感謝,在課程學(xué)習(xí)上,老師們孜孜不倦地對我進(jìn)行指導(dǎo),對于學(xué)習(xí)上的問題總能給于解答,對于我個人的知識學(xué)習(xí)起到了極大的推動作用。在此,更要特別感謝本論文的指導(dǎo)老師周玲副教授對我的悉心指導(dǎo)。在我本人畢業(yè)論文選題時,導(dǎo)師給了我許多的幫助和指導(dǎo),讓我明確自己的方向。在論文撰寫過程中出現(xiàn)的許多專業(yè)性問題,老師也能夠給予我指導(dǎo),讓我接觸自己的迷惑。對于論文修改方面的許多問題,能夠給我許多針對性的建議,讓我清晰地看出論文中出現(xiàn)的問題。隨著論文的順利完成,在此要再一次感謝周玲老師對我的指導(dǎo)。在本畢業(yè)作品的設(shè)計過程以及論文撰寫的過程中,我也得到了許多同學(xué)以及朋友的幫助。對于我不懂的專業(yè)知識,對我進(jìn)行指導(dǎo),讓我能夠快速地掌握該知識點(diǎn),從而能順利完成該作品設(shè)計,以及該論文的撰寫。因此,在此要向?qū)ξ矣兴鶐椭耐瑢W(xué)以及朋友表示衷心的感謝。參考文獻(xiàn)[1]白延敏.《51單片機(jī)典型系統(tǒng)開發(fā)實(shí)例精講》[M].北京:電子工業(yè)出版社,2009[2]于永,戴佳,常江.《51單片機(jī)C語言常用模塊與綜合系統(tǒng)設(shè)計實(shí)例精講》[M].北京:電子工業(yè)出版社,2007[3]戢衛(wèi)平,胡耀輝,朱朝華,葉祥,楊帆.《單片機(jī)系統(tǒng)開發(fā)實(shí)例經(jīng)典》[M].北京:冶金工業(yè)出版社,2006[4]高文煥,劉潤生,電子線路基礎(chǔ)[M],北京高等教育出版社,1997[5]王世昌,電子線路輔導(dǎo)和題選[M],上??茖W(xué)技術(shù)文獻(xiàn)出版社,1999[6]王遠(yuǎn),模擬電子技術(shù)基礎(chǔ)學(xué)習(xí)指導(dǎo)書[M],清華大學(xué)出版社,1998[7]邱關(guān)源,電路(上,下冊)[M],第四版,高等教育出版社。[8]楊文龍,單片機(jī)原理及應(yīng)用[M],西安電子科技大學(xué)出版社,2005.[9]楊將新,李玉華,單片機(jī)程序設(shè)計及應(yīng)用,電子工業(yè)大學(xué)出版社,2006[10]吳金戌,沈慶陽,郭庭吉,單片機(jī)實(shí)踐與應(yīng)用,清華大學(xué)出版社,2002[11]孫涵芳,徐愛卿,單片機(jī)原理及應(yīng)用,北京航空航天大學(xué)出版社,1998[12]DonaldA.Neamen《ElectronicCircuitAnalysisandDesign》[M].北京:清華大學(xué)出版社,2002[13]Author:HankZumbahlen《LinearCircuitDesignHandbook》[M].Publisher:Newnes,2008附錄一單片機(jī)STC89C52主程序#include<reg52.h>#include<math.h>#include<stdio.h>#include"delay.h"#include"lcd.h"#include"keyboard.h"#include<stdlib.h>//包含rand()隨機(jī)函數(shù)的頭文件#defineucharunsignedchar#defineuintunsignedintucharkey,key_num[2],maxa[3],mina[2];ucharflag,t;sbitTTS_BUSY=P2^0;//檢測SYN6288模塊工作狀態(tài)#defineHEAD_LEN5//數(shù)據(jù)包頭的長度#defineLEN_OFFSET2//長度字節(jié)的偏移量(本例中長度不超過255字節(jié),因此只使用1字節(jié)長度)#defineBKM_OFFSET4//背景音樂命令偏移#defineBKM_MAX15 //背景音樂數(shù)量//數(shù)據(jù)包頭(0xFD+2字節(jié)長度+1字節(jié)命令字+1字節(jié)命令參數(shù))codeucharhead[HEAD_LEN]={0xfd,0x00,0x00,0x01,0x00};ucharnBkm=0x00;codecharwelcome[]={"[x1]游戲準(zhǔn)備開始"};#defineMSG_NUM13//消息數(shù),根據(jù)需要自行修改codeuchar*msg[MSG_NUM]={//以下內(nèi)容請自行修改{"到"}, {"爆炸了"}, {"請輸入一個值吧"}};uchartext_out[]={"燈"};uchartext[10]={"范圍是"};ucharnumbuf[10]={"到"};//***********************************************************************//功能函數(shù)//***********************************************************************//延時voidDelay1ms(uintn){uchari=112; while(n--) while(i--);}//串口初始化voidUART_InitBaud(void){ SCON=0xD8;//晶振為11.059MHZ時,設(shè)定串口波特率為9600bit/s,方式3 PCON=0x00; TH1=0xFD; TR1=1; }//串口發(fā)送數(shù)據(jù)voidSendChar(ucharn){ SBUF=n; while(TI==0);//發(fā)送數(shù)據(jù) TI=0; }//背景音樂(參數(shù)為0表示關(guān)閉背景音樂)voidBkMusic(ucharnum){ num%=BKM_MAX+1; nBkm=num;}//發(fā)聲程序voidSpeech(uchar*buf){ uchari=0;//循環(huán)計數(shù)變量 ucharxor=0x00;//校驗(yàn)碼初始化 ucharch=0x00;ucharlen=0x00;while(buf[len++]); //發(fā)送數(shù)據(jù)包頭(0xFD+2字節(jié)長度+1字節(jié)命令字+1字節(jié)命令參數(shù)) for(i=0;i<HEAD_LEN;i++) { if(i==BKM_OFFSET) ch=nBkm<<3;//寫入背景音樂 elseif(i==LEN_OFFSET) ch=len+3; else ch=head[i]; xor^=ch; SendChar(ch); Delay1ms(1); } //發(fā)送文字內(nèi)容 for(i=0;i<len;i++) { xor^=buf[i]; SendChar(buf[i]); Delay1ms(1); } SendChar(xor);//發(fā)送校驗(yàn)位 Delay1ms(10); while(TTS_BUSY); //等待語音結(jié)束 Delay1ms(10);}voidmain(){ intmin=0,max=100;ucharrandom=0,i=0,j=0,num,aa,x=0; t=10; TMOD=0x22;//設(shè)置定時器0為工作方式 TH0=7;//裝初值 TL0=7; EA=1; EX0=1; IT0=1; ET0=1;//開定時器0中斷 TR0=1;//啟動定時0 LCD_init();//初始化TFT屏幕 LCD_clear(7);//清屏(白色背景)UART_InitBaud(); Delay1ms(200); BkMusic(4);//背景音樂4Delay1ms(200); Speech(welcome);//歡迎詞 Sp BkMusic(0);//關(guān)閉背景音樂Delay1ms(1000); while(1) { mina[0]=min/10; mina[1]=min%10; maxa[0]=max/100; maxa[1]=max%100/10; maxa[2]=max%10; ChineseChar(7,35,1,colors[2],colors[7],1);//請 ChineseChar(23,35,1,colors[2],colors[7],2);//在 display(40,35,colors[0],colors[7],mina[0]); display(50,35,colors[0],colors[7],mina[1]); ChineseChar(59,35,1,colors[2],colors[7],3);//到 display(73,35,colors[0],colors[7],maxa[0]); display(83,35,colors[0],colors[7],maxa[1]); display(93,35,colors[0],colors[7],maxa[2]); ChineseChar(105,35,1,colors[2],colors[7],4);//之 ChineseChar(7,55,1,colors[2],colors[7],5);//間 ChineseChar(23,55,1,colors[2],colors[7],6);//輸 ChineseChar(39,55,1,colors[2],colors[7],7);//入 ChineseChar(55,55,1,colors[2],colors[7],8);//一 ChineseChar(71,55,1,colors[2],colors[7],9);//個 ChineseChar(87,55,1,colors[2],colors[7],10);//數(shù) LCD_ShowChar(103,55,colors[2],colors[7],0x3a);//:aa=keyscan();//掃描鍵盤 key=aa; if(flag) { flag=0;//清標(biāo)志位 if(key<10) { if(j<2) { key_num[j]=key; display(50+x,75,colors[0],colors[7],key_num[j]); x=x+10; } else { Speech(text_out); } j++; } if(key==11) { j=0; num=10*key_num[0]+key_num[1]; if((num>max)||(num<min)) { Speech(text_out); } else { if(num>random) max=num; if(num<random) min=num; if(num!=random) { sprintf(text+6,"%d",min); sprintf(numbuf+6,"%d",max); Speech(text); Speech(numbuf); } if(num==random) { ChineseChar(45,95,1,colors[2],colors[7],11);//中 ChineseChar(61,95,1,colors[2],colors[7],12);//獎 ChineseChar(77,95,1,colors[2],colors[7],13);//了 Speech(msg[1]); delay(800); ChineseChar(45,95,1,colors[2],colors[7],14);// ChineseChar(61,95,1,colors[2],colors[7],14);// ChineseChar(77,95,1,colors[2],colors[7],14);// srand(t);//隨機(jī)數(shù)初始化 random=(char)(rand()%100);//取隨機(jī)數(shù)(0~99) min=0; max=100; } } x=0; key_num[0]=0; key_num[1]=0; display(50,75,colors[0],colors[7],0); display(60,75,colors[0],colors[7],0); } if(key==10) { j=0; key_num[0]=0; key_num[1]=0; x=0; display(50,75,colors[0],colors[7],0); display(60,75,colors[0],colors[7],0); } if(key==12) { j=0; display(50,75,colors[0],colors[7],0); display(60,75,colors[0],colors[7],0); if(random==0) { srand(t);//隨機(jī)數(shù)初始化 random=(char)(rand()%100);//取隨機(jī)數(shù)(0~99) } Speech(msg[2]); } } }}voidtime0()interrupt1//定時器0中斷隨機(jī)數(shù)值{t++;//時間加1if(t==100)t=0;}voidexter0()interrupt0//按鍵外部中斷{ flag=1; } 附錄二TFTLCD顯示程序/**********************************************************頭文件file:Lcd.h**********************************************************/#defineucharunsignedchar#defineuintunsignedint#defineTYPE_LCD_DATA 1#defineTYPE_LCD_COMMAND 0#defineLCD_SIZE_X 128#defineLCD_SIZE_Y 160#defineDATAP0sbitLCD_RST=P2^7;//RST引腳定義sbitLCD_RD=P3^2; //RD引腳定義sbitLCD_WR=P3^3; //WR引腳定義sbitLCD_RS=P2^5; //RS引腳定義sbitLCD_CS=P2^6; //CS引腳定義externuintcolors[];externvoiddelay_ms(uintms);externvoidLCD_Write(uchartype,uintvalue);externvoidLCD_SendData8(ucharvalue);externvoidLCD_Wirte_Data16(uintvalue);externvoidReg_Write(uintreg,uintvalue);externvoidLCD_SetRamAddr(uintxStart,uintxEnd,uintyStart,uintyEnd);externvoidLCD_init(void);externvoidpic_play(uintxStart,uintxEnd,uintyStart,uintyEnd,constuchar*P);externvoidLCD_clear(ucharn);externvoidLCD_color();externvoidLCD_color_H();externvoidLCD_color_V();externvoidLCD_ShowChar(ucharx,uchary,uintFor_color,uintBk_color,charch);externvoidLCD_ShowString(ucharx,uchary,uintFor_color,uintBk_color,char*p);externvoidChineseChar(uintx,uinty,intsize,uintFor_color,uintBk_color,charc);externvoiddisplay(ucharx,uchary,uintFor_color,uintBk_color,uchardat);/*********************************************************** ** 彩屏驅(qū)動程序 ** ***********************************************************/#include<reg52.h>#include"Lcd.h"#include"char.h"#include"chinese.h"uintcolors[]={ 0xf800,//紅 0x07e0,//綠 0x001f,//藍(lán) 0xffe0,//黃 0x0000,//黑 0x07ff,//淺藍(lán) 0xf81f,//粉紅 0xffff//白};/**********************************************************延時子函數(shù)**********************************************************/voiddelay_ms(uintms){unsignedchark;while(ms--){for(k=0;k<228;k++);}}/**********************************************************寫命令與數(shù)據(jù)子函數(shù)**********************************************************/voidLCD_Write(uchartype,uintvalue){ LCD_CS=0; LCD_RS =type; //0:command1:data LCD_WR=0; DATA =(uchar)value;; LCD_WR =1; LCD_CS=1;}/**********************************************************寫8位數(shù)據(jù)子函數(shù)**********************************************************//*voidLCD_Write_Data8(ucharvalue)//colordata{ LCD_CS=0; LCD_RS =1; LCD_WR=0; DATA =value; LCD_WR=1; LCD_CS=1;}*//**********************************************************寫16位數(shù)據(jù)子函數(shù)**********************************************************/voidLCD_Wirte_Data16(uintvalue)//colordata{ LCD_CS=0;LCD_RS =1; LCD_WR=0; DATA =(uchar)value; LCD_WR=1; LCD_WR=0; DATA =(uchar)(value>>8) ; LCD_WR =1; LCD_CS=1;}/*********************************************************寫寄存器子函數(shù)**********************************************************/voidReg_Write(uintreg,uintvalue){LCD_Write(TYPE_LCD_COMMAND,reg);LCD_Write(TYPE_LCD_DATA,value);}/**********************************************************設(shè)置顯示窗口子函數(shù)**********************************************************/voidLCD_SetRamAddr(uintxStart,uintxEnd,uintyStart,uintyEnd){uintVerPos,HorPos,StartAddr;HorPos=(uint)(xStart|(xEnd<<8));VerPos=(uint)(yStart|(yEnd<<8));StartAddr=(uint)(xStart|(yStart<<8));Reg_Write(0x09,xStart);Reg_Write(0x10,yStart);Reg_Write(0x11,xEnd);Reg_Write(0x12,yEnd);Reg_Write(0x18,xStart); Reg_Write(0x19,yStart);LCD_Write(TYPE_LCD_COMMAND,0x22); //0x22}/**********************************************************/voidLCD_init(void){ uintnum; Reg_Write(0x0001,0x0002); //MODE_SEL1 Reg_Write(0x0002,0x0012);//MODE_SEL2 Reg_Write(0x0003,0x0000);//MODE_SEL3 Reg_Write(0x0004,0x0010); //MODE_SEL3 LCD_SetRamAddr(0,127,0,159); for(num=20480;num>0;num--) LCD_Wirte_Data16(0xffff); Reg_Write(0x0005,0x0008);//VCO_MODE Reg_Write(0x0007,0x007f); //VCOMHT_CTRL Reg_Write(0x0008,0x0017);//VCOMLT_CTRL Reg_Write(0x0009,0x0000);//writeSRAMwindowstartXpoint Reg_Write(0x0010,0x0000);//writeSRAMwindowstartypoint Reg_Write(0x0011,0x0083);//writeSRAMwindowendxpoint Reg_Write(0x0012,0x009f);//writeSRAMwindowendypoint Reg_Write(0x0017,0x0000);//SRAMcontrl Reg_Write(0x0018,0x0000);//SRAMxposition Reg_Write(0x0019,0x0000);//SRAMyposition Reg_Write(0x0006,0x00c5);//DAC_OP_CTRL2 delay_ms(10);//延時}/**********************************************************清屏子函數(shù)**********************************************************/voidLCD_clear(ucharn){uintnum;LCD_SetRamAddr(0,127,0,159);for(num=20480;num>0;num--)//160*128=20480{LCD_Wirte_Data16(colors[n]);}}/**********************************************************字符顯示子函數(shù)**********************************************************/voidLCD_ShowChar(ucharx,uchary,uintFor_color,uintBk_color,charch){uchartemp;ucharpos,t;ucharCHAR_W,CHAR_H;CHAR_W=8;//8*16CHAR_H=16;if(x>(LCD_SIZE_X-CHAR_W)||y>(LCD_SIZE_Y-CHAR_H))return;LCD_SetRamAddr(x,x+CHAR_W-1,y,y+CHAR_H-1);ch=ch-32;//按照ASCII編碼順序的到相應(yīng)字母的編碼for(pos=0;pos<CHAR_H;pos++){temp=Font8x16[ch][pos];for(t=0;t<CHAR_W;t++){ if(temp&0x80) LCD_Wirte_Data16(For_color);//textcolor else LCD_Wirte_Data16(Bk_color);//backcolortemp<<=1;} }}/**********************************************************顯示字符串子函數(shù)x,y:起點(diǎn)坐標(biāo)*p:字符串起始地址**********************************************************//*voidLCD_ShowString(ucharx,uchary,uintFor_color,uintBk_color,char*p){while(*p!='\0'){LCD_ShowChar(x,y,For_color,Bk_color,*p);x+=8;p++;}}/**********************************************************寫漢字子函數(shù)**********************************************************/voidChineseChar(uintx,uinty,intsize,uintFor_color,uintBk_color,charc){inte=0,i,j;inted;uintncols;uintnrows;uintnbytes;uchar*pfont;uchar*pchar;uchar*fonttable[]={(uchar*)hz12,(uchar*)hz16,(uchar*)hz24};pfont=(uchar*)fonttable[siz

溫馨提示

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

最新文檔

評論

0/150

提交評論