前言:
眼前同学们对“单片机俄罗斯方块实验小结”可能比较讲究,小伙伴们都想要了解一些“单片机俄罗斯方块实验小结”的相关资讯。那么小编也在网络上搜集了一些有关“单片机俄罗斯方块实验小结””的相关知识,希望同学们能喜欢,朋友们一起来学习一下吧!前方超详细教程预警!!包括——游戏机原理解析、电路设计、程序设计。
工程描述
我拆解了原来的小霸王游戏机,又用51单片机复刻了一个更牛的!它可以:
给初学者锻炼简易游戏开发思维;作为电子爱好者的日常玩具;作为游戏的开发设备。
工程借用了原游戏机的——外壳,屏幕,按键,扬声器。
并升级了电源系统,采用锂电池供电,TypeC接口充电。
整个项目的核心部件如下图所示:
下面先介绍一下我改造好的游戏机参数,再分享详细的制作教程!
项目参数与成本
1.核心参数
主控芯片:STC8H8K64运行频率:30 MHzFlash Size:64KBRAM Size:8KB屏幕分辨率:10*20按键数量:9个电池容量:400mAh充电接口:TypeCPCB层数:2层PCB尺寸:7.04cm*5.71cm充电电压:5V游戏数量:目前只有1个(可自己开发更多游戏)
2.成本预算
原游戏机:8.3¥STC8H8K64:3¥CH340N:1.5¥电池:4¥PCB&SMT:10¥开发说明
1.开发方式
集成开发环境:Keil5编 程 语 言:C烧 录 软 件:STC-ISP烧 录 工 具:板载USB转串口
2.烧录方法
该设备使用STC-ISP进行烧录,可从STC官网下载。烧录步骤如下:
①烧录固件时需要先配置参数,如下图所示:
②将游戏机关机。
③点击【下载/编程】按钮。
④按住游戏机开机键不放,直到烧录完成。
3.按键说明
游戏机的开关机是通过软硬件配合实现的。
除了开关机按键是固定的,其他按键都可以通过修改代码自定义功能。
(1)开关机按键说明:
在关机状态下,长按开机键1S设备即可开机,开机后即进入俄罗斯方块游戏界面;在开机状态下,轻触开机键即可关机。
(2)游戏模式下的按键说明:
左右方向键:控制方块左右移动;上方向键 :游戏暂停;下方向键:方块加速下落到底部;大圆键:方块旋转。制作过程
本章节有7部分内容,你可以跟着本章节思路——拆解游戏机、理解工作原理、设计电路代码……
1.游戏机挑选
首先采购这款适合改装的型号;
然后对其进行拆解,分析其工作原理。
PS:这种游戏机几乎都采用专用的牛屎芯片,很难从芯片获得信息。
2.驱动原理分析
通过仪器对电路板上的信号进行测量。
可以发现按键就是高低电平的变化,蜂鸣器是PWM信号。
这些分析起来相对来说还比较简单。
复杂的是LCD屏幕的驱动信号。
这种类型的屏幕大多采用的是——多电平扫描驱动。
用示波器分别查看这36个CD驱动引脚的波形,可以发现其电平形式大致分为两类:
一类是如图所示的波形信号:规律性很强。
它共有四个电平段,分别是:
VCC四分之三VCC四分之一VCCGND
总结:有规律的信号是COM引脚,控制当前屏幕扫描的哪一列。
另一类是相对无规律的波形信号。
它共有三个电平段,分别是:
VCC二分之一VCCGND
总结:无规律的信号是SEG引脚,控制当前屏幕扫描那一行。
3.LCD 驱动电路的实现
搞清楚了LCD驱动的型号形式,接下来的难点是——如何使用单片机的引脚产生这样的信号?
普通的单片机引脚只有高低两种电平,要想产生上述信号,可以借助电阻分压来实现。
(1)关于SEG信号
如图所示,只需要使用一个单片机引脚和两个10K电阻即可。
①当单片机引脚A输出低电平时:
SEG端的电压为GND。
②当单片机的引脚悬空时:
SEG端的电压为二分之一VCC。
③当单片机引脚A输出高电平时:
SEG端电压为VCC。
(2)关于COM信号
COM信号的实现稍微复杂一些,需要使用两个单片机引脚和三个电阻,连接方式如上图所示,电阻阻值分别是9K,3K和24K。
①当单片机引脚A悬空,引脚B输出低电平时:
COM端的电压为GND。
②当单片机引脚A和B都悬空时:
COM端的电压为四分之一VCC。
③当单片机引脚B悬空,引脚A输出高电平时:
COM端的电压为四分之三VCC。
④当单片机引脚A悬空,引脚B输出高电平时:
COM端的电压为VCC。
4.原理图设计
有了上述的理论基础,接下来就可以设计电路图了。
LCD屏幕上一共有10个COM引脚和26个SEG引脚,所以采用上述方式驱动LCD一共需要46个单片机引脚。
本项目采用了LQFP封装的51单片机STC8H8K64,一共有60个可用的IO口,恰好能满足该项目的需求。
LCD驱动电路采用了庞大的电阻网络,给整个系统添加了——USB转串口,锂电池充电,单键开关机等功能电路。
5.PCB设计
设计完原理图后,拆下原有游戏机的电路板,测量——外框尺寸、螺丝孔、按键的位置,确定PCB的形状。
布线还算简单,设计完成的PCB渲染图如下所示:
PCB设计好之后拿到嘉立创下单打样,并且进行STM贴片。
贴片的时候为了节省费用,我这里只贴了立创基础库里面的元器件,剩下的元器件就拿回来自己手焊。
下图是焊接好的PCB正反面:
6.LCD驱动程序设计
LCD的驱动程序采用定时器,2mS扫描一个COM引脚,同时将要显示的数据放到SEG引脚上。
10个COM引脚扫描一遍需要20mS,所以屏幕刷新率为50Hz。
7.蜂鸣器驱动程序设计
采用定时器配合GPIO引脚产生方波驱动蜂鸣器。
首先根据要播放的音符的频率,计算定时器的参数,将其内置到数组中,然后制定音乐数据的格式。
本项目中一共内置了16个音高,16阶时值。
音乐数据中每个音符用一个字节表示。
比如0x47,高四位的4表示音高为587Hz(中音2),低字节的7表示时值为(7 + 1) * 16分音符,即二分音符。
8.俄罗斯方块游戏设计
驱动完成后就可以编写游戏了。
具体的实现过程是:
①先对游戏中出现的方块进行分类。
②将方块及旋转镜像的变形,都转换成二进制数据。
③在程序里面通过定时器控制方块的下落,对方块的旋转,左右移动进行处理。
④当方块下降到最底部时,检查是否有完整的行。
如果有,则将其消除,然后随机生成下一个方块,循环往复。
时间有限的关系,我只做了贪吃蛇,但你可以参考我这个设计,自己实现坦克大战,贪吃蛇……等的各种游戏。
我一直认为,游戏程序中所涉及的逻辑比普通的项目多得多,相信在设计过程中,你会有所收获。
详细的代码和电路已经完全开源,无偿分享,但格式原因无法完全上传,有需要可以在评论区和我说一声。
参考资料:
[1]
— 完 —
嘉立创EDA·头条号
关注我,看一手优质开源项目
标签: #单片机俄罗斯方块实验小结