至简至美的一款单片机游戏
在电子森林 推文 700个字节的代码在ATtiny10里跑一个游戏[1] 介绍了一个 开源小游戏RunTiny[2] .
用了:
一个AVR单片机ATtiny10微控制器(只有6个脚,Digikey上0.3美元一颗)一个128*32的OLED显示屏一个按键一个电池 - 3.3V~4.5V都可以,可以用1S 150mAh的Lipo,乃至一颗CR2032的纽扣电池小小的单片机ATtiny10只有6个脚:
1个电源1个地1个Reset3个可用的I/O: PB0: 用于连接OLED的I2C的SDAPB1: 用于连接OLED的I2C的SCLPB2: 按键(INT0)原理图长这样(在面包板上就可以实现,5块钱打块板也可以啊):
▲ 极简的电路图
▲ 面包板上搭建的电路
代码也超级简单,为了能够塞到1KB的Flash存储器里面,作者做了优化,用汇编语言写成,最终的代码只有778个字节,不仅实现了游戏的功能,还能处理微控制器的I/O以及显示的通信
是不是很酷?
在Github上有开源的资源。 [2]
参考资料
[1]
700个字节的代码在ATtiny10里跑一个游戏 : https://mp.weixin.qq.com/s/gcqykDVyC8Vx_yztekMNSQ
[2]
开源小游戏RunTiny : https://github.com/ridoluc/RunTiny
用单片机做一个游戏机:找到红白机的感觉
前言: 上次的测评结束后一直想利用板载的 ATMEGA328P 做个完整的应用,但是最近的工作和生活都不如意,一直抽不出时间,一晃就到这个时候了。心情也是一如昨天的天气,但是刚好有时间了,那就做点有意思的事情。毕竟拿到这样一块板子也不容易,既然活动能够给我发过来,那我也是该尽力而为,也算是投桃报李。
1、界面演示
Arduino 对328p的支持也挺好,刚好在论坛看到一个帖子,使用arduiboy的库写了个小游戏,看了下很有意思的。而且连芯片都是一样的,甚至连移植都不需要。有一块328p的处理器,再加上一块OLED12864就OK了。
接下来给大家看看运行中的界面,还是挺有意思的。想想那会在学校在proteus上找打一个51单片机的仿真,记得当时做的是万年历,足足高兴了一周。想想现在日渐消沉的心态,越发得怀念大学。
开始界面===
运行界面1===
开始界面2===
游戏的操作就和以前的小霸王上的 炸弹人 是一样的,上下左右控制小人的方向;一个A键,一个B键,A键投弹,B键暂时搁置,你也可以把这个键编程为暂停或者投弹。只是游戏的难度可能要小一点,趣味性不足真正的 炸弹人 ,每一关的过关标准只要炸死一个怪物就行。但是,若是想学习在单片机上的游戏编程,这个选择非常不错,逻辑简单,电路清晰,并且直观呀。
程序的注释也是非常详细的:
/*=========================================================
主菜单
=========================================================*/
void MENU() {
bool POA = false;
while (POA == true || KeyBack != 4) {
key();
switch (KeyBack) {
case 0:
POA = false;
break;
case 1:
POA = true;
break;
case 4:
if (POA == true) {
KeyBack = 255;
arduboy.clear();
arduboy.setCursor(0, 0);
arduboy.println(F(" >About"));
arduboy.println(F(""));
arduboy.println(F("LHW programming"));
arduboy.println(F("LHW Art"));
arduboy.println(F("E-mail"));
arduboy.println(F("1281702594@qq.com"));
arduboy.println(F(""));
arduboy.println(F("Any key back..."));
arduboy.display();
delay(200);
while (KeyBack == 255) key();
delay(200);
}
break;
}
arduboy.clear();
arduboy.drawSlowXYBitmap(39, 1, START_TITLE , 87, 39, 1); //大标题
arduboy.drawSlowXYBitmap(0, 23, TITLE_TNT , 37, 41, 1); //TNT图标
arduboy.drawSlowXYBitmap(65, 58, LHW , 39, 5, 1); //作者信息
arduboy.setCursor(70, 39);
arduboy.println(F("PLAY"));
arduboy.setCursor(70, 47);
arduboy.println(F("ABOUT"));
if (POA == false) arduboy.setCursor(62, 39); else arduboy.setCursor(62, 47);
arduboy.println(F("*"));
arduboy.display();
}
}
2、电路的设置以及修改
整个电路的设计参照Arduboy ,这是一个开源项目,设计的这块办卡大小仅相当于信用卡。 装有经典的8位游戏,我们可以在官网的开源中下载相关的游戏编译通过之后,下载到我们的板子。但是,注意一下哦,这里的主控是 Atmega32U4 ,在使用我们的DFRobot蓝牙控制器 做主控时使用我附件提供的库文件 Arduboy2 。
具体的电路设置参考 Arduboy2 文件夹 中的电路,为了大家查看方便,我已经在附件 原理图 单独提取出来了。电路中中特别重要的是6个按键和IIC通信的OLED12864,其他的什么晶振电路,复位都不用管,实际采用的电路如下,需要修改的地方已经用蓝色笔画出来了:
根据我们的模块来看,其中有两个地方需要修改。其中的D3和D4的功能是作为我们游戏机的按键,现在连接了蓝牙模块的引脚。D3我没有试过,D4连接到蓝牙模块的时候,游戏开始的时候,上下键都没有反应。所以我干脆一不做二不休,将两个电阻都挑开了。但是来到咱们板子上找电阻的时候,上面没有标号的丝印。这也不难,将万用表打到蜂鸣器档位,然后从ATMEGA328P 的PIN1和PIN32定位到电阻,然后挑开。为了保险只是将上面的两个电阻挑开,没有直接拆掉是为了下次需要的时候再接上:
现在只需要加上OLED屏就行,然后加上我们的按键。我找了一块以前的洞洞板做了个小小的固定,随便焊接的,有点丑,但是不影响使用。焊接按键的时候需要注意,焊接完成后开机试试,这个时候玩游戏若是没问题,那是最好。否则,在GND上插上一根跳线,然后在各个引脚上一路扫过来,确定这个按键。当然,优先参看原理图。
按键===
OLED12864===
3、程序的导入以及下载
程序的下载链接:GITHUB:https://github.com/createskyblue/Bomberman
首先编译程序,在没有库文件的情况下会报错。这里不是导入官方的Arduboy2 库 ,上面介绍Arduboy 就说了注意事项,这里两者的芯片不一样,这里导入我给的库。找到帖子中提到的 Arduboy2库 ,然后将 Arduboy2 到自己 arduino IDE的库里面,库的位置可以使查看编译的输出信息。比如,我的库位置:C:\Users\Administrator\Documents\Arduino\libraries。
然后直接打开 工具 对自己的开发板进行设置,这里不设置为Pro mini,而是设置为 nano,8MHZ,3.3V (频率和手册里面的数据一样),因为可能会出现不能下载的情况下,记得勾选 old bootloader ,然后再下载。如果选择Pro mini 下载DFRobot蓝牙控制器 官网下的文件可以,这里却不行,具体的原因我也不清除,反正试了很多遍,感觉这个设置比较靠谱就推荐给大家了。
上传成功===
结语:
若是在程序改写中有疑问,可以联络源程序作者:https://www.arduino.cn/thread-81825-1-1.html
细水长流,江湖再见。
需要所有源资料的同学,私信我:ATMEGA328P + 洞洞板:arduiboy游戏机 。
相关问答
基于51 单片机的游戏 程序设计1.基本功能实现如下游戏规则:(1)...[最佳回答]你的功能都可帮实现的
基于单片机 stm32的简单的项目设计有哪些?简单点,大学生有能...1.遥控玩具车:使用STM32单片机控制遥控玩具车的移动,可设置速度、转向等参数。2.电子时钟:利用STM32单片机来控制电子时钟的运行和显示时间,具有准确性和稳定...
单片机 陀螺仪 作用?现在的智能终端已经大面积使用,之前因为成本较高,普遍用在飞机、航母及大型运作设备上,就用现在的智能手机来研究下陀螺仪吧,之后还会介绍清楚陀螺仪的特性,...
看门狗英文 游戏 名?答:看门狗英文游戏名watchdog.watchdog原为一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"。在游戏里芝加哥就比作单片机艾登则是监控一切的wat.....
想要搞个项目,有关 单片机 方面的,做什么好呢?比较综合的做一个计算器好玩的可以用12864或1602做个小游戏,贪食蛇、推箱子啦能够提升能力的还是去做一些模块了,比如无线通讯、红外比较综合的做一个计算器...
英灵神殿怎么单人进入 游戏 ?《英灵神殿》是一款多人在线游戏,但是也提供了单人游玩的模式。下面是单人进入游戏的方法:打开游戏首先,你需要打开《英灵神殿》游戏。在游戏主菜单中,选择...
51 单片机 现在应用在哪?它还有市场吗?-ZOL问答单片机核心,一般大学仍在以它为基础教学。至于市场,其实都很难买了,有好的先进的还很便宜的其他片子,当然更受欢迎谷歌应用市场。豌豆荚啊,有专门推荐游戏的...
万博app下载(官方)官方版要使用某一通讯方式,单片机和电脑必须具有相应的通讯接口,个人电脑一般有RS232、USB、以太网、蓝牙等通讯方式。假设使用RS232通讯,电脑自带有RS23...
单片机 中嵌入式与非嵌入式区别?单片机是一种集成电路芯片,它集成了中央处理器(CPU)、存储器、输入输出端口等基本部件。它被广泛应用于自动控制、通信、仪器仪表、家电等领域。单片机程序可...
游戏 开发考哪些证书?初级的可以考程序员,网络管理员,多媒体应用制作技,信息系统运行管理员,网页制作员,信息处理技术员;中级的可以考软件测评师,软件设计师,软件过程能力评...中...