用单片机和LED灯阵制作的贪吃蛇趣味小游戏

发布者:中原读书客最新更新时间:2021-12-15 来源: eefocus关键字:单片机 手机看文章 扫描二维码
随时随地手机看文章

最近几天天气总是在下雨,对于不爱玩手机游戏的我来说过得太无聊了。

想想咋么才能让时间过得快一点呢,这个时候我看到电视里的一个广告类似贪吃蛇的,于是抱着试试看的想法 用单片机和LED灯阵做了一个贪吃蛇的游戏


基本功能都有,玩起来体验还可以,总算可以充分利用时间了。


下面我就把制作过程和文件分享给大家

用一个18650电池供电,用一个单片机进行控制

名称:8X8点阵贪吃蛇


功能:

按右键开始、中间可以选择速度1最慢9最快(飞一般的感觉)

速度2和9,哎呀呀,自己撞死了(可以穿墙,撞到自己的身体死亡)

按中间确定可查看吃到了多少

暂停


废话不多说先上实物图


实物图1

在这里插入图片描述

实物图2

在这里插入图片描述
在这里插入图片描述

焊接实物图1 由于时间比较急线布的有点乱啊

在这里插入图片描述

焊接实物图2

在这里插入图片描述

#include"reg52.h"

sbit d=P2^4;

sbit a=P2^0;

sbit w=P2^2;

sbit s=P2^6;

sbit key=P2^7;

unsigned char code n[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01},n0[8]={0x08,0x04,0x02,0x01,0x10,0x20,0x40,0x80};

unsigned char snake[8][8],xmax,ymax,xmin,ymin,max=0,min=200,eat=0,ch=‘d’,num=0,f=0,cun=0,food=1,hz=0,n1=0,v=2;

void late(unsigned int i)

{undefined

for(;i>0;i–);

}

void xian(unsigned char y0,unsigned char x0,unsigned char y1,unsigned char x1,unsigned char on)

//在数组snake[][]中绘直线的函数,(x0,y0)to(x1,y1) on,0:off 1:长亮 2:以1:1亮灭时间比闪烁

{undefined

char i,j,nx,ny;


if(x0>x1)

nx=-1;

else if(x0x1)

nx=0;

else

nx=1;

if(y0>y1)

ny=-1;

else if(y0y1)

ny=0;

else

ny=1;

for(i=y0,j=x0;i!=y1+ny||j!=x1+nx;i=ny+i,j=nx+j)

snake[j][i]=on;


}

void print(void)//把二维数组snake[][]转换点阵的函数,数组某元素为0时,对应的led灭,1为亮,2为闪烁。(以后用多色led点阵时也可以用这种方法控制颜色)

{undefined

unsigned char i,j;

P3=0x00;

P1=0x00;

for(i=0;i<8;i++)

{undefined

P3=0x00;

P1=~n[i];

for(j=0;j<8;j++)

{undefined

if(snake[j][i]==1)

{undefined

P3|=n0[j];

}

else if(snake[j][i]==2)

{undefined

if(hz%125>=60)

P3|=n0[j];

else

P3&=~n0[j];

}

else if(snake[j][i]==0)

P3&=~n0[j];

}

late(10);

}


}

void number(unsigned char su,unsigned char x,unsigned char y,unsigned char on,unsigned char in)

{ //在数组snake[][]从某坐标起绘数字的函数,on:显示样式,in:背景样式

xian(x+2,y,x+2,y+4,on);

if(su7||su4||su==1)

{undefined


if(su7)

xian(x,y,x+2,y,on);

if(su4)

{undefined

xian(x,y,x,y+2,on);

snake[y+2][x+1]=on;

}

}

else

{undefined

xian(x,y,x+2,y,on);

if(su!=0)

xian(x,y+2,x+2,y+2,on);

xian(x,y+4,x+2,y+4,on);

xian(x,y,x,y+4,on);

switch(su)

{undefined

case 5:snake[y+3][x]=in;

case 6:snake[y+1][x+2]=in;break;

case 9:snake[y+3][x]=in;break;

case 2:snake[y+1][x]=snake[y+3][x+2]=in;break;

case 3:snake[y+1][x]=snake[y+3][x]=in;

}

}

}

void main(void)

{undefined

unsigned int i,j;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;//每10000微秒中断一次(每0.01秒执行一次中断函数)

EA=1;

ET0=1;

TR0=1;

//以上是有关时间中断的设置


start:

P3=0x00;

P1=0x00;


f=1;

cun=1;

while(cun)//等待开始

{undefined

n1++;

if(n1==240)

n1=0;


for(i=0;i<8;i++)

for(j=0;j<8;j++)

snake[j][i]=0;


switch(f)

{undefined

case 1://主界面:开>

xian(0,1,4,1,1);

xian(0,3,4,3,1);

xian(1,1,1,5,1);

xian(3,1,3,6,1);

xian(6,2,6,4,2);

snake[3][7]=2;

snake[6][0]=1;

print();

P3=0x00;

P1=0x00;

if(d==0)

cun=0;

break;


case 2://选择速度等级的界面

number(v,2,1,1,0);

snake[3][6]=2;

snake[3][0]=2;

if(d0&&v<9)

{

v++;

while(!d);

}

if(a0&&v>1)

{undefined

v–;

while(!a);

}

print();

}


if(key0)

{

while(!key);

if(f2)

f=1;

else

f++;

}

}

f=0;

cun=0;

for(i=0;i<8;i++)//snake[][]数组的初始化

for(j=0;j<8;j++)

snake[j][i]=100;//100代表空

snake[0][0]=101;snake[0][1]=102;snake[0][2]=103;//大于100代表蛇身,其中最大值代表蛇头,101代表蛇尾。


for(;

关键字:单片机 引用地址:用单片机和LED灯阵制作的贪吃蛇趣味小游戏

上一篇:51单片机控制的DS18B20温度测量报警系统
下一篇:单片机锂电池容量测试仪设计制作

推荐阅读最新更新时间:2024-11-09 10:51

用PROTEUS仿真单片机与小键盘接口通信
(protues高版本不兼容低版本真是不方便啊) 设计要求: 实现Proteus ISIS中的键盘矩阵与8051微控制器的接口。在上一个项目中,实现了LCD与8051微控制器的接口,可以在上面显示数据和不同的值,接下来的项目将从键盘上获取按键值,并在LCD上显示这些值。 #include reg51.h void cct_init(void); void delay(int); void lcdinit(void); void writecmd(int); void writedata(char); void Return(void); char READ_SWITCHES(void); char get_key(void)
[单片机]
用PROTEUS仿真<font color='red'>单片机</font>与小键盘接口通信
lesson6 DAAD转换与单片机接口
1、D,digital;A,anolog。数字:0和1。 2、T型电阻网络D/A转换器: D/A工作原理:通过内部电阻分流,产生变化的模拟量。 3、D/A转换的主要性能指标: ①分辨率 分辨率是指输入数字量的最低有效位(LSB)发生变化时,所对应的输出模拟量(电压或电流)的变化量。它反映了输出模拟量的最小变化值。 分辨率与输入数字量的位数有确定的关系,可以表示成FS / 。FS表示满量程输入值,n为二进制位数。对于5V的满量程,采用8位的DAC时,分辨率为5V/256=19.5mV;当采用12位的DAC时,分辨率则为5V/4096=1.22mV。显然,位数越多分辨率就越高。 ②线性度 线性度(也称非线性误差)是实际转换特性曲
[单片机]
lesson6 DAAD转换与<font color='red'>单片机</font>接口
STC89C52单片机的水温控制系统设计
0 引 言 目前,水温控制被广泛应用于食品、医药、化工、家电等很多领域,水温控制的好坏直接影响着产品的品质,因此,水温控制具有十分重要的意义。本设计的任务与要求为1 L 水由1 kW的电炉加热,要求水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动调整,以保持设定的温度基本不变。主要性能指标:温度设定范围为25.0~100 ℃,最小区分度为0.1 ℃,温度控制的静态误差小于或等于0.1 ℃,用SMC1602A 液晶显示模块显示实际水温和PID 控制算法中的三个主要参数Kc、Ti、Td 的赋值,用串口调试精灵将PID 控制器的输出和温度采样值显示在PC机上。 1 系统方案 本设计以STC89C52单片机为核心,采用了温
[单片机]
STC89C52<font color='red'>单片机</font>的水温控制系统设计
51单片机学习:LED流水灯实验
实验名称:LED流水灯实验 接线说明: 实验现象:下载程序后“LED模块”的D1-D8指示左右点亮 注意事项: ***************************************************************************************/ #include reg52.h #include intrins.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; #define LED_PORT P2 //使用宏定义P2端口 /***********************************
[单片机]
单片机AT89C51--7.按键(独立按键,矩阵按键)
1.键盘类型 1.1 编码键盘 通过硬件电路产生被按按键的键值码,程序简单但是硬件电路复杂 如计算机键盘 1.2 非编码键盘 软件编程来识别的称为非编码键盘,非编码键盘硬件电路简单,单片机中最常是非编码键盘 2.独立键盘和矩阵键盘 非编码键盘分为独立键盘和矩阵键盘 2.1 独立键盘 一开始线寄存器默认都是高电平,G为0V,G,S不导通。管脚为5V 这就是上拉电阻。 按下按键,管脚和地导通,电压变为0V 未按下按键,管脚和Vcc连接,电压为5V 2.2 矩阵键盘 3. 按键特性 4. 编程 4.1 独立键盘 按下S2按钮,数字加1,按下S3数字减1,最高不超过9,最低不低于0.高于9变为0.小
[单片机]
<font color='red'>单片机</font>AT89C51--7.按键(独立按键,矩阵按键)
如何用用C语言编写的单片机来控制流水灯
用C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒。是利用单片机I/O口控制外部设备的简单例子。当然,在你掌握了本程序后,完全可以充分发挥你的想象,改变一下程序内容和灯的接法(比如用光耦驱动继电器来控制霓虹灯),做出各种变化非凡的大型灯光广告牌。 一、硬件电路 因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振
[单片机]
如何用用C语言编写的<font color='red'>单片机</font>来控制流水灯
STM32单片机ADC的模拟看门狗的测试
ADC的模拟看门狗用于检查电压是否越界。他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LTR中设置。库函数是使用ADC_AnalogWatchdogThresholdsConfig设置的,无论是常规通道还是注入通道,都非常简单 当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断。捕获这个中断,可以做出一些应对措施。 数据手册上特别之处的一个东西:模拟看门狗说使用的比较数据与ADC_CR2寄存器中设置的数据对齐方式无关。看门狗比较是在数据对齐之前完成的。先进行看门狗比较,再将数据放入ADC_DR数据寄存器。 在ST的库中,只有简单的三个与看门狗相关的函数: void ADC_AnalogWatchdogCm
[单片机]
STM32<font color='red'>单片机</font>ADC的模拟看门狗的测试
单片机学习#80C51
80C51串行口的结构 有两个物理上独立的接收,发送缓冲器SBUF,他们占用同一地址,99H,接收器是双缓冲结构发送缓冲器,因为发送是CPU是主动的,不会产生重叠错误。 串口的控制 寄存器
[单片机]
<font color='red'>单片机</font>学习#80C51
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved