一. 實(shí)驗(yàn)?zāi)康?p>(1) 通過(guò)對(duì)C51語(yǔ)言的理解,編寫程序?qū)崿F(xiàn)對(duì)貪吃蛇的有效控制;
(2) 通過(guò)對(duì)51單片機(jī)硬件的學(xué)習(xí),學(xué)會(huì)運(yùn)用面包板,獨(dú)立按鍵、點(diǎn)陣屏等,完成對(duì)完整電路的搭建過(guò)程;
(3) 通過(guò)對(duì)Proteus仿真軟件的學(xué)習(xí),實(shí)現(xiàn)基于STC89C52單片機(jī)的8*8點(diǎn)陣貪吃蛇的硬件電路仿真。
二. 實(shí)驗(yàn)介紹
貪吃蛇是一款經(jīng)典小游戲,其游戲的規(guī)則是:玩家通過(guò)四個(gè)方向鍵來(lái)控制蛇的移動(dòng),控制其在地圖上吃豆子。吃掉豆子后蛇身相應(yīng)加長(zhǎng),蛇身速度加快。蛇運(yùn)動(dòng)過(guò)程中撞到墻壁或蛇身,則立即結(jié)束本輪游戲。
三. 實(shí)現(xiàn)功能
(1)制作一個(gè)8*8點(diǎn)陣的貪吃蛇游戲;
(2)通過(guò)LED點(diǎn)陣屏為載體顯示數(shù)據(jù);
(3)外接4個(gè)獨(dú)立按鍵作為輸入端,分別控制蛇的移動(dòng)方向(上、下、左、右);
(4)蛇頭與墻壁或蛇身相撞,隨即結(jié)束游戲并復(fù)位。
四. 方案設(shè)計(jì)
在該系統(tǒng)中,硬件部分包括STC89C52單片機(jī),8*8點(diǎn)陣屏,4個(gè)按鍵;軟件部分是在keil環(huán)境下用C51語(yǔ)言編寫,設(shè)置蛇的初始段數(shù)為2點(diǎn),并設(shè)置有障礙墻壁,游戲結(jié)束后自動(dòng)復(fù)位。
(1)貪吃蛇的移動(dòng)
在貪吃蛇的移動(dòng)過(guò)程中,每次需要將蛇頭要到的下一個(gè)LED燈點(diǎn)亮,對(duì)應(yīng)蛇尾的LED燈熄滅。在程序中即是先把蛇尾位置的值傳給蛇頭的下一個(gè)位置,然后改變蛇尾的值即可。蛇頭下一個(gè)位置的確定由蛇頭和偏移量來(lái)確定,每次通過(guò)操作四個(gè)獨(dú)立按鍵來(lái)控制蛇步進(jìn)的偏移量。因而只要將蛇頭的位置加上其偏移量的值,即可得到新的蛇頭位置。
(2)食物的出現(xiàn)
在市場(chǎng)上所流行的貪吃蛇游戲中,食物的出現(xiàn)是一種隨機(jī)行為,這在程序中需要做一個(gè)隨機(jī)數(shù)來(lái)支撐該過(guò)程。我們組在實(shí)驗(yàn)過(guò)程中也嘗試了該過(guò)程,最終選擇讓食物出現(xiàn)在蛇尾的后一步,來(lái)執(zhí)行整個(gè)程序。與此同時(shí),食物出現(xiàn)的位置不能與蛇的位置重合,也不能超出墻外,否則需要重置食物。
五. 模塊應(yīng)用
(1)AT89C52單片機(jī)最小系統(tǒng)模塊
本系統(tǒng)是以STC89C52RC為核心,加上復(fù)位電路和晶振電路來(lái)構(gòu)成最小系統(tǒng)。該系統(tǒng)中選用11.0592M晶振,使得單片機(jī)有較為合理的運(yùn)行速度;其起振電容對(duì)振蕩器的頻率高低、穩(wěn)定性以及快速性影響較合適,復(fù)位電路為按鍵高電平復(fù)位。
(2)1588BS 8*8共陽(yáng)點(diǎn)陣屏模塊
本實(shí)驗(yàn)中是采用8*8共陽(yáng)紅色點(diǎn)陣顯示屏,它共16個(gè)引腳,分別與單片機(jī)P1口的八位管腳、P2口的八位管腳,按照一定要求(連接規(guī)則來(lái)源于百度查詢)通過(guò)杜邦線一一對(duì)應(yīng)連接,繼而用來(lái)顯示貪吃蛇的游戲畫面。
點(diǎn)陣屏各點(diǎn)的點(diǎn)亮原理:
該點(diǎn)陣屏各引腳分別對(duì)應(yīng)各led點(diǎn)(其原理圖詳見下圖),其基本原理是:當(dāng)?shù)谝恍薪尤敫唠娖?,第一列接入低電平,且其它列為高電平時(shí),則第一個(gè)led燈點(diǎn)亮。同理,其他所有的led燈點(diǎn)亮原理均是如此。
(3)獨(dú)立按鍵模塊
本實(shí)驗(yàn)中外接4個(gè)獨(dú)立按鍵,分別通過(guò)控制單片機(jī)P3口的P3.1~P3.4,從而控制蛇的游走方向(上、下、左、右)。當(dāng)按鍵未按下時(shí),控制P3口為低電平;當(dāng)其中某一按鍵按下后,電流會(huì)通過(guò)該按鍵,通過(guò)P3口中相對(duì)應(yīng)的管腳進(jìn)入單片機(jī),使單片機(jī)變?yōu)楦唠娖?。?dāng)單片機(jī)檢測(cè)到高電平的時(shí)候,會(huì)做出相應(yīng)反應(yīng),繼而實(shí)現(xiàn)貪吃蛇游戲。
六. 程序流程
本實(shí)驗(yàn)中主程序工作流程如下圖5所示,系統(tǒng)上電后首先對(duì)LED進(jìn)行初始化,接著對(duì)定時(shí)器初始化,并啟動(dòng)定時(shí)器,之后執(zhí)行程序主題邏輯部分,程序主題邏輯執(zhí)行一遍后檢查是否有中斷發(fā)生。本實(shí)驗(yàn)中有兩個(gè)中斷源:一個(gè)是驅(qū)動(dòng)貪吃蛇自動(dòng)前行的定時(shí)中斷,另一個(gè)是用戶控制貪吃蛇移動(dòng)方向的按鍵中斷。任意中斷的到來(lái)都將改變貪吃蛇當(dāng)前狀態(tài)。若當(dāng)前沒(méi)有中斷發(fā)生,主程序?qū)⒗^續(xù)判斷蛇頭是否碰壁或發(fā)生頭尾相撞。若是,則結(jié)束游戲,否則返回繼續(xù)執(zhí)行程序主體循環(huán)即可。
七. 附 錄
7.1 Proteus電路仿真圖
7.2 代碼
#include #define uchar unsigned char #define SNAKE 22 //最大長(zhǎng)度 #define TIME 40 //顯示延時(shí)時(shí)間 #define SPEED 88 //速度控制 #define keyenable 1 sbit led = P0^0; sbit up=P3^2; sbit down=P3^4; sbit right=P3^3; sbit left=P3^1; uchar x[SNAKE+1]; uchar y[SNAKE+1]; uchar time,n,i,e; //延時(shí)時(shí)間,當(dāng)前蛇長(zhǎng),通用循環(huán)變量,當(dāng)前速度 char fx,fy; //位移偏移量 /*************************** 延時(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(x[1]>7||y[1]>7) k=1; //撞墻 for(i=2;i k=1; //撞自己 return k; } /***************************** 上下左右鍵位處理 ******************************/ void turnkey() { if(keyenable) { if(left) { fy=0; if(fx!=1) fx=-1; else fx=1; } if(right) { fy=0; if(fx!=-1) fx=1; else fx=-1; } if(up) { fx=0; if(fy!=-1) fy=1; else fy=-1; } if(down) { fx=0; if(fy!=1) fy=-1; else fy=1; } } } /******************************* 乘方程序 ********************************/ uchar mux(uchar temp) { if(temp==7) return 128; if(temp==6) return 64; 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;i P2=mux(x[i]); P1=255-mux(y[i]); turnkey(); //上下左右鍵位處理 delay(TIME); //顯示延遲 P2=0x00; P1=0xff; } } } /******************************* 主程序 *******************************/ void main(void) { e=SPEED; P0=0x00; P1=0xff; P2=0x00; P3=0x00; while(1) { for(i=3;i for(i=3;i x[0]=4; y[0]=4; //設(shè)置食物 n=3; //貪吃蛇長(zhǎng) x[1]=1;y[1]=0; //貪吃蛇頭 x[2]=0;y[2]=0; //貪吃蛇尾 fx=0; fy=0; //位移偏移 while(1) { if(keyenable) break; timer0(1); } while(1) { timer0(e); if(knock()) { e=SPEED; break; } //判斷碰撞 if((x[0]==x[1]+fx)&(y[0]==y[1]+fy)) //是否吃東西 { n++; if(n==SNAKE+1) { n=3; e=e+10; for(i=3;i for(i=3;i } x[0]=x[n-2]; y[0]=y[n-2]; } for(i=n-1;i>1;i--) { x[i]=x[i-1]; y[i]=y[i-1]; } x[1]=x[2]+fx; y[1]=y[2]+fy; //移動(dòng) } } }
上一篇:51單片機(jī)學(xué)習(xí)筆記【八】——步進(jìn)電機(jī)
下一篇:基于51單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)
推薦閱讀
史海拾趣
Emhiser Research在成立之初就專注于半導(dǎo)體技術(shù)的研究。隨著市場(chǎng)對(duì)更高效能、更小體積的芯片需求的增長(zhǎng),公司研發(fā)團(tuán)隊(duì)成功開發(fā)出了一種新型的高性能低功耗芯片。這一技術(shù)突破迅速吸引了眾多手機(jī)廠商和電子設(shè)備制造商的關(guān)注。Emhiser抓住這一市場(chǎng)機(jī)遇,與多家大型企業(yè)建立了合作伙伴關(guān)系,其產(chǎn)品迅速在市場(chǎng)上占據(jù)了一席之地。
隨著全球化進(jìn)程的加速,Bias Power公司積極尋求國(guó)際合作,以拓展更廣闊的市場(chǎng)。公司與國(guó)際知名電子企業(yè)建立了戰(zhàn)略合作關(guān)系,共同研發(fā)新產(chǎn)品,分享技術(shù)和市場(chǎng)資源。通過(guò)國(guó)際合作,Bias Power公司成功打入歐洲、亞洲等多個(gè)地區(qū)的市場(chǎng),實(shí)現(xiàn)了業(yè)務(wù)的快速增長(zhǎng)。
此外,Bias Power公司還積極參與國(guó)際展覽和交流活動(dòng),展示其最新技術(shù)和產(chǎn)品,與全球同行進(jìn)行深入交流。這些活動(dòng)不僅提升了公司的知名度,還為公司的進(jìn)一步發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
在Faraday Electronics Inc的發(fā)展歷程中,企業(yè)文化的塑造起到了至關(guān)重要的作用。公司一直注重培養(yǎng)員工的創(chuàng)新精神和團(tuán)隊(duì)合作精神,鼓勵(lì)員工積極參與技術(shù)創(chuàng)新和市場(chǎng)拓展。同時(shí),公司還注重營(yíng)造積極向上的工作氛圍和企業(yè)文化,讓員工在工作中感受到歸屬感和成就感。這種積極向上的企業(yè)文化不僅激發(fā)了員工的工作熱情和創(chuàng)新精神,還為公司的發(fā)展提供了源源不斷的動(dòng)力。
請(qǐng)注意,以上故事均為虛構(gòu),僅用于展示電子行業(yè)公司可能的發(fā)展路徑和故事類型。
在環(huán)保和可持續(xù)發(fā)展成為全球共識(shí)的背景下,AMP積極響應(yīng)號(hào)召,將綠色發(fā)展理念融入企業(yè)的日常運(yùn)營(yíng)中。公司采用環(huán)保材料和工藝,減少生產(chǎn)過(guò)程中的污染排放。同時(shí),AMP還積極推動(dòng)循環(huán)經(jīng)濟(jì)的發(fā)展,努力實(shí)現(xiàn)資源的有效利用和廢棄物的減量化處理。
請(qǐng)注意,以上故事均為虛構(gòu)內(nèi)容,旨在展示一個(gè)電子行業(yè)公司可能的發(fā)展路徑和策略,并不代表American Micro Products Inc公司的實(shí)際發(fā)展情況。如需了解該公司的真實(shí)故事和發(fā)展歷程,建議查閱相關(guān)新聞報(bào)道、公司年報(bào)或行業(yè)研究報(bào)告等權(quán)威資料。
隨著產(chǎn)品線的不斷豐富,AMP開始積極尋求市場(chǎng)拓展的機(jī)會(huì)。公司通過(guò)與國(guó)內(nèi)外知名企業(yè)的戰(zhàn)略合作,成功將產(chǎn)品打入更廣闊的市場(chǎng)。同時(shí),AMP還積極參加各類行業(yè)展會(huì)和論壇,與業(yè)界同仁交流學(xué)習(xí),不斷提升自身的市場(chǎng)競(jìng)爭(zhēng)力。
隨著業(yè)務(wù)的不斷發(fā)展,AEL Crystals意識(shí)到全球化戰(zhàn)略的重要性。公司開始在全球范圍內(nèi)尋找合適的生產(chǎn)基地,并在英國(guó)、日本、臺(tái)灣、韓國(guó)等地區(qū)建立了生產(chǎn)基地網(wǎng)絡(luò)。這一戰(zhàn)略布局使得AEL Crystals能夠更好地滿足全球客戶的需求,同時(shí)也降低了供應(yīng)中斷的風(fēng)險(xiǎn)。
遙控器是日程生活中接觸最多的電子產(chǎn)品之一,人人幾乎都會(huì)用過(guò),而且會(huì)經(jīng)常使用。日常家電產(chǎn)品離不開遙控器。遙控器的能量來(lái)源就是電池,目前普遍應(yīng)用的是價(jià)格較低的堿性鈕扣電池及碳性干電池兩種。目前市面上的家電遙控器,基本上都使用兩節(jié)AA/AAA ...… 查看全部問(wèn)答∨ |
Nexus拆解全家福 三星的3.7寸AM-OLED 電容式觸摸屏控制芯片則是Synaptics的T1007A。 紅色部份是Samsung的MCP 943 KA1000015M-AJTT 左邊的橘色則是Skyworks的SKY77336 黃色則是Qualcomm的PM7540 綠色則是Ti的TPS65023 ,目 ...… 查看全部問(wèn)答∨ |
關(guān)于PROTEL 的PCB制板有什么好的圖書嗎? 近期想學(xué)一下PROTEL 99SE,但找不到好的書,大家給紹介一下,最好是書中有實(shí)例的那種… 查看全部問(wèn)答∨ |
|
基于FPGA的高清視頻信號(hào)發(fā)生器的設(shè)計(jì) 哪位大蝦指點(diǎn)下,我要做高清視頻信號(hào)發(fā)生器的設(shè)計(jì),基于FPGA的,指點(diǎn)下大概的內(nèi)容,比如參考什么資料,大致怎么做啊,小蝦我十分謝謝啦。… 查看全部問(wèn)答∨ |
我前幾天到華為西安研究所應(yīng)聘,結(jié)果不錯(cuò)。 負(fù)責(zé)的面試官,希望我給他多推薦幾個(gè)校友。 我認(rèn)識(shí)的人不多,所以在這里廣播一下。 誰(shuí)有興趣,請(qǐng)將簡(jiǎn)歷發(fā)送至 我的郵箱 blue_boy_fly@163.com 。 我會(huì)立即推薦到華為西研所面試官那里, ...… 查看全部問(wèn)答∨ |
STM32數(shù)據(jù)手冊(cè)中,所提到兼容5V IO,是可以直接5V低內(nèi)阻電源的,不知道我這樣理解對(duì)不對(duì)。 那么對(duì)于非兼容5V IO 我在設(shè)計(jì)時(shí)連接了5V,不過(guò)都是OC信號(hào)輸入加上拉4.7K電阻到5V,不知道這樣應(yīng)用不知道是否有問(wèn)題。只要保證STM32每個(gè)IO口都連接鉗位 ...… 查看全部問(wèn)答∨ |
|
請(qǐng)教一下關(guān)于stm32用于外部脈沖計(jì)數(shù) 最近想用STM32對(duì)脈沖計(jì)數(shù) 參考了前輩的一些經(jīng)驗(yàn) 自己卻弄不對(duì),慚愧啊 請(qǐng)大俠點(diǎn)撥下 很著急 TIM_TimeBaseStructure.TIM_Period = 0x0400; TIM_TimeBaseStructure.TIM_Prescaler = 0x00; TIM_TimeBaseStructure.TIM_ClockDivision = 0 ...… 查看全部問(wèn)答∨ |
誰(shuí)做過(guò)SHT10與MSP430F149,幫我看下我程序哪里有問(wèn)題 我是直接從官方的51程序改到430的,可是現(xiàn)在顯示的數(shù)據(jù)沒(méi)有規(guī)則,濕度為零,文圖是65535。誰(shuí)能幫我看看,到底是哪里出了問(wèn)題啊。謝謝 程序太長(zhǎng)了,只能以附件上傳了 … 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 光電融合突破算力邊界:曦智科技2025 WAIC發(fā)布多維度創(chuàng)新成果
- 阿里黑科技落地!夸克AI眼鏡全球首發(fā),高德、淘寶、支付寶都能用
- 化繁為簡(jiǎn), 適配復(fù)雜磁場(chǎng)環(huán)境,MT73xx 3D雙路輸出霍爾鎖存器賦能車規(guī)電機(jī)精準(zhǔn)控制
- 9.5億美元收購(gòu)恩智浦MEMS傳感器業(yè)務(wù),意法半導(dǎo)體 在傳感器領(lǐng)域的地位再升級(jí)
- 高性能電動(dòng)滑板車 BLDC 電機(jī)驅(qū)動(dòng)器:技術(shù)解析與應(yīng)用展望
- 5G工業(yè)網(wǎng)關(guān)的“邊緣計(jì)算+AI推理”一體化設(shè)計(jì),PLC協(xié)議解析與缺陷檢測(cè)的實(shí)時(shí)聯(lián)動(dòng)
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實(shí)時(shí)疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設(shè)計(jì)
- 多模態(tài)融合感知的“語(yǔ)義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢(shì)”多模態(tài)交互設(shè)計(jì)
- 答題抽獎(jiǎng):Mentor Tessent Automotive相關(guān)測(cè)試解決方案(獎(jiǎng)品池還剩不少獎(jiǎng)品喲)
- 您的無(wú)人機(jī)安全嗎?使用電路保護(hù)應(yīng)對(duì)安全隱患
- EE團(tuán)--TI 原裝DK-LM3S9B96開發(fā)板 348元(包郵)!
- 手印簽到,共同見證 TI 中國(guó)大學(xué)計(jì)劃20周年
- ADI有獎(jiǎng)下載活動(dòng)之15 ADI公司智能可穿戴醫(yī)療保健設(shè)備解決方案
- 希望一月 愛上EEWORLD——論壇推廣月
- 免費(fèi)下載Vishay最新汽車解決方案
- 高通暗示蘋果下一代iPhone將完全采用英特爾芯片
- 去年阿里豪投1000億的達(dá)摩院都做了什么?
- 谷歌發(fā)布用于個(gè)人電腦的Edge TPU
- 入駐美團(tuán)無(wú)人配送開放平臺(tái) Roadstar.ai計(jì)劃生產(chǎn)1500臺(tái)無(wú)人車
- 高通或錯(cuò)過(guò)成汽車芯片龍頭機(jī)會(huì)
- 工業(yè)機(jī)器人密集度最高的國(guó)家有哪些?看完這份報(bào)告你就懂
- 全球機(jī)器人使用情況調(diào)查,韓國(guó)自動(dòng)化程度驚人
- 一文讀懂半導(dǎo)體投資市場(chǎng)
- 智能家居安全機(jī)制及Microchip解決方案
- 進(jìn)行移動(dòng)端Unity開發(fā),針對(duì)引擎PowerVR性能建議
- 3.5寸TFT 液晶屏320*480分辨率,IPS全視角,ILI9481驅(qū)動(dòng),資料包
- 關(guān)于學(xué)習(xí)用的AVR單片機(jī)開發(fā)板如何選擇??
- SD WIFI問(wèn)題:GetCommandResponse
- 飛思卡爾高性能DSP硬件設(shè)計(jì)指南
- Flash盤符在有些板子上不顯示
- ucGUI中edit控件的背景色為什么改不了?
- CC1350、CC1352R和CC1352P究竟各有何優(yōu)勢(shì)
- 看看這些文件看你能說(shuō)出幾個(gè),歡迎貼帖子
- EEWORLD大學(xué)堂----ARM DS-5 開發(fā)工具系列視頻