打鼓游戏机设计
一 课题介绍
1.1 飞思卡尔S12(X)单片机简介
Freescale公司推出的S12、S12X系列单片机是增强型的16位MCU,其集成度高,片内资源丰富,功能模块包括SPI、SCI、I2C、CAN、A/D、PWM、ECT等,方便构建实际应用系统;大容量的Flash、RAM和EEPROM存储器可满足大部分的存储空间需求,具有的低功耗工作,复位控制,看门狗及实时中断等配置功能更有助于系统的可靠运行;可宽范围选择逻辑时钟频率,最高工作频率达25MHZ/50MHZ;具有方便快捷的在线编程调试能力;具有丰富、高效的指令系统,具有较强的数值运算和逻辑运算能力。 1.2 课题简介
本系统是基于S12XDT512SLK核心开发板设计并实现打鼓游戏机。程序语言采用C语言,编程软件采用CodeWarrior开发环境。整个系统需要在自己制作的硬件电路上实现。
打鼓游戏机是这样一款游戏:系统随机产生一个鼓点,当鼓点到达基准线时,玩家应该按下相应按键,如果成功按键,系统将实现加分,如果没有成功按键,系统不做处理。游戏最后以得分高低评判玩家水平。通常游戏配有背景音乐和鼓声作为前景音乐。整款游戏集趣味性、挑战性、可观赏性于一体。
我们采用单片机作为控制管理器,通过编程实现不少于四键输入的信息接收,LCD液晶屏显示,前景背景音乐输出,实现打鼓游戏功
1
电子综合设计——打鼓游戏机设计
能。同时,设计出能完成上述要求的硬件电路,安装制作成实验电路板,调试完成相应的软件功能。 二 方案验证 2.1硬件方案验证
系统采用核心开发板加扩展板的方式。在核心开发板上主要是S12芯片。扩展板上主要是12864LCD液晶显示屏、按键、语音芯片、扬声器、LED发光二极管等外围电路。
128*64LCD语音系统S12XDT512核心开发板按键LED发光二极管
图1 打鼓游戏机系统框图
输入/输出(I/O)接口,是单片机与外界进行信息交互的重要通道,在整个单片机系统中占有重要地位。单片机所处理的信息(包括程序和数据)大都要由输入设备提供,而处理的结果则要通过输出设备输出。S12(X)系列单片机的各种外围接口采用模块化设计方式,它的输入/输出接口由许多标准模块组成,这些接口包括PORTA、PORTB、PORTE、PORTK、PORTH、PORTJ、PORTM、PORTS、PORTP和PORTT。 各自独立,具有GPIO功能,大部分接口在通用功能的基础上还有一些特殊的复用功能。这些功能可通过寄存器的设置与程序配合,发挥各种功能。
2
电子综合设计——打鼓游戏机设计
2.1.1单片机最小系统
MCU最小系统是指可以使内部程序运行起来的所必须的基本外围电路。以MC9S12DG128为例,最小系统包括电源电路,复位电路,晶振电路,BDM调试接口电路,PLL电路等。下图是单片机的最小系统电路原理图。
图2 单片机最小系统电路原理图
MCU芯片外部供电电压为5V,供给VDDR,VDDX及VDDA,VREGEN通过一个电阻接至高电平,以便使能产生MCU内部使用的2.5V电压。
3
电子综合设计——打鼓游戏机设计
电源电路部分的电容C8—C20构成滤波电路,可以改善系统的电磁兼容性,降低电源波动对系统的影响,增强电路工作的稳定性。
复位电路可以实现上电复位和按键复位操作,RESET低电平有效。2.1.2 12864LCD液晶显示屏电路
液晶显示模块是128×64-12点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与MCU直接接口,提供两种界面来连接微处理机:8位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。
采用串行连接方式,电路连线简洁,但难于控制,而且会对显示频率造成影响,可能会导致闪烁问题。如果采用并口连接方式电路连线复杂,但是易于控制,而且数据传送速率快,能很好的满足屏幕刷新率的要求。因此系统采用并口连接方式。即LCD的数据和控制管脚直接与MCU连接。下图是LCD与单片机并行连接的电路图。为了连线和控制方便,我们将单片机的PORTA0-PORTA7与LCD的DB0-DB7连接,PORTB口主要连接LCD的控制管脚。
4
电子综合设计——打鼓游戏机设计
图3 LCD模块电路图
2.1.3 按键扫描电路
嵌入式系统键盘电路的设计应使MCU不仅能察觉是否有键按下,并能识别按下的是哪一个键,而且还要把此键所代表的信息翻译成MCU所能接受的形式。
在微控制器实验系统中,常用的键盘接口有2种:独立式和矩阵式。当MCU系统中所需要的键盘按键数量较多时,为了减少MCU的I/O口的占用,通常将按键排列成矩阵形式。矩阵式结构的键盘显然需要比独立式更多的器件,识别软件的设计也要复杂一些。在本系统中,按键数量不是很多,同时I/O口也足够多,所以我们采用独立式
5
电子综合设计——打鼓游戏机设计
方式,这样可以简化程序控制。
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根MCU的I/O口线,每个按键的工作不会影响其他I/O口线的状态,独立式按键的电路图如下所示。
图4 按键电路图
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大。按键输入均采用低电平有效,此外,上拉电阻保证了按键断开时,I/O口线上
6
电子综合设计——打鼓游戏机设计
有确定的高电平。当I/O口线内部有上拉电阻时,外电路就不需要再接上拉电阻了。实验中,按键我们采用的是B口和E口,只需要在软件中设置上拉电阻就好了,不需要焊接上拉电阻。
按键还需要考虑另外一个问题——按键开关去抖动。MCU应用系统的键盘通常使用机械触电式按键开关,其主要功能是把机械上的通断转换成电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。
机械式按键在按下或抬起时,由于机械弹性作用的影响,通常伴有一定时间的触电机械抖动,然后其触电才稳定下来。抖动时间的长短与开关的机械特性有关,一般为5ms--10ms。
在触电抖动期间检测按键的通与断状态,可能会导致判断出错。即按键一次按下或抬起被错误地认为是多次按动操作,这种情况是不允许出现的。为了克服按键触电机械抖动所致的检测误判,必须采用去抖动措施。可以从硬件和软件两方面予以考虑。硬件去抖动采用D触发器。软件去抖动采用延迟10ms再次判断法。实验中,我们采用软件去抖动。 2.1.4 语音系统电路
ISD1700 系列是华邦公司新推出的语音芯片,用来替代已经停产的ISD1400 系列及ISD2500 系列芯片。ISD1700 系列不仅在录音时间上有更多的选择(从20 秒到240 秒),而且在功能上继承14 及25 系列的所有录放功能,并增加了一些更加人性化的提示功能及对存储的精确操作。该芯片提供多项新功能,包括内置专利的多信息管理系统,
7
电子综合设计——打鼓游戏机设计
新信息提示(vAlert),双运作模式(独立&嵌入式),以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。
主控单片机主要通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1700进行串行通信。ISD1700作为从机,几乎所有的操作都可以通过这个SPI协议来完成。为了兼容独立按键模式,一些SPI命令:PLAY,REC,ERASE,FWD,RESET和GLOBAL_ERASE的运行类似于相应的独立按键模式的操作。另外,SET_PLAY,SET_REC,SET_ERASE命令允许用户指定录音、放音和擦除的开始和结束。此外,还有一些命令可以访问APC寄存器,用来设置芯片模拟输入的方式。
在本系统中,我们需要通过程序控制音乐的播放和停止,因此采用SPI接口模式与MCU连接。在调试中,我们可以采用独立按键录放音。芯片外围电路设计参考了官方的设计手册。电路图如下。
8
电子综合设计——打鼓游戏机设计
图5 语言系统电路图
2.1.5 LED发光二极管电路
发光二极管正向导通后,LED灯被点亮;反向截止,LED灯灭。我们四个LED发光二极管接到MCU的T7—T4口上,接100欧姆的电阻限流。当MCU输出为0时,LED灯被点亮。
图6 发光二极管电路图
2.2 软件方案验证
我们设定了三个难度等级,体现在数量和速度上不同。进入游戏,将显示初始化界面。然后选择难度,询问是否开始游戏。进入游戏后,利用随机函数每次产生一个鼓点,当到达一定范围内时,按键扫描,检测是否有键按下并判断是否等于当前鼓点值。如果正确,作加分处
9
电子综合设计——打鼓游戏机设计
理,进一步判断精确程度,如果非常精确,将给出相应提示。一旦按下退出键,则游戏马上结束。玩家在进行游戏的同时,将通过语音芯片播放背景音乐。每关游戏结束后,通关或者失败都将会给出相应的提示。
10
电子综合设计——打鼓游戏机设计
进入初始化界面选择难度是否进入游戏是随机产生鼓点并动态显示检测按键是否有键按下是是否是结束键否否是否与当前鼓点一致是是加分结束
图7 程序算法流程图
三 硬件制作
电路设计完成后要进行电路的安装,实验中我们采用面包板。在
11
电子综合设计——打鼓游戏机设计
安装时要注意以下几个问题。
(1)
准备好常用的工具和材料。要将各种电子元器件及结构各异的零部件装配c成符合要求的电子产品,一套基本的工具是必可不少的,如烙铁、钳子、改锥、镊子和焊锡。
(2)
所有电子元器件在安装前要全部测试一遍,有条件的还要进行元器件老化处理,以保证元器件的质量。
(3)
有极性的电子元器件安装时其标志最好方向一致,以便检查和替换。集成电路的方向要保持一致,以便正确布线和查线。
(4)
在面包板上组装电路时,为了便于检查,可根据连线的不同作用选择不同颜色的导线。如正电源采用红线,负电源采用蓝线,地线采用黑线,信号线采用黄线等。
(5)
布线要按信号的流向有序连接,连线要做到横平竖直,不允许跨接在集成电路上。另外,导线的选择要粗细适中,避免导线与面包板插孔之间接触不良。
电路安装完毕后,不要急于通电,首先要根据电路原理图认真地检查电路连接是否正确。主要直观检查电源、地线、信号线、元器件引脚之间有无短路,连线有无接触不良,元器件有无漏焊,二极管、三极管和电解电容的极性有无错误等。对于电子系统的调试,一般分为不通电检查,通电观察,分块调试,整机统调。
12
电子综合设计——打鼓游戏机设计
四 软件编程 4.1 LCD显示原理
在LCD显示控制中,我们采用并行方式。8位并行连接时序图如下:
RSVIH1VIL1TAHTASTPWTAHR/WETRDB0-DB7TDSWValiddataTHTC 图
8 MCU写资料到模块
RSVIH1VIL1TAHTASTRTPWTAHR/WETDDTHValiddataDB0-DB7TC 图9 MCU从模块读出资料
13
电子综合设计——打鼓游戏机设计
虽然LCD自带了中文字库,但由于要实现LCD的动态显示,所以我们必须采用绘图方式。绘图显示RAM提供64×32个位元组的记忆空间,最多可以控制256×64点的二维绘图缓冲空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个8位元的资料到绘图RAM,而地址计数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下: 1、 2、 3、 4、 5、 6、
关闭绘图显示功能。
先将水平的位元组坐标(X)写入绘图RAM地址; 再将垂直的坐标(Y)写入绘图RAM地址; 将D15——D8写入到RAM中; 将D7——D0写入到RAM中; 打开绘图显示功能。
4.2 游戏算法设计
我们设定了三个难度等级,体现在数量、速度和通过得分比列上不同。三个难度分别是初级,中级,高级。在这三个难度下,数量分别为10个,40个,80个;分别得分为4,25,60才能通关。同时,在产生鼓点的速度上也有所区别。鼓点的产生是采用随机方式。进入游戏,将显示初始化界面。然后进入难度选择,选择难度后,询问是否开始游戏。进入游戏后,利用随机函数每次产生一个鼓点,当到达一定范围内时,按键扫描,检测是否有键按下并判断是否等于当前鼓点值。如果正确,作加分处理,进一步判断精确程度,如果非常精确,
14
电子综合设计——打鼓游戏机设计
将给出相应提示。一旦按下退出键,则游戏马上结束。玩家在进行游戏的同时,将通过语音芯片播放背景音乐。每关游戏结束后,通关或者失败都将会给出相应的提示。PlayGame()函数的算法流程图如下。
15
电子综合设计——打鼓游戏机设计
开始随机产生0—3中的一个数作为鼓点根据随机产生的值在相应位置动态显示按键扫描判断是否是否结束键否在某一固定范围内时扫否描按键是否判断是否是当前鼓点值是是加分,进一步判断范围是显示“厉害”二字结束图10 PlayGame()函数算法流程图
16
电子综合设计——打鼓游戏机设计
初始化界面采用一幅128*64的图片
模提取软件提取图片数据。在LCD的绘图功能下显示。 五 课题总结
,利用字
通过在S12XDT512核心开发板和按键、语言系统、LCD等外围电路编程和调试,我们实现了打鼓游戏机的设计。整个游戏显示稳定,游戏界面效果好,具备一定的趣味性和可观赏性。系统具体实现了一下功能:
1.实现了LCD背景图像显示 2.实现了动画操作 3.能正确进行计分操作 4.能实现背景音乐的输出 5.有多种操作难度可选 6.具有操作准确度提示动画 7.能实现中途退出游戏 8.具有较好的游戏界面
9.利用LED发光二极管作为提示用,减低难度 10.能实现图片显示
虽然我们通过硬件电路设计,软件编程实现了打鼓游戏机,但是由于时间有限,我们还有很多功能不够完善,如音乐只有一首歌曲,长按按键会导致动态扫描速度变慢,不能同时产生多个鼓点等。这也是我们以后需要完善的地方。
17
电子综合设计——打鼓游戏机设计
六 心得体会
在进行算法设计时,一个小的细节问题就影响到设计的成功,如:我刚开始在PlayGame()函数中多次调用了整屏绘图函数,这样做导致的后果是屏幕不断的闪烁,严重影响视觉。首先我一直没有找到原因,后来通过每次运行一行程序发现在PlayGame()函数中每一次都要调用整屏绘图函数,整屏绘图刷新率低,容易产生闪烁现象。最后我在PlayGame()函数外面写了一个整屏绘图函数,而在PlayGame()函数里面只是对部分点进行修改,通过这种方式就解决了闪烁问题。这样一个小小的细节,让我懂得写程序要严谨,逻辑要清晰。同时要学会检查错误,排除错误。
在课程设计硬件实验中,遇到了一些问题,首先是布局问题,由于器件和管脚较多,为了使布局美观,在器件布局上画了些时间,在和同组员讨论后才完成布局。再者是焊接和连线,焊接和连线工作需要互相帮助才能避免发生错误,比如虚焊以及连接错误,我们在实验中就由于开关正反接错,在进行调试时无法识别按键。
通过本次实验,我们体会到团队合作是十分重要的,在自己出错时,队友可以及时的提出问题所在并且纠正。虽然遇到很多问题,但大家一起努力还是完成了任务。在整个课程设计中,我体会到了团队精神力量的重要性及细致严谨作风的必要性。在设计中,我了解了自己的不足,更重要的是了解到了自己以后要走的路还很长,但我会坚定不移的走下去,因为我非常热爱我的专业。 七 参考文献
18
电子综合设计——打鼓游戏机设计
[1]任勇,王永东,何伟.S12单片机原理及应用.重庆.重庆大学出版社,2010.
[2]王威.HCS12微控制器原理及应用.北京.北京航空航天大学出版社,2007. 八 附录 8.1元器件清单
元件名称 语音芯片 LCD液晶显示屏 按键 LED发光二极管 LED发光二极管 LED发光二极管 电阻 电阻 电阻 电阻 电容 电容 极性电容 极性电容 麦克风 喇叭 规格 ISD1760 12864-12 黄色 绿色 红色 100欧 1千欧 80千欧 4.7千欧 0.1uF 1uF 4.7uF 10uF 数量(个) 1 1 5 2 2 1 4 1 1 3 5 1 2 4 1 1 8.2MCU管脚连接
PA[7..0] PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 PE3 PE2 PT[7..4]
DB[7..0] E R/W RS PSB /RST 按键1 按键2 按键3 按键4 退出键 LED 19
电子综合设计——打鼓游戏机设计
PS7 SS PS6 SCLK PS5 MOSI PS4 MISO 8.3 实拍图片
初始化界面
选择难度界面
游戏界面 8.4 整机电路图
20
因篇幅问题不能全部显示,请点此查看更多更全内容