




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于51單片機(jī)與8*8點(diǎn)陣的貪吃蛇游戲機(jī)開(kāi)發(fā)12目錄物理與信息科學(xué)學(xué)院一、硬件設(shè)計(jì)1、8*8LED點(diǎn)陣的原理說(shuō)明本設(shè)計(jì)采用的點(diǎn)陣顯示模塊是ARK-SZ411288K,其原理結(jié)構(gòu)圖如圖1所示。ARK-SZ411288K顯示模塊是8*8點(diǎn)陣的顯示模塊,從圖1中可以看出,8*8點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對(duì)應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的 圖1 8*8LED點(diǎn)陣的原理圖二極管就亮。ARK-SZ411288K可與CPU直接連接,根據(jù)引腳說(shuō)明,將其各個(gè)引腳與相應(yīng)的I/O口連接。2、LED陣列驅(qū)動(dòng)電路正向點(diǎn)亮一顆LED,至少也得1020毫安,
2、若電流不夠大,則LED不夠亮。而不管是8051的輸入/輸出口,還是TTL、CMOS的輸出端,其高態(tài)輸出電流都不是很高,不過(guò)12毫安而已,因此,很難直接高態(tài)驅(qū)動(dòng)LED。這時(shí)候就需要額外的驅(qū)動(dòng)電路,本設(shè)計(jì)采用的是74HC595,用74HC595芯片驅(qū)動(dòng)LED有以下特點(diǎn):速度較快,功耗較小,LED的數(shù)目多少隨意,既可以控制共陰極的LED顯示器,也可以控制共陽(yáng)極的LED顯示器,可以軟件控制LED的亮度,還可以在必要的時(shí)候關(guān)斷顯示 (數(shù)據(jù)保留),以減小功耗,并可隨時(shí)喚醒顯示。用它設(shè)計(jì)的電路,不僅軟硬件設(shè)計(jì)簡(jiǎn)單,而且功耗低,驅(qū)動(dòng)能力強(qiáng),占用的I/O口線較少,是一種造價(jià)低廉,應(yīng)用靈活的設(shè)計(jì)方案。圖2 74H
3、C595管腳圖74HC595內(nèi)含8位串入、串/并出移位寄存器和8位三態(tài)輸出鎖存器。寄存器和鎖存器分別有各自的時(shí)鐘輸入(SCLK和SLCK),都是上升沿有效。當(dāng)SCLK從低到高電平跳變時(shí),串行輸入數(shù)據(jù)(SDA)移入寄存器;當(dāng)SLCK從低到高電平跳變時(shí),寄存器的數(shù)據(jù)置入鎖存器。清除端(CLR) 的低電平只對(duì)寄存器復(fù)位(QS為低電平),而對(duì)鎖存器無(wú)影響。當(dāng)輸出允許控制(EN)為高電平時(shí), 并行輸出(Q0Q7)為高阻態(tài),而串行輸出(QS)不受影響。74HC595最多需要5根控制線,即SDA、SCLK、SLCK、CLR和EN。其中CLR可以直接接到高電平,用軟件來(lái)實(shí)現(xiàn)寄存器清零;如果不需要軟件改變亮度,
4、EN可以直接接到低電平,而用硬件來(lái)改變亮度。把其余三根線和單片機(jī)的I/O口相接,即可實(shí)現(xiàn)對(duì)LED的控制。數(shù)據(jù)SDA口送入74HC595,在每個(gè)SCLK的上升沿,SDA口上的數(shù)據(jù)移入寄存器,在 SCLK的第9個(gè)上升沿,數(shù)據(jù)開(kāi)始從QS移出。如果把第一個(gè)74HC595的QS和第二個(gè)74HC595的SDA 相接,數(shù)據(jù)即移入第二個(gè)74HC595中,照此一個(gè)一個(gè)接下去,可接任意多個(gè)。數(shù)據(jù)全部送完后,給SLCK一個(gè)上升沿,寄存器中的數(shù)據(jù)即置入鎖存器。此時(shí)如果EN為低電平,數(shù)據(jù)即從并口Q0Q7輸出,把Q0Q7與LED的8段相接,LED就可以實(shí)現(xiàn)顯示了。要想軟件改變LED的亮度,只需改變EN的占空比就行了1。二
5、、軟件設(shè)計(jì)1、主程序工作流程主程序工作流程如圖3所示,系統(tǒng)上電后首先對(duì)LED進(jìn)行初始化,接著對(duì)定時(shí)器初始化,并啟動(dòng)定時(shí)器,接著執(zhí)行程序主體邏輯,程序主體邏輯執(zhí)行一遍后檢查是否有中斷發(fā)生。中斷源有兩個(gè),一個(gè)是驅(qū)動(dòng)貪吃蛇自動(dòng)前行的定時(shí)中斷,另一個(gè)是用戶控制貪吃蛇移動(dòng)方向的鍵盤(pán)中斷,任意中斷的到來(lái)都將改變貪吃蛇的當(dāng)前狀態(tài)。若當(dāng)前沒(méi)有中斷發(fā)生,主程序繼續(xù)判斷蛇頭是否碰壁或頭尾相撞,若是,結(jié)束游戲,否則繼續(xù)執(zhí)行程序主體循環(huán)。圖3 主程序工作流程2、LED點(diǎn)陣初始化對(duì)點(diǎn)陣初始化,先把點(diǎn)陣所有的信息清空,讓其不顯示任何信息,再在指定的位置顯示蛇所處的最初位置和第一個(gè)果實(shí)的位置。初始化程序如下:void In
6、it()for (i = 3; i SNAKE + 1; i+)/SNAKE是蛇的最大長(zhǎng)度xi = 100;for (i = 3; i SNAKE + 1; i+)yi = 100;/初始化x0 = 4; y0 = 4; /果子 n = 3; /蛇長(zhǎng) n=-1x1 = 1; y1 = 0; /蛇頭x2 = 0; y2 = 0; /蛇尾1addx = 0; addy = 0; /位移偏移3、貪吃蛇的移動(dòng)當(dāng)蛇沒(méi)有吃到任何食物時(shí),每次步進(jìn)蛇頭的將要到的下一個(gè)LED燈點(diǎn)亮,而蛇尾那個(gè)LED燈會(huì)滅掉,程序設(shè)計(jì)時(shí)只要將蛇尾那點(diǎn)位置的值傳給蛇頭下一個(gè)位置的值,再改變蛇尾的值即可。而蛇頭下一個(gè)位置根據(jù)蛇頭和偏
7、移量來(lái)確定,每次上下左右按鍵決定了蛇步進(jìn)的偏移量,只要將蛇頭的位置加上偏移量的值即得到新的蛇頭位置。當(dāng)蛇頭碰到四周的墻壁或者碰到自己的身體,小蛇就立即斃命并結(jié)束游戲。4、食物的隨機(jī)出現(xiàn)食物的出現(xiàn)是一種隨機(jī)行為,所以必須做一個(gè)隨機(jī)數(shù),而且食物出現(xiàn)的位置不能與蛇的位置相同,也不能超出墻外,否則就要重置食物。這里使用程序中的定時(shí)計(jì)數(shù)器的低八位 TL0的數(shù)值,由于TL0不斷變化,不同的時(shí)間點(diǎn)數(shù)值不同,我這里使用的是C+語(yǔ)言里的stdlib.h文件庫(kù),使用里面的隨機(jī)函數(shù)srand(),先利用srand(TL0)獲得TL0的數(shù)值,再利用兩次rand()%8分別得到食物出現(xiàn)的橫縱坐標(biāo)的位置。三、調(diào)試及仿真程
8、序軟件編譯器使用uVision3。在用uVision3編寫(xiě)單片機(jī)程序時(shí),因uVision3往往只能修改語(yǔ)法上的錯(cuò)誤,對(duì)于算法上的問(wèn)題不好檢查,而直接下到單片機(jī)里又受電路板的限制而不方便調(diào)試,因此這里使用Proteus進(jìn)行電路仿真。該軟件具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤(pán)和LCD系統(tǒng)仿真的功能,同時(shí)有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。先在Proteus上繪制硬件電路(并未畫(huà)出驅(qū)動(dòng)電路),電路設(shè)計(jì)完成后就可以進(jìn)行仿真。先雙擊單片機(jī),把用uVision3編譯生成的HEX文件指定為下載文件,點(diǎn)擊PLAY
9、鍵即可進(jìn)行仿真。當(dāng)出現(xiàn)ANALYSER ERRORS時(shí),表示電路有錯(cuò)誤,列表中說(shuō)明了具體的錯(cuò)誤,必須要先排錯(cuò)才可以進(jìn)行仿真。本設(shè)計(jì)仿真效果如圖4所示。圖4 系統(tǒng)測(cè)試效果圖軟件調(diào)試及Proteus仿真完成后就進(jìn)行硬件的安裝。本設(shè)計(jì)按照原先設(shè)計(jì)好的電路圖進(jìn)行總體上的布置,采用人工搭電路的方法進(jìn)行硬件的安裝。安裝時(shí)要考慮受熱、穩(wěn)固等多方面的影響使用電烙鐵時(shí)要控制好焊接的時(shí)間,電烙鐵停留的時(shí)間太短,焊錫不易完全熔化,形成“虛焊”,而焊接時(shí)間太長(zhǎng)又容易損壞元器件,每一兩秒內(nèi)要焊好一個(gè)焊點(diǎn),若沒(méi)完成,寧愿等一會(huì)兒再焊一次。其次芯片的擺置要方便連線,焊接時(shí)要先把芯片拔出,等線接好了再插上去。在焊接時(shí)要考慮電
10、路的抗干擾能力同時(shí)要充分考慮電源對(duì)單片機(jī)的影響。每焊接完一個(gè)模塊,要用萬(wàn)能表根據(jù)電路圖檢查有沒(méi)有接錯(cuò)、短路等現(xiàn)象,確認(rèn)正確后再繼續(xù)下一個(gè)模塊2。附錄:代碼#include #define uchar unsigned char#define SNAKE 20 /最大長(zhǎng)度#define TIME 50 /顯示延時(shí)時(shí)間#define SPEED 71 /速度控制sbit keyenable=P36;/方向使能sbit keyy=P02;/上下*/sbit up=P33; /downsbit down=P31;sbit right=P32;sbit left=P34;uchar xSNAKE+1;u
11、char ySNAKE+1; uchar time,n,i,e; /延時(shí)時(shí)間,當(dāng)前蛇長(zhǎng),通用循環(huán)變量,當(dāng)前速度char addx,addy; /位移偏移量/*延時(shí)程序*/void delay(char MS)char us,usn;while(MS!=0)usn = 0;while(usn!=0)us=0xff;while (us!=0)us-;usn-;MS-;/*判斷碰撞*/bit knock()bit k;k=0;if(x17|y17)k=1; /撞墻for(i=2;in;i+)if(x1=xi)&(y1=yi)k=1; /撞自己return k;/*上下左右鍵位處理*/void tur
12、nkey()/ interrupt 0 using 2 if(keyenable)if(left)addy=0;if(addx!=1)addx=-1; else addx=1;if(right)addy=0;if(addx!=-1)addx=1; else addx=-1;if(up)addx=0;if(addy!=-1)addy=1; else addy=-1;if(down)addx=0;if(addy!=1)addy=-1; else addy=1;/*乘方程序*/uchar mux(uchar temp) if(temp=7)return 128;if(temp=6)return 64
13、;if(temp=5)return 32;if(temp=4)return 16;if(temp=3)return 8;if(temp=2)return 4;if(temp=1)return 2;if(temp=0)return 1;return 0;/*顯示時(shí)鐘 顯示程序*/void timer0(uchar k)while(k-)for(i=0;iSNAKE+1;i+)P2=mux(xi);P1=255-mux(yi);turnkey(); /上下左右鍵位處理delay(TIME); /顯示延遲P2=0x00;P1=0xff; /*主程序*/void main(void)e=SPEED; P0=0x00; P1=0xff; P2=0x00; P3=0x00;while(1) /if(keyenable=1)P1=0x00;P2=0xff;elseP1=0xff;P2=0x00; for(i=3;iSNAKE+1;i+)xi=100;for(i=3;iSNAKE+1;i+)yi=100;/初始化 x0=4;y0=4; /果子 n=3; /蛇長(zhǎng) n=-1 x1=1;y1=0; /蛇頭 x2=0;y2=0; /蛇尾1 addx=0;addy=0; /位移偏移 /k=1; while(1)if(keyenable)break;timer0(1);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤礦機(jī)電設(shè)備強(qiáng)制維護(hù)保養(yǎng)規(guī)定 (一)
- 南京市聯(lián)合體中考語(yǔ)文一模試題及答案
- 臨港有色金屬有限公司燒結(jié)設(shè)備維護(hù)規(guī)程
- 老年自理課件
- 黨紀(jì)黨規(guī)教育
- 礦山開(kāi)采與環(huán)境保護(hù)責(zé)任書(shū)樣本
- 出渣車(chē)勞務(wù)分包與建筑垃圾資源化利用合同
- 城市共享單車(chē)借用服務(wù)合同協(xié)議書(shū)
- 老人和兒童課件
- 美術(shù)蝗蟲(chóng)介紹課件
- 全國(guó)工會(huì)財(cái)務(wù)知識(shí)競(jìng)賽題庫(kù)及答案
- 物聯(lián)網(wǎng)平臺(tái)介紹
- 《三國(guó)的世界》解說(shuō)詞 第一集 01
- 計(jì)算機(jī)組成原理考點(diǎn)整理
- 廣東省深圳市龍華區(qū)2022-2023學(xué)年五年級(jí)下學(xué)期期末數(shù)學(xué)試卷
- 黃石市陽(yáng)新縣法院系統(tǒng)書(shū)記員招聘考試真題
- 湖北省工傷職工停工留薪期分類目錄
- 教科版六下科學(xué)全冊(cè)課時(shí)練(含答案)
- 2023年主任醫(yī)師(正高)-中醫(yī)內(nèi)科學(xué)(正高)考試歷年真題精華集選附答案
- 人教版高中英語(yǔ)必修第二冊(cè)《Unit2Wildlifeprotection》教案及教學(xué)反思
- 內(nèi)蒙古匯能煤電集團(tuán)有限公司長(zhǎng)灘露天煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
評(píng)論
0/150
提交評(píng)論