版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
[5].。本次程序代碼都是用C語言編寫的,值得注意的是在編寫LCD12864顯示軟件代碼之前必須要先掌握漢字取模的方法。要得到需要的文字或圖形,可以借助取模軟件來完成。軟件編譯主要步驟:(1)第一步,下載keiluVision4后打開,在Project里面找到創(chuàng)建新工程,選中創(chuàng)建來創(chuàng)建一個新的工程文件,將其命名,最后點(diǎn)擊Save按鈕以保存。新項目保存后,選擇使用的單片機(jī)型號。(2)建立一個新項目之后,接下來就是新程序和各種文件,在保存了程序文件之后,需要在項目中添加這些文件。(3)此時可進(jìn)行源程序編寫,此次編程采用c語言進(jìn)行編寫,程序代碼依照需要的各個功能和順序編寫完成后就可以進(jìn)行程序編譯和模擬。接著可以翻譯所有的源文件并通過單擊工具欄圖標(biāo)BuildTarget生成應(yīng)用程序。KeiluVision4在Build應(yīng)用出現(xiàn)語法錯誤時,OutputWindow-Build界面上就會提示存在Error或者Warning,當(dāng)顯示“0Error0Warning”時,代表所編寫的程序沒有語法和邏輯上的錯誤,可以進(jìn)行編譯并生成hex文件了。如果存在有錯誤的語法和代碼,系統(tǒng)也會準(zhǔn)確給予提式,找到有錯誤或者預(yù)警的程序代碼,雙擊錯誤的部分,軟件就可以自動定位到出錯的位置,就可以檢查并且改正對應(yīng)的語法錯誤或者拼寫錯誤。KeiluVision4將在編輯器窗口中,點(diǎn)擊該行,打開源文件,系統(tǒng)會自動定位到對應(yīng)的地方。在軟件成功生成程序后,調(diào)試的工作就可以正式進(jìn)行了。(4)當(dāng)調(diào)試完成沒有問題后,系統(tǒng)就會生成對應(yīng)的以HEX為后綴的文件,將文件下載到EPROM編程器。HEX文件可以直接燒錄進(jìn)單片機(jī)。最后將程序使用專門的燒錄軟件stc-isp和燒錄器燒錄進(jìn)單片機(jī)。圖4-3KeiluVision4界面圖4-3KeiluVision4界面第5章調(diào)試的步驟及調(diào)試過程中出現(xiàn)的問題以及解決方法5.1PROTEUS仿真程序軟件編譯器使用的是keiluVision4。單片機(jī)程序編寫完之后,沒有問題就可以使用Proteus進(jìn)行仿真。之前已經(jīng)先使用keiluVision4編寫好了程序代碼并且生成了單片機(jī)可以識別的hex文件。接下來就可以使用Proteus進(jìn)行畫圖了,首先選擇左的主菜單欄中的第一項File,在下拉菜單中選擇NewDesign,建立后就可以繪制電路了。在搜索欄中搜索需要用到的元器件,首先是找到單片機(jī),之后就開始找到各種元器件,并且按照電路圖布局和連線。最后先在Proteus上畫完硬件電路后就開始仿真。硬件電路圖畫完之后點(diǎn)擊單片機(jī),在彈出的窗口里選擇之前用keiluVision4編譯生成帶hex后綴的文件加載進(jìn)去,就可開始仿真,接下來就是等待仿真結(jié)束,當(dāng)提示ANALYSERERRORS時,說明出錯了,要認(rèn)真檢查電路圖排除一切出錯的地方,仿真才能成功。本系統(tǒng)的設(shè)計為貪吃蛇游戲控制系統(tǒng),模塊分別有按鍵模塊、單片機(jī)、時鐘控制模塊、LCD12864顯示模塊、蛇運(yùn)動控制模塊、游戲控制模塊。主要功能都是通過LCD12864屏幕來顯示。本設(shè)計仿真測試圖如圖5-1所示。圖5-1仿真測試圖圖5-1仿真測試圖5.2硬件安裝首先是需要的元器件,本次實(shí)物制作需要的原件清單如下表:序號名稱數(shù)量19*15板子12STC89C52單片機(jī)1312864顯示屏1420P排針1520P排母16103排阻1740腳IC座1810UF電容1930PF電容21010K電阻111103電位器(臥式)112小按鍵113自鎖開關(guān)114DC插口1154P排針116喇叭11712.000晶振118大按鍵619USB電源線或電池盒120錫絲若干21導(dǎo)線若干軟件調(diào)試及Proteus仿真都正常,接下來就是硬件的制作。此次硬件的制作選擇了用萬用板進(jìn)行焊接,之所以沒有使用覆銅板,主要原因是這次制作因?yàn)楦鞣N外部條件的不允許,沒有支持刻板腐蝕等步驟的機(jī)器,所以最終確定使用萬用板制作。首先就是線路的布局,如何在一塊萬用板上在不影響美觀的條件下將各個元器件按電路圖連接起來。一開始我先用畫好布局的圖紙,盡量把每根需要連接的線路做到最簡化。在做完這些步驟后就可以開始用電烙鐵進(jìn)行焊接。焊接時要先確認(rèn)好晶振、揚(yáng)聲器等元器件的正負(fù)極,在電池和USB中我選擇了更方便的usb接口,作用是提供5V電壓,用來給單片機(jī)供電。下面就是運(yùn)用我們實(shí)訓(xùn)課上學(xué)到的焊接的知識進(jìn)行焊接了,焊接前先選擇焊錫絲的粗細(xì),在使用電烙鐵安裝時應(yīng)考慮受熱、穩(wěn)固等因素。例如在用電烙鐵時不能太隨意,時間焊短了,錫絲沒有全部熔掉,就會造成“虛焊”的情況,但是焊接時間又不能過長,不然可能會燒壞電路或者元件。焊的時候基本1秒鐘焊一個,就算沒焊好,也要等一會兒再焊。元器件中多出來的鐵絲也要整齊剪掉,芯片的擺放提前布置好,不要影響到后續(xù)的連線工作。連線時要注意導(dǎo)線的長短,還有要嚴(yán)格按照事先準(zhǔn)備好的電路圖接線,注意單片機(jī)的每一個引腳,電焊時要注意不要燒到單片機(jī)和電路。焊接時單片機(jī)芯片先不要插入,等接好線后再插入,否則可能燒壞芯片引腳。每焊好一個模塊,就要用萬能表檢查線路,確定沒有接錯、短路等現(xiàn)象,確認(rèn)無誤后才能接著焊接。焊錫時只要控制好時間,就不會出現(xiàn)燒糊燒壞的情況。最后焊接完成后,測試后可實(shí)現(xiàn)功能。結(jié)論本設(shè)計是通過LCD12864進(jìn)行顯示的基于單片機(jī)的貪吃蛇游戲機(jī)。本文介紹了硬件電路,軟件設(shè)計及調(diào)試以及仿真設(shè)計,軟件上在使用keil軟件的基礎(chǔ)上用C語言進(jìn)行了編程,又對軟件算法進(jìn)行了優(yōu)化,使整個程序簡單、精煉,并對該搭建好的電路進(jìn)行了Proteus仿真,實(shí)物制作成功,功能可以實(shí)現(xiàn)。硬件上通過使用STC89C52單片機(jī)和LCD12864顯示系統(tǒng)搭建硬件電路,對一款貪吃蛇游戲的設(shè)計進(jìn)行了介紹,硬件電路不算復(fù)雜,使用單片機(jī)最小系統(tǒng)加顯示屏和按鍵就可實(shí)現(xiàn)基本游戲功能,為了添加趣味性還使用揚(yáng)聲器加入了音效。我在程序編寫和調(diào)試程序過程中也出現(xiàn)了不少的問題,在經(jīng)過對程序的修改和調(diào)試后,最終得以成功完成設(shè)計內(nèi)容。由于外部條件和個人能力有限,還有許多功能可以在此基礎(chǔ)上擴(kuò)充。但通過這個設(shè)計,我切實(shí)的接觸并實(shí)驗(yàn)了單片機(jī)和編程語言的使用,在個人知識面上也有更大的拓寬,希望接下來能夠更繼續(xù)深入學(xué)習(xí)。通過此次設(shè)計,使我在單片機(jī)語言的基礎(chǔ)上更熟練地使用它并加深了對單片機(jī)語言模塊化程序設(shè)計的理解。設(shè)計的過程也是學(xué)習(xí)的過程,此次設(shè)計讓我對語言程序和單片機(jī)有了深入的學(xué)習(xí)了解。對編程和仿真也學(xué)習(xí)到了更多并且更加熟練,也讓我對大學(xué)學(xué)習(xí)的知識有了更深入的研究。在本次設(shè)計結(jié)束的同時,衷心感謝老師的精心指導(dǎo)和幫助。附錄附錄1原理圖附錄2主要源程序代碼#include"reg52.h"#include"Lcd12864.h"#include"Key.h"#defineucharunsignedchar#defineuintunsignedintstaticunsignedlongSeed=1;#defineA48271L#defineM2147483647L#defineQ(M/A)#defineR(M%A)ucharflag_1=0;sbitkkk=P3^6;//sbitkk=P3^6;/************************************偽隨機(jī)數(shù)發(fā)生器*************************************/doubleRandom(void){ longTmpSeed; TmpSeed=A*(Seed%Q)-R*(Seed/Q); if(TmpSeed>=0) Seed=TmpSeed; else Seed=TmpSeed+M; return(double)Seed/M;}/**************************************為偽隨機(jī)數(shù)發(fā)生器播種***************************************/voidInitRandom(unsignedlongInitVal){ Seed=InitVal;}//延時子程序voiddelay(unsignedintt){ unsignedinti,j; for(i=0;i<t;i++) for(j=0;j<10;j++);}/*********************************初始化MPU**********************************/voidInitCpu(void){ TMOD=0x0; TH0=0; TL0=0; TR0=1; ET0=1; EA=1;}#defineN25structFood{ unsignedcharx; unsignedchary; unsignedcharyes;}food;//食物結(jié)構(gòu)體structSnake{ unsignedcharx[N]; unsignedchary[N]; unsignedcharnode; unsignedchardirection; unsignedcharlife;}snake;//蛇結(jié)構(gòu)體unsignedcharFlag=0;unsignedcharScore=0;unsignedcharSpeed=5;unsignedcharKeyBuffer=0;#defineFUNC1#defineUP2#defineDOWN3#defineLEFT4#defineRIGHT5#definePASSSCORE20//預(yù)定義過關(guān)成績voidTimer0Int(void)interrupt1{ switch(OSReadKey()) { case9: KeyBuffer=FUNC; /*if(++Speed>=10) Speed=1; Flag|=1<<1;//速度變化標(biāo)志置1*/ break; case13: KeyBuffer=DOWN; /*if(snake.direction!=2) snake.direction=1;*/ break; case17: KeyBuffer=UP; /*if(snake.direction!=1) snake.direction=2;*/ break; case21: KeyBuffer=RIGHT; /*if(snake.direction!=4) snake.direction=3;*/ break; case25: KeyBuffer=LEFT; /*if(snake.direction!=3) snake.direction=4;*/ break; default: break; } if(kkk==0) { delay(5); if(kkk==0) { flag_1=1; } }}/******************************畫墻壁,初始化界面*******************************/voidDrawBoard(void){ unsignedcharn; for(n=0;n<31;n++) { Lcd_Rectangle(3*n,0,3*n+2,2,1); Lcd_Rectangle(3*n,60,3*n+2,62,1); } for(n=0;n<21;n++) { Lcd_Rectangle(0,3*n,2,3*n+2,1); Lcd_Rectangle(90,3*n,92,3*n+2,1); } Lcd_HoriLine(93,31,35,1); Lcd_HoriLine(93,63,35,1);}/***************************打印成績****************************/voidPrintScore(void){ unsignedcharStr[3]; Lcd_WriteStr(6,0,"成績"); Str[0]=(Score/10)|0x30;//十位 Str[1]=(Score%10)|0x30;//個位 Str[2]=0; Lcd_WriteStr(7,1,Str);}/********************************打印速度級別*********************************/voidPrintSpeed(void){ unsignedcharStr[2]; Lcd_WriteStr(6,2,"級別"); Str[0]=Speed|0x30; Str[1]=0; Lcd_WriteStr(7,3,Str);}/***********************************游戲結(jié)束處理************************************/voidGameOver(void){ unsignedcharn; Lcd_Rectangle(food.x,food.y,food.x+2,food.y+2,0);//消隱出食物 for(n=1;n<snake.node;n++) { Lcd_Rectangle(snake.x[n],snake.y[n],snake.x[n]+2,snake.y[n]+2,0);//消隱食物,蛇頭已到墻壁內(nèi),故不用消去 } if(snake.life==0)//如果蛇還活著 Lcd_WriteStr(2,1,"勝利"); else//如果蛇死了 Lcd_WriteStr(2,1,"輸了"); Lcd_WriteStr(1,2,"游戲輸了");}/********************************游戲的具體過程,也是貪吃蛇算法的關(guān)鍵部分*********************************/voidGamePlay(void){ unsignedcharn; InitRandom(TL0); food.yes=1;//1表示需要出現(xiàn)新事物,0表示已經(jīng)存在食物尚未吃掉 snake.life=0;//表示蛇還活著 snake.direction=DOWN; snake.x[0]=6;snake.y[0]=6; snake.x[1]=3;snake.y[1]=6; snake.node=3; PrintScore(); PrintSpeed(); while(1) { if(food.yes==1) { while(1) { food.x=Random()*85+3; food.y=Random()*55+3;//獲得隨機(jī)數(shù) while(food.x%3!=0) food.x++; while(food.y%3!=0) food.y++; for(n=0;n<snake.node;n++)//判斷產(chǎn)生的食物坐標(biāo)是否和蛇身重合 { if((food.x==snake.x[n])&&(food.y==snake.y[n])) break; } if(n==snake.node) { food.yes=0; break;//產(chǎn)生有效的食物坐標(biāo) } } } if(food.yes==0) { Lcd_Rectangle(food.x,food.y,food.x+2,food.y+2,1); } for(n=snake.node-1;n>0;n--) { snake.x[n]=snake.x[n-1]; snake.y[n]=snake.y[n-1]; } switch(snake.direction) { caseDOWN:snake.x[0]+=3;break; caseUP:snake.x[0]-=3;break; caseRIGHT:snake.y[0]-=3;break; caseLEFT:snake.y[0]+=3;break; default:break; } for(n=3;n<snake.node;n++)//從第三節(jié)開始判斷蛇頭是否咬到自己 { if(snake.x[n]==snake.x[0]&&snake.y[n]==snake.y[0]) { GameOver(); snake.life=1; break; } } if(snake.x[0]<3||snake.x[0]>=90||snake.y[0]<3||snake.y[0]>=60)//判蛇頭是否撞到墻壁 { GameOver(); snake.life=1; } if(snake.life==1) break;//蛇死,則跳出while(1)循環(huán) if(snake.x[0]==food.x&&snake.y[0]==food.y)//判蛇是否吃到食物 { Lcd_Rectangle(food.x,food.y,food.x+2,food.y+2,0);//消隱食物 snake.x[snake.node]=200; snake.y[snake.node]=200;//產(chǎn)生蛇新的節(jié)坐標(biāo)先放在看不見的位置 snake.node++;//蛇節(jié)數(shù)加1 food.yes=1;//食物標(biāo)志置1 if(++Score>=PASSSCORE) { PrintScore(); GameOver(); break; } PrintScore(); } for(n=0;n<snake.node;n++) { Lcd_Rectangle(snake.x[n],snake.y[n],snake.x[n]+2,snake.y[n]+2,1); }//根據(jù)蛇的節(jié)數(shù)畫出蛇 delay(Speed*1000); Lcd_Rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+2,snake.y[snake.node-1]+2,0); switch(KeyBuffer) { caseFUNC: KeyBuffer=0; if(++Speed>=10) Speed=1; PrintSpeed(); break; caseDOWN: KeyBuffer=0; if(snake.direction!=UP) snake.direction=DOWN; break; caseUP: KeyBuffer=0; if(snake.direction!=DOWN) snake.direction=UP; break; caseRIGHT: KeyBuffer=0; if(snake.direction!=LEFT) snake.direction=RIGHT; break; caseLEFT: KeyBuffer=0; if(snake.direction!=RIGHT) snake.direction=LEFT; break; default: break; } }//結(jié)束while(1)}voidmain(){ InitCpu();//初始化CPU Lcd_Reset();//初始化LCD屏 Lcd_Clear(0);//清屏 while(1) { if(flag_1==0) { Lcd_WriteStr(1,1,"貪吃蛇"); Lcd_WriteStr(1,2,"Hello,NCU"); DrawBoard();//畫界面 PrintScore(); PrintSpeed(); } if(flag_1==1) { Lcd_WriteStr(1,1,""); Lcd_WriteStr(1,2,""); GamePlay();//玩游戲 GameOver();//游戲結(jié)束 while(1);//重啟 }參考文獻(xiàn)易麗華.“看門狗”技術(shù)的實(shí)現(xiàn)[J].儀表技術(shù),2011(07):55-57.張仙妮
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版幼兒園連鎖經(jīng)營承包管理服務(wù)合同3篇
- 二零二五年股權(quán)融資合同聚焦新能源領(lǐng)域3篇
- 2025年數(shù)據(jù)中心物業(yè)承包經(jīng)營合同模板3篇
- 2024版商用建筑項目合作合同精簡版版B版
- 二零二五版旅游項目投資擔(dān)保合同3篇
- 二零二五年度5合作社信用借款合同2篇
- 二零二五年度工地施工人員健康監(jiān)測與管理合同3篇
- 二零二五年度贈與合同贈品清單2篇
- 二零二五年度快遞派送與快遞員福利待遇合同樣本3篇
- 2025年度13價肺炎疫苗全球市場推廣戰(zhàn)略合作合同3篇
- GB/T 4008-2024錳硅合金
- 2024急性腦梗死溶栓規(guī)范診治指南(附缺血性腦卒中急診急救專家共識總結(jié)歸納表格)
- 個人替公司代付協(xié)議
- FZ∕T 73037-2019 針織運(yùn)動襪行業(yè)標(biāo)準(zhǔn)
- 廢舊纖維回收和再利用策略
- 生產(chǎn)計劃應(yīng)急預(yù)案
- 再生資源回收體系建設(shè)實(shí)施方案
- 人才座談會主持詞經(jīng)典版(四篇)
- 防暴反恐設(shè)施配置
- 危重病人入院流程課件
- 康養(yǎng)酒店可行性方案
評論
0/150
提交評論