日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年07月27日(星期日)

2021年07月27日 | 基于51單片機(jī)的貪吃蛇游戲設(shè)計(jì)

發(fā)布者:溫暖微風(fēng) 來(lái)源: eefocus關(guān)鍵字:51單片機(jī)  貪吃蛇游戲  點(diǎn)陣屏 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一. 實(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 if((x[1]==x[i])&(y[1]==y[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 x[i]=100;

for(i=3;i y[i]=100;                       //初始化

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 x[i]=100;

          for(i=3;i y[i]=100;

}

          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)

}     

}

}



關(guān)鍵字:51單片機(jī)  貪吃蛇游戲  點(diǎn)陣屏 引用地址:基于51單片機(jī)的貪吃蛇游戲設(shè)計(jì)

上一篇:51單片機(jī)學(xué)習(xí)筆記【八】——步進(jìn)電機(jī)
下一篇:基于51單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)

推薦閱讀

姓名:石榴娃 職務(wù):主播 技能:跳舞、唱歌、做詩(shī),用英語(yǔ)和外國(guó)記者做連線采訪…… 全球硬科技創(chuàng)新大會(huì)開幕前夕,一個(gè)渾身上下散發(fā)著硬科技力量的機(jī)器人主播“石榴娃”走進(jìn)了西安廣播電視臺(tái)《西安新聞》節(jié)目的直播間,和主持人聊起了大西安和硬科技話題。 ?這個(gè)可愛靈動(dòng)的小家伙,是國(guó)內(nèi)第一個(gè)“人機(jī)對(duì)話”智能機(jī)器人新聞主播,一亮相就成了大受...
數(shù)據(jù)跑得快,全靠光纖帶。一根根細(xì)小的光纖傳輸著便利生活,也織就成偌大的網(wǎng)絡(luò)強(qiáng)國(guó)。 談到光纖,就不得不提湖北武漢東湖高新區(qū)。43年前,我國(guó)第一根光纖在這里誕生,從一根光纖起步,到2001年國(guó)家光電子產(chǎn)業(yè)基地落戶武漢,武漢·中國(guó)光谷(簡(jiǎn)稱光谷)由此而來(lái)。 近年來(lái),云計(jì)算、大數(shù)據(jù)、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)應(yīng)用快速興起,如何解決網(wǎng)絡(luò)數(shù)據(jù)流“井噴式增...
云客戶體驗(yàn)和聯(lián)絡(luò)中心解決方案提供商Genesys?日前宣布擴(kuò)大與微軟的合作,實(shí)現(xiàn)了兩家公司系統(tǒng)的天然集成。世界頂尖的公有云聯(lián)絡(luò)中心平臺(tái)及一體化解決方案Genesys Cloud?現(xiàn)在已和Microsoft Teams實(shí)現(xiàn)了高度集成,為企業(yè)員工提供更為流暢、直觀和高效的用戶體驗(yàn)。聯(lián)絡(luò)中心的座席可以隨時(shí)與任何使用Microsoft Teams的同事展開協(xié)作,更快地解決客戶的問(wèn)題...
Intel這幾年在工藝進(jìn)度上落后跟10nm、7nm工藝多次跳票有關(guān),而新工藝延期也跟Intel此前不考慮EUV工藝有關(guān),所以10nm工藝才上了四重曝光,導(dǎo)致良率上不去,遲遲無(wú)法量產(chǎn)?! ntel之前認(rèn)為EUV工藝不夠成熟,現(xiàn)在EUV光刻工藝已經(jīng)量產(chǎn)幾年了,Intel也開始跟進(jìn)了,原先的7nm工藝、現(xiàn)在的Intel 4工藝會(huì)是全面使用EUV光刻機(jī)的開始,首款產(chǎn)品是Meteor Lake流星...

史海拾趣

問(wèn)答坊 | AI 解惑

節(jié)能環(huán)保遙控器

遙控器是日程生活中接觸最多的電子產(chǎn)品之一,人人幾乎都會(huì)用過(guò),而且會(huì)經(jīng)常使用。日常家電產(chǎn)品離不開遙控器。遙控器的能量來(lái)源就是電池,目前普遍應(yīng)用的是價(jià)格較低的堿性鈕扣電池及碳性干電池兩種。目前市面上的家電遙控器,基本上都使用兩節(jié)AA/AAA ...…

查看全部問(wèn)答∨

拆解:谷歌Nexus One,上圖!

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)答∨

電源 ltm4600

用ltm4600怎么實(shí)現(xiàn)-5V電源啊?…

查看全部問(wèn)答∨

基于FPGA的高清視頻信號(hào)發(fā)生器的設(shè)計(jì)

哪位大蝦指點(diǎn)下,我要做高清視頻信號(hào)發(fā)生器的設(shè)計(jì),基于FPGA的,指點(diǎn)下大概的內(nèi)容,比如參考什么資料,大致怎么做啊,小蝦我十分謝謝啦。…

查看全部問(wèn)答∨

華為西安研究所招聘信息,真誠(chéng)推薦

我前幾天到華為西安研究所應(yīng)聘,結(jié)果不錯(cuò)。 負(fù)責(zé)的面試官,希望我給他多推薦幾個(gè)校友。 我認(rèn)識(shí)的人不多,所以在這里廣播一下。 誰(shuí)有興趣,請(qǐng)將簡(jiǎn)歷發(fā)送至 我的郵箱 blue_boy_fly@163.com  。 我會(huì)立即推薦到華為西研所面試官那里, ...…

查看全部問(wèn)答∨

好多小工具及資料

這幾天逛了論壇100多頁(yè)找來(lái)的,整理了一下,需要的就下載咯....…

查看全部問(wèn)答∨

關(guān)于STM32非兼容IO問(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ī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved