点阵屏游戏机设计_第1页
点阵屏游戏机设计_第2页
点阵屏游戏机设计_第3页
点阵屏游戏机设计_第4页
点阵屏游戏机设计_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[22]。此外,国外研究人员也关注点阵屏游戏机的交互方式和用户体验。他们研究并应用新的控制方法,如触摸屏、运动传感器和语音识别等,以提供更直观、更便捷的游戏操作体验。同时,他们还注重游戏机界面的设计和美学,以提升用户的视觉享受。国外研究人员在点阵屏游戏机设计领域取得了显著的进展,同时也面临一些挑战。例如,如何平衡游戏性能和功耗,如何实现更高的图形渲染质量,以及如何应对不同地区和文化对游戏需求的差异等。这些问题需要进一步的研究和探索。综上所述,国内外都对点阵屏游戏机设计进行了广泛的研究。研究人员关注硬件技术、软件开发和用户体验等方面,努力提供更丰富、创新和具有吸引力的游戏机产品。随着技术的不断进步和用户需求的变化,点阵屏游戏机设计领域将继续取得新的突破和发展。1.3主要研究内容本课题研究的内容为点阵屏游戏机设计。这套系统由按键、单片机STC15W408AS、8*8点阵屏和开关等组成。主控芯片采用STC15W408AS单片机,用于控制8*8点阵显示游戏的工作状态。通过按键操作,可以控制游戏的移动。贪吃蛇游戏中如果蛇头撞到墙壁或者咬到蛇身,则游戏会自动结束。当达到一定数量时,游戏会进入下一关卡,每过一关卡,游戏速度和难度都会增加,也可通过语音模块进行游戏的开始,结构框图如图所示:图1.1系统结构框图第2章系统的总体结构2.1设计方案本设计方案旨在介绍一套点阵屏游戏机的设计。该游戏机由按键、单片机STC15W408AS、8*8点阵屏和开关等组成,通过控制贪吃蛇的移动,玩家可以享受到经典游戏的乐趣。游戏具备多关卡功能,速度和难度逐级增加,同时还加入了语音模块,提供游戏开始的语音提示。系统组成:该游戏机由以下几个主要组件组成:按键:用于玩家控制贪吃蛇的移动,包括向上、向下、向左和向右的操作。单片机STC15W408AS:作为主控芯片,负责控制整个系统的工作状态。8*8点阵屏:用于显示贪吃蛇游戏的图像和界面。开关:用于开启和关闭游戏机的电源。语音模块:本游戏机还配备了语音模块,通过语音提示玩家游戏的开始。当玩家开启游戏机时,语音模块会发出欢迎词,并指导玩家按键开始游戏。数码管模块:用于显示记录游戏分数。游戏规则游戏移动控制:玩家通过按键操作控制游戏的移动方向,包括向上、向下、向左和向右或通过语音控制。游戏结束条件:如果贪吃蛇的蛇头撞到墙壁或者咬到自己的蛇身,则游戏自动结束。多关卡功能:当贪吃蛇吃到一定数量的食物时,游戏进入下一关卡。每过一关卡,游戏速度和难度都会增加,提供更具挑战性的游戏体验。1.理论知识准备阶段,了解并掌握有关课题的理论知识;2.确定系统各个模块,收集相关软硬件资料,并理清各个模块之间的关系;3.规划课题,确定系统组成结构,勾画出大体系统框架并提出原理框图;4.利用软件完成硬件电路部分设计并画出各部分电路图,将系统部件通过接口电路集合在一起;5.根据系统控制过程完成软件设计部分,绘制出主流程图;6.进行模拟仿真,检查系统是否能够按照要求实现控制功能,并整理论文。2.2技术路线(1)硬件部分需要单片机单片机STC15w408AS、按键、8*8点阵屏、开关、HDR-F-2.54语音模块。(2)软件平台程序用keil5;(3)画原理图用AD;(4)编程语言用C语言;2.3主要器件选择2.3.1单片机型号选择方案一:STC15W408AS是一款高性能、低功耗的8位单片机,由STC公司生产。该单片机采用了高速Flash存储器,可以实现快速启动和速度优化,同时还具备低功耗、高可靠性、高抗干扰性等特点,非常适合于嵌入式系统和智能控制领域的应用。该单片机主频达33MHz,Flash存储器8KB,RAM存储器512字节,支持UART、SPI、I2C、定时器和PWM等多种外设接口,可实现数据传输、定时控制和PWM输出等功能。STC15W408AS还具备较强的抗干扰性能,能够有效地抵御电磁干扰和静电干扰,保证了系统的稳定性和可靠性。同时,该单片机还支持多种编程方式,包括ISP编程、ICP编程、仿真编程等,方便了单片机的开发和调试。总之,STC15W408AS是一款非常优秀的8位单片机,具有高性能、低功耗、高可靠性、高抗干扰性等特点,广泛应用于智能控制、医疗设备、安防系统、家电控制等领域。方案二:采用89C51单片机,89C51是一种带有4K字节闪烁可编程可擦除只读存储器(FPEROM-FlashProgrammableandErasableReadOnlyMemory)的一种高性能、低电压CMOS8位微处理器。单片机的可擦除式只读存储器可以反复擦除1000次。该器件采用了ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。综上所述STC15W408AS单片机更适合用于对本设计游戏的运行状态进行控制,保证游戏的运行稳定性,还有更加丰富的接口和强大的处理能力。2.3.2屏幕型号选择方案一:LED8*8点阵屏。LED8*8点阵屏是一种常见的电子显示屏幕,由64个LED灯组成,可以显示数字、字母、符号等简单图形。它广泛应用于电子表格、计时器、温度计、计数器等电子设备中。LED8*8点阵屏的特点是体积小、重量轻、耗电低、寿命长、可靠性高、视觉效果好。它可以采用常用的扫描方式,如逐行扫描、逐列扫描等,通过改变每个LED灯的亮灭状态,实现不同的显示效果。LED8*8点阵屏的驱动方式可以使用常见的数字IC驱动,如MAX7219、TM1638等,也可以使用单片机控制,如51单片机、Arduino等。在控制方面,可以采用基于C语言、Python等编程语言的软件控制,也可以采用基于开源硬件平台的控制方式,如RaspberryPi等。LED点阵\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"显示系统中各模块的\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"显示方式有静态和动态显示两种。静态原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的信号,反复循环以上操作,就可显示各种图形或文字信息。方案二:OLED显示屏。OLED,有机发光二极管,采用十分薄的有机材料图层。当有电流通过时,这些有机材料就会发光,所以具有自发光性。同时也有更好的分辨率。综上所述8*8点阵屏具有像素点阵排列的特点,可以清晰地显示游戏中的图像和界面。考虑到贪吃蛇游戏的简单性,我们可以选择8*8点阵屏,同时也具备足够的分辨率来显示游戏中各种元素的变化,也更容易进行编程。

第3章系统的硬件部分设计3.1系统总体设计本课题研究的内容为点阵屏游戏机设计。该套系统主要由按键、单片机STC15w408AS、8*8点阵屏、开关等部分组成;采用STC15w408AS单片机作为主控芯片8*8点阵显示贪吃蛇工作状态,通过按键可以控制贪吃蛇的移动如果蛇头撞墙和咬到蛇身就会自动结束游戏如果达到一定数量进入下一个每过一关速度难度都会增加,采用SLR0283CRC1BD-3.5数码管显示模块显示游戏分数,也可用HDR-F-2.54语音模块来进行对游戏的控制。实现的功能如下:1.游戏机内置4个游戏:俄罗斯方块、贪吃蛇、赛车、打飞机;2.游戏机选用点阵屏设计,可调节屏幕亮度;3.游戏机可开启或关闭游戏声音;4.通过按键进行游戏选择;5.俄罗斯方块操作说明:通过四个按键完成方块左右移动及方块加速掉落和旋转。6.贪吃蛇操作说明:通过四个按键改变贪吃蛇移动方向。7.赛车操作说明:通过两个按键控制游戏内赛车左右移动8.打飞机操作说明:通过两个按键控制游戏内飞机左右移动,一个按键为确定键,用来控制发射子弹。9.声音控制游戏进行。图3.1系统总体原理图3.2系统的主要功能模块设计3.2.1单片机模块设计图3.2单片机原理图图3.3单片机最小系统原理图单片机的时钟电路包括外部晶振和与之相关的电路元件。外部晶振是为了提供稳定的时钟信号,使单片机能够按照一定的时间步进运行。时钟电路主要由以下几个部分组成:晶体振荡电路:晶体振荡电路是用来驱动晶振的电路,它包括晶振引脚和相关的电容。晶振引脚通过晶振电路连接到晶振上,以便通过晶振产生稳定的振荡信号。外部电容:为了保证晶振电路的正常工作,需要在晶振的两个引脚之间连接一个适当的电容。这个电容通常称为负载电容,它的容值一般在10pF到30pF之间,具体取值根据晶振的要求而定。单片机的复位电路是单片机系统中的一个重要组成部分,它用于在特定条件下将单片机恢复到初始状态。以下是对复位电路的介绍:复位信号源:复位信号可以来自于多个源头,包括外部复位按键、电源上电和其他特殊的复位源。外部复位按键是最常见的复位信号源,当按下复位按键时,会产生一个低电平的复位信号。电源上电时也会产生一个短暂的复位信号,以确保系统在上电时处于初始状态。复位电路:单片机的复位电路通常由几个主要元件组成,包括复位按键、电容和电阻。复位按键用于手动触发复位信号,当按下按键时,复位信号被拉低。为了防止复位信号的抖动,一般会使用电容和电阻组成的RC滤波电路。该电路可以平滑复位信号,防止由于按键抖动而产生误触发。复位控制器:在单片机内部,有一个复位控制器用于接收外部复位信号并对单片机进行复位操作。复位控制器负责将单片机的内部寄存器和各个模块恢复到初始状态。它会监测复位信号的状态,并在接收到复位信号时将单片机的执行逻辑置为初始状态。合理的复位电路设计能够确保系统在特定条件下能够可靠地进行复位,并在复位后恢复到正确的工作状态。在设计复位电路时,需要考虑电源稳定性、复位信号的抖动、复位向量等因素,以保证单片机系统的正常运行。3.2.2蜂鸣器模块设计图3.4蜂鸣器模块设计蜂鸣器是一种常见的电子发声器件,广泛应用于各种电子设备中,如计算机、打印机、复印机、报警器、玩具、汽车电子设备、电话机、时器等。它通常采用压供电,由内部的振荡电路驱动发出蜂鸣声。根据类型不同,蜂鸣器主要分为内置振荡器和外接振荡器两种。在电路中,通常用字母“H”或“HA”(也有其他标准)来表示蜂鸣器。通常,蜂鸣器都有一个或多个按键来控制其发声。对于内置振荡器的蜂鸣器,只需要通上电源即可发声,但对于需要外接振荡器的蜂鸣器,电阻一般为32欧姆左右,因此不能直接使用。下面为蜂鸣器模块硬件电路设计:1.蜂鸣器连接:将蜂鸣器的正极连接到电源的正极(通常是Vcc),将蜂鸣器的负极连接到电路的引脚。2.驱动电路:为了驱动蜂鸣器,通常需要使用一个驱动电路,可以使用以下两种方式之一:a.使用可控电流源驱动:将一个PNP型晶体管的集电极连接到电源的正极。将蜂鸣器的负极连接到PNP晶体管的发射极。将PNP晶体管的基极通过一个适当的电阻连接到微控制器或其他信号源。确保信号源输出高电平时,PNP晶体管饱和,电流通过蜂鸣器,产生声音。b.使用驱动芯片:使用专门设计的驱动芯片。将蜂鸣器的负极连接到驱动芯片的输出引脚。连接适当的电容和电阻以设置驱动芯片的频率和占空比。3.控制信号:如果使用微控制器或其他控制器来控制蜂鸣器模块,将控制器的输出引脚连接到驱动电路的输入引脚。如果只需要简单的开关控制,可以将控制信号直接连接到驱动电路的输入引脚。3.2.3USB供电模块设计图3.5USB供电模块设计USB是一个外部总线标准,用于连接和通讯电脑与设备。USB采用四线电缆,其中两根用于传送数据的串行通道,另两根为下游设备提供电源。USB总线可以自动地在所兼容的传输模式中根据外设情况动态转换传输速率,是基于令牌的总线,类似于网络或FDDI基于令牌的总线。USB主控制器广播令牌,总线上设备通过接收或发送数据给主机来响应。USB还通过支持悬挂/恢复操作来管理USB总线电源。3.2.4LED8*8点阵屏模块设计以下是LED8*8点阵屏模块的基本硬件电路设计:驱动电路:LED点阵屏通常使用行列扫描的方法进行驱动。行扫描驱动:将点阵屏的行引脚连接到微控制器或其他行扫描驱动芯片的输出引脚,将行扫描驱动芯片的控制引脚连接到微控制器或其他时序控制信号源的引脚。通过控制行扫描驱动芯片的控制引脚,可以逐行选择要点亮的LED。列扫描驱动:将点阵屏的列引脚连接到LED驱动芯片的输出引脚,将LED驱动芯片的控制引脚连接到微控制器或其他时序控制信号源的引脚。通过控制LED驱动芯片的控制引脚,可以逐列选择要点亮的LED。驱动芯片:为了简化驱动过程,可以采用专门设计的驱动芯片,来实现行列扫描驱动和控制LED点亮的功能。控制信号:如果需要使用微控制器或其他控制器来控制点阵屏模块,应将控制器的输出引脚连接到驱动电路的输入引脚。控制信号可以用于选择要点亮的行和列。这样设计的硬件电路能够有效地驱动LED点阵屏,使其按照所选择的行和列点亮相应的LED,从而形成图案或文字显示。图3.6LED8*8点阵屏模块原理图设计3.2.5HDR-F-2.54语音模块设计HDR-F-2.54语音模块是一种基于HDR技术的音频模块,可用于无线语音传输应用。它采用2.54mm间距接口,可以方便地与其他电子元件连接。该模块采用高速数据传输技术,可在传输电话语音的基础上,实现高速数据通信。HDR-F-2.54语音模块可以实现传输率高达2.4Mbps,成本低、功能强,适用于多种固定和移动通信设备,如移动电话、手持计算机和笔记本电脑无线调制解调器等。该模块支持互联网通信协议,可以实现高速数据传输和语音通信,为无线语音传输应用提供了高效可靠的解决方案。HDR(高速数据传输技术)是一种针对CDMA网络开发的高速无线接入技术,它可以满足高速数据通信需求,不仅局限于传输电话语音。该技术是在第三代(3G)移动电话IMT-2000的无线存取方式采用CDMA后,为满足高速数据通信需求而推出的。在引入该技术的过程中,cdma2000阵营提出了多个方案,其中HDR是由美国高通公司提出的一种方案。HDR技术成本低、功能强,适用于多种固定和移动通信设备,如移动电话、手持计算机和笔记本电脑无线调制解调器等,并支持互联网通信协议。预计该技术将于2002年投入商用,可以实现高达2.4Mbps的传输速率。图3.7语音模块设计HDR-F-2.54语音模块的硬件电路设计如下:首先,进行电源连接。将语音模块的电源引脚(通常是Vcc和GND)连接到电源的正极和负极,以确保模块能够正常供电。接下来,考虑音频输入。将音频输入信号源(如麦克风或音频接口)连接到语音模块的音频输入引脚,以实现音频信号的输入。然后,进行扬声器连接。将扬声器的正极连接到语音模块的扬声器引脚,将扬声器的负极连接到电源的负极或语音模块的GND引脚,以便使扬声器能够发出音频输出。如果需要使用控制信号来操纵语音模块的功能,我们可以将控制信号源(如微控制器或按键)的输出引脚连接到语音模块的控制引脚。这些控制引脚可能包括播放、停止、音量调节等功能,通过控制信号,我们可以实现对语音模块的灵活操作。最后,根据语音模块的规格和需求,可能需要添加一些附加组件,例如电容、电阻、滤波器等,以进一步提高音频质量、过滤噪音等。3.2.6按键模块设计按钮是一种常用的控制电器元件,常用来接通或断开‘控制电路’其中电流很小),从而达到控制电动机或其他电气设备运行目的的一种开关。按钮是一种\t"/item/%E6%8C%89%E9%92%AE/_blank"人工控制的\t"/item/%E6%8C%89%E9%92%AE/_blank"主令电器。主要用来发布操作命令,接通或开断控制电路,控制机械与电气设备的运行。图3.8按键模块原理3.2.7数码管模块设计在设计SLR0283CRC1BD-3.5数码管显示模块的硬件电路时,需要按照以下步骤进行:首先,通过查阅该模块的规格和数据手册,确定其电源需求。通常情况下,该数码管显示模块需要直流电源供电,因此需要确认所需的电压和电流。其次,根据规格和数据手册,确定需要哪些控制信号,例如时钟信号、数据信号和使能信号等。为了生成这些信号,可以使用适当的接口电路,例如逻辑门、触发器或移位寄存器,并将它们连接到数码管显示模块的相应引脚上。接下来,连接数码管。SLR0283CRC1BD-3.5数码管显示模块通常包含多个数码管,每个数码管都有多个段(如A、B、C、D、E、F、G)和一个共阳(CA)或共阴(CC)引脚。为了连接数码管的各个段和共阳/共阴引脚,可以使用适当的电流限制电阻(如果需要)和逻辑门(例如解码器或驱动器)。针对设计需求中的外部输入接口,例如按钮或开关,需要确定是否需要将其集成到电路中。在连接外部输入接口时,需要使用适当的电阻、去抖动电路和输入保护电路,将其与控制电路连接起来。为了保护数码管显示模块和其他电路免受意外损坏,考虑添加适当的保护电路,例如过流保护、过压保护和反向极性保护。此外,确保在设计中考虑电路的稳定性和抗干扰能力,例如添加适当的滤波电容、终端电阻和地线布线。在完成电路连接后,进行布线设计,并确保布线符合电路设计的要求,最小化干扰和串扰的发生。如果需要,可以设计电路板(PCB)以容纳所有电子元件,并确保适当的尺寸、层次结构和功耗分布。图3.9数码管模块原理第4章系统的软件设计4.1软件的主要流程通过USB电源进行供电,首先进行的是的系统单片机初始化,初始化不成功时,继续进行初始化直至成功,初始化成功后,我们可以用语音模块开始进行游戏,通过按键给单片机指令,可以控制贪吃蛇或其他游戏的移动的方向,同时我们可以在点阵屏上看到我们的游戏内容,当我们游戏通过或者未通过时我们的蜂鸣器会进行响应。图4.1主程序流程图4.2LED8*8点阵屏模块的软件设计通过USB电源进行供电,初始化不成功时,继续进行初始化直至成功,初始化成功后,我们可以开始进行游戏,通过按键给单片机指令,可以控制贪吃蛇的方向,同时我们可以在点阵屏上看到我们的游戏内容。图4.2LED8*8点阵屏软件设计4.3HDR-F-2.54语音模块的软件设计我们可以用语音模块来语音命令开始进行游戏。DR-F-2.54语音模块的软件设计涉及以下几个方面:引脚配置:首先,需要确定语音模块所连接的引脚,并在软件中进行引脚配置。根据模块规格和数据手册,选择合适的GPIO引脚,并设置其输入/输出模式和初始状态。音频输入处理:如果语音模块支持外部音频输入,需要编写相应的音频输入处理代码。这可能涉及配置模块的音频输入接口,设置采样率、位深度等参数,并编写音频缓冲区的管理和处理逻辑。控制指令交互:通过控制指令与语音模块进行交互是常见的软件设计要求。根据模块的指令集和通信接口(如串口、I2C等),编写相应的代码以实现与模块的通信。这可能包括发送命令、接收响应、解析数据等操作。音频输出控制:为了控制语音模块的音频输出,需要编写相应的代码来控制声音的播放、停止、音量调节等功能。这可能涉及与模块进行通信,并发送特定的指令来控制音频输出的状态和参数。用户界面(可选):如果需要通过用户界面来控制语音模块,可以开发相应的用户界面,例如图形用户界面(GUI)或命令行界面(CLI)。用户界面可以用于选择音频文件、控制音频播放、调节音量等操作,并与语音模块的控制指令进行交互。调试和错误处理:在软件设计过程中,考虑适当的调试和错误处理机制非常重要。这可能包括错误检测、异常处理、日志记录等,以帮助识别和解决潜在的问题,并提高软件的可靠性和稳定性。图4.3HDR-F-2.54语音模块软件设计4.4蜂鸣器模块的软件设计可以用语音模块开始进行游戏,通过按键给单片机指令,可以控制贪吃蛇或其他游戏的移动的方向,同时我可以在点阵屏上看到我们的游戏内容,当我们游戏通过或者未通过时我们的蜂鸣器会进行响应。图4.4蜂鸣器模块软件设计蜂鸣器模块的软件设计通常涉及以下几个方面:引脚配置:首先,需要确定蜂鸣器模块所连接的引脚,并在软件中对这些引脚进行配置。这通常涉及选择合适的GPIO引脚,并设置其输入/输出模式和初始状态。驱动程序:为了控制蜂鸣器模块发出声音,需要编写相应的驱动程序。这些驱动程序通常包括以下功能:打开/关闭蜂鸣器:通过控制GPIO引脚的电平来控制蜂鸣器的开关状态。打开时,蜂鸣器发出声音;关闭时,蜂鸣器停止发声。发声模式:根据需要,可以实现不同的发声模式,如连续发声、间隔发声、特定频率发声等。这通常涉及使用定时器或延时函数来控制蜂鸣器的开关时间和频率。控制逻辑:根据具体应用的需求,可能需要设计一些控制逻辑来触发蜂鸣器的声音。这可以通过与其他传感器或设备的交互,或根据特定的条件触发来实现。用户界面:如果需要通过用户界面来控制蜂鸣器模块,可以开发相应的用户界面,并与驱动程序进行交互。这可以是一个物理按钮、开关或通过软件实现的图形用户界面(GUI)。调试和错误处理:在软件设计过程中,需要考虑适当的调试和错误处理机制。这可以包括错误检测、异常处理和日志记录,以帮助识别和解决潜在的问题。4.5按键模块的软件设计通过USB电源进行供电,首先进行的是系统单片机初始化,初始化不成功时,继续进行初始化直至成功,初始化成功后,我们可以开始进行游戏,通过按键给单片机指令,可以控制贪吃蛇的方向,同时我们可以在点阵屏上看到我们的游戏内容。图4.5按键模块软件设计4.6数码管模块的软件设计SLR0283CRC1BD-3.5数码管显示模块的软件设计流程如下:首先,确定开发环境和编程语言,根据个人偏好和项目需求选择适合的开发环境,例如Arduino、C/C++或Python等。然后,根据数码管显示模块的规格和数据手册,确定所需的库和依赖项,以支持对数码管的控制功能。接下来,根据数码管显示模块的引脚布局,初始化相关引脚并声明所需的变量。这些变量可以包括控制信号的引脚和数码管段的引脚等。确保正确配置引脚和变量,以便后续的控制和显示操作。根据您的需求,设置数码管的显示模式,可以是共阳(CA)或共阴(CC)模式。这将影响到后续编写的显示函数中的引脚控制方式。接着,编写显示函数,用于在数码管上显示数字或字符。通过控制相应的引脚,打开或关闭数码管的各个段,以呈现所需的数字或字符。根据数码管的引脚布局,确保准确地控制每个段的状态,从而实现正确的显示效果。如果有外部输入接口,如按钮或开关,编写代码来检测输入状态并执行相应的操作。例如,可以编写代码来控制数码管的亮度、切换显示模式或调整显示内容等,以实现更丰富的用户交互。根据具体的应用需求,添加逻辑和控制代码。根据数码管显示模块的功能,可以编写代码来实现时钟功能、倒计时功能、温度显示等,以满足项目的要求。在完成软件代码编写后,进行调试和测试。连接数码管显示模块和相应的硬件,验证软件的功能和性能是否符合预期。使用调试工具和监视器,检查程序的执行情况和数据传输,确保一切正常工作。图4.6数码管模块软件设计第5章系统测试5.1系统实物图图5.1系统实物图5.2测试步骤图5.2测试步骤图用USB电源供电后,我们开始进入游戏,有菜单设置按键,上下左右按键。当我们选择第一个游戏是贪吃蛇,我们右边的四个按键就可以控制蛇的移动方向,使其朝着我们想要的方向去运行。当我们选择第二个游戏俄罗斯方块时,我们的左右按键可以控制方块下落的方向,让他下落到我们想要的位置,还有按键可以改变它的形状。

第6章总结与展望6.1总结在该设计项目中,我们主要针对硬件方面进行了设计,包括单片机的最小系统、电机驱动电路以及蜂鸣器报警电路。同时,我们还进行了软件设计,主要是借助各种资料和资源,开发了多款程序,如贪吃蛇、俄罗斯方块等,以实现系统的多样化功能。在整个设计过程中,我们通过一块开发板和Keil、STC以及自己搭建的外围电路进行了调试,不断地进行优化和改进,最终实现了一个功能强大、性价比高、操作简便的电子仪器仪表产品。该产品的市场前景广阔,具有良好的推广和应用价值。我们相信,通过不断的创新和优化,该产品将在未来的市场竞争中占据一席之地。6.2展望基于单片机的点阵屏游戏机是一项新兴的电子产品,具有广阔的市场前景和应用前景。展望未来,这种游戏机有很大的发展潜力。首先,随着科技的不断进步和市场需求的不断增长,点阵屏游戏机的功能将得到不断的完善和提升,可以加入更多的游戏、更多的音效和更丰富的交互方式,为用户提供更加丰富、更加有趣的游戏体验。其次,随着人们对健康的关注度越来越高,点阵屏游戏机可以加入更多的健康功能,例如运动监测、睡眠监测、心率检测等,以帮助用户更好地了解和管理自己的身体健康。此外,点阵屏游戏机还可以与智能家居、智能办公等领域相结合,通过蓝牙、Wi-Fi等无线通信技术实现智能互联,为用户提供更加便捷、智能的生活体验。最后,随着人工智能技术的不断发展,点阵屏游戏机可以加入更加智能化的功能,例如人脸识别、语音交互等,以满足用户对高端智能产品的需求。因此,基于单片机的点阵屏游戏机在未来的发展中将有着广阔的市场前景和应用前景,具有非常大的潜力和价值。

参考文献李倩.贪吃蛇游戏设计[J].无线互联科技,2019,16(02):162-163.李雨哲,孙炼.基于C语言的贪吃蛇游戏设计[J].河南科技,2020(07):31-33.孙岚岚,姚世豪,王瑶,高利杰,范忠良.基于STC15系列的多功能单片机开发板[J].甘肃科技纵横,2021,50(12):1-3.吕橙.贪吃蛇游戏的开发设计[J].电脑知识与技术,2021,17(03):118-121.DOI:10.14004/ki.ckt.2021.0147.李营,吕兆承,陈帅,权循忠.基于FPGA的贪吃蛇游戏设计与实现[J].通化师范学院学报,2020,41(08):14-18.DOI:10.13877/22-1284.2020.08.003.韦翠华.基于单片机与三维建模的贪吃蛇游戏机的综合设计[J].电子技术与软件工程,2019(20):245-246.李晓彤,罗杉,王华阳,罗劲睿,张蕾.基于51单片机的综合游戏机的设计与实现[J].工业控制计算机,2018,31(07):143-145+153.施瑶.基于HTML5的贪吃蛇游戏设计与实现[J].福建电脑,2018,34(07):118-119.DOI:10.16707/ki.fjpc.2018.07.061.汪源,李宛聪,黄文敏,白金妍.一种基于LabVIEW的贪吃蛇游戏的设计[J].信息与电脑(理论版),2018(09):102-103+106.郑馨,江克勤,程玉胜.贪吃蛇游戏在线性数据结构中的案例教学[J].安庆师范大学学报(自然科学版),2018,24(04):117-119+128.DOI:10.13757/34-1328/n.2018.04.026.吕达,池文慧.基于STC51单片机的LED点阵游戏机的设计开发[J].西部皮革,2018,40(04):64.王静霞,刘俐.基于单片机控制的简易打字游戏机系统设计[J].电子制作,2016(13):17-18.DOI:10.16589/11-3571/tn.2016.13.006.李忠玉,刘旭.基于STC15系列单片机的球类计分系统硬件设计与实现[J].现代计算机(专业版),2018(12):80-83.韦翠华.基于单片机与三维建模的贪吃蛇游戏机的综合设计[J].电子技术与软件工程,2019(20):245-246.徐连喜.STC15系列单片机在智能停电保护装置中的应用[J].电子技术与软件工程,2021(12):84-85.张文华,廖俊杰,付乙眉.基于C语言的贪吃蛇游戏的简单设计与实现[J].智富时代,2019(03):183.李雨哲,孙炼.基于C语言的贪吃蛇游戏设计[J].河南科技,2020(07):31-33.刘帅,张冬,何建国,张晓彪,卫婷婷,李晓林.基于AT89C52单片机的LCD12864显示设计及贪吃蛇游戏算法研究[J].科技通报,2018,34(12):192-197.DOI:10.13774/ki.kjtb.2018.12.040.LiuKeshun,ZhangXijun,ZhouXing.ResearchonAnalysisandClassificationofVulnerabilityofElectromagneticPulsewithaSTM32Single-ChipMicrocomputer[J].SCIENTIFICPROGRAMMING,2021,2021.Edidas.InfluenceOftheSimulationProgramMethodstotheStudentsLearningOutcomesontheSubjectOftheMicrocontrollerSystem[J].JournalofPhysics:ConferenceSeries,2019,1387.NationalCentralUniversity;PatentIssuedforMulti-MicrocontrollerSystem,InternetOfThingsGatewaySystem,AndControlFlowOfMulti-MicrocontrollerSystemBasedOnNetworkBridge(USPTO10,313,432)[J].ElectronicsNewsweekly,2019.PatmantharaSyaad,YulianaOkiDwi,DwiyantoFelixAndika,WibawaAjiPrasetya.TheUseofLadderSnakeGamestoImproveLearningOutcomesinComputerNetworking[J].InternationalJournalofEmergingTechnologiesinLearning(iJET),2019,14(21).EkdahlAnnaLena.DifferentLearningPossibilitiesfromtheSameActivity—SwedishPreschoolTeachers’EnactmentofaNumberRelationActivity[J].ScandinavianJournalofEducationalResearch,2020,65(4).

附录电路图源代码#include"config.h"volatileuint8datakeypad=K_NULL; //键盘状态volatileuint8datakeycont=0; //键盘检测消抖定时器volatileuint16datatms=0; //1msT0定时器bitkey_state=0; //按键状态uint16dataspeeds=0; //游戏速度uint16datascores=0; //游戏计分bitGlife=1; //游戏生命bitsound_ON=1; //音效开关uint8dataduty=80; //PWM,默认亮度uint8dataDispRAM[16]={0};uint8codebitman[8]={1,2,4,8,16,32,64,128};//用于数字序号定位0~7bit位uint8codenum[10][5]= //阳码{ {0x7,0x5,0x5,0x5,0x7}, {0x2,0x6,0x2,0x2,0x7}, {0x7,0x1,0x7,0x4,0x7}, {0x7,0x1,0x7,0x1,0x7}, {0x5,0x5,0x7,0x1,0x1}, {0x7,0x4,0x7,0x1,0x7}, {0x7,0x4,0x7,0x5,0x7}, {0x7,0x1,0x1,0x1,0x1}, {0x7,0x5,0x7,0x5,0x7}, {0x7,0x5,0x7,0x1,0x7}};/*********************PORT_INIT********************/voidPort_Init(){ P0M0=0Xff; P0M1=0X00; P1M0=0Xff; P1M1=0X00; P2M0=0Xff; P2M1=0X00; P3M0=0X00; P3M1=0X00; P4M0=0Xff; P4M1=0X00; P5M0=0Xff; P5M1=0X00;}voidInit_Timer(){/******************定时器0中断设置**********************/ AUXR|=0x80;//定时器0为1T模式TMOD=0x00;//设置定时器为模式0(16位自动重装载)TL0=T1MS;//初始化计时值TH0=T1MS>>8;TR0=1;//定时器0开始计时ET0=1;//使能定时器0中断 /*****************外部中断设置*************************/ IT0=1;//设置INT0下降沿触发EX0=1;//使能外部中断INT0 IT1=1;//设置INT1下降沿触发EX1=1;//使能外部中断INT1 INT_CLKO|=0x70;//使能INT2,INT3,INT4(EX4=1,EX3=1,EX2=1 EA=1; }voidArray_CLR(uint8*p){ uint8i=0; while(i!=16) { p[i]=0x00; i++; }}voidShowScore(uintscore){ uint8i; uint8qx,bx,sx,gx; qx=score/1000; bx=score%1000/100; sx=score%100/10; gx=score%10; Array_CLR(DispRAM); for(i=0;i<5;i++) DispRAM[8-i]=(num[sx][i]<<4)|(num[gx][i]); for(i=0;i<5;i++) DispRAM[14-i]=(num[qx][i]<<5)|(num[bx][i]<<1); // MatxDisp(DispRAM,duty);}voidmain(){ Port_Init(); Sound_Init(); Init_Timer(); Sound_Tone(1,14,5);//滴 srand(TL0); delayms(100); Play_Music(sound_game_start); Flash_Screen_Clear(); while(1) { tms=0; keypad=K_NULL;//清除按键状态 switch(GUI_Main()) //进入用户游戏选择界面,返回选择的游戏 { case1: Tetris_Game(); break; case2: Snake_Game(); break; case3: RAC_Game(); break; case4: Shot_Game(); break; } Play_Music(sound_game_over); Flash_Screen_Clear(); ShowScore(scores); //将分数载入显存 delayms(300); keypad=K_NULL; while(keypad!=K_UP) //在没按下OK键时保持分数显示 { MatxDisp(DispRAM,duty); SMG_Display(scores,duty); } } }/*Timer0interruptroutine*/voidT0_Timer_1ms_int()interrupt1using1{ if(tms<0xfffe) tms++; //防止溢出 if(key_state){if(!--keycont)key_state=0;} if(PIN_TR2)//TR2如果打开,则开始播放音效 { if(!sound_cnt_time--) { TR2_OFF; beep=1; if(music_p[s_p][1]) { Sound_Tone(sound_ON,music_p[s_p][0],music_p[s_p][1]); s_p++;//自动装载下一个音符,实现音效与游戏“同时”运行 } } } if(KEY_DOWN==0&KEY_UP==0) IAP_CONTR=0x60;//软件复位下载程序}voidT2_Timer_Sound_freq()interrupt12//中断入口{beep=~beep;//蜂鸣器频率震动}uint8Get_Kvuale(uint8key_delay)//键值消抖处理,参数为灵敏度调节{ uint8kvuale=K_NULL; //返回的初始值为空值 if(keypad!=K_NULL) //当键值不为NULL时,说明有按键按下 { if(!key_state) //当按键状态位state为0时说明是第一次触发有效,为1时为重复触发 { key_state=1; //置1,防止重复触发 kvuale=keypad;//获得读取键值 keycont=key_delay;//载入消抖时间 } keypad=K_NULL; //清楚键值 } returnkvuale;}/*********外部中断按键区**********/voidexint0()interrupt0//INT0{ keypad=0;}voidexint1()interrupt2//INT1{ keypad=1; }voidexint2()interrupt10//INT2{ keypad=2;}voidexint3()interrupt11//INT3{ keypad=3;}voidexint4()interrupt16//INT4{ keypad=4;}/* 2014-1-2600:00:00 :完成贪吃蛇游戏模型 2014-3-823:27:05 :增加游戏会随着吃的食物的增加而加快游戏速度 2014-3-1520:06:15 :进行实体硬件测剩,运行良好,但贪吃蛇结构设置太耗RAM,将进行优化。*/#include"config.h"#defineNORSPEED360#defineASPEED100#defineWIDTH8 //游戏屏幕宽度#defineLENGTH16 //游戏屏幕长度staticstructFood{uint8x;//食物的横坐标uint8y;//食物的纵坐标}food;structSnakesnake;enumdirec{up,down,left,right};//蛇的运动方向staticvoidSnake_Init(); //初始化游戏staticvoidSnake_Disp(); //游戏显示staticvoidSnake_Run(); //蛇向前走一步staticvoidCreate_Food(); //随机生成食物staticvoidCreate_Food(){ uint8i; food.x=rand()%WIDTH; //范围1-16; food.y=rand()%LENGTH; //获得随机数种子;//用计数器作为随机数发生器 for(i=1;i<(snake.node);i++)//检测产生的食物是否与蛇本身重叠 { if((food.x==snake.x[i])&&(food.y==snake.y[i])) Create_Food(); //重叠则重新成生 }}staticvoidSnake_Init(){ uint8c; for(c=0;c<MAX_SNAKE;c++)//清除内存数据 { snake.x[c]=-1; snake.y[c]=-1; } snake.life=1; //赋予蛇生命 snake.node=3; //默认长度3节 snake.direc=up;//初始方向 snake.x[0]=4; snake.y[0]=5; snake.x[1]=4; snake.y[1]=4; snake.x[2]=4; snake.y[2]=3; speeds=NORSPEED; //游戏速度 tms=0; scores=0; Create_Food(); //生成第一个食物}staticvoidSnake_Run() //蛇爬行算法{ uint8i; for(i=(snake.node-1);i>0;i--) //蛇头作为前进引导,长江后浪推前浪 { snake.y[i]=snake.y[i-1]; snake.x[i]=snake.x[i-1]; } switch(snake.direc) //根据蛇的方向标前进 { caseup: snake.y[0]+=1; break; casedown: snake.y[0]-=1; break; caseleft: snake.x[0]-=1; break; caseright: snake.x[0]+=1; break; }}staticvoidSnake_Disp() //游戏画面显示{ uint8p=16;// for(p=0;p<snake.node;p++)//绘制蛇图像// { // delayus(500-duty);// DisPoint(snake.x[p],snake.y[p]);// delayus(duty/5);// cdata=0xff;// }// DisPoint(food.x,food.y);//绘制食物图像// delayus(duty);// cdata=0xff;// // for(i=0;i<16;i++)// {// DispRAM[i]=0;// } while(p--)DispRAM[p]=0; //清除缓存 for(p=0;p<snake.node;p++) //写入新缓存 { DispRAM[snake.y[p]]|=0x80>>(snake.x[p]); }// DispRAM[food.y]|=0x80>>(food.x); MatxDisp(DispRAM,duty); DisPoint(7-food.x,food.y); delayus(duty);}voidSnake_Game() //游戏过程{ Snake_Init(); //初始化游戏 Play_Music(sound_canon); while(snake.life) //有生命,便可玩 { uint8i; switch(keypad)//直接读取键值,贪吃蛇不需要消抖 { caseK_UP: if((snake.direc==left)||(snake.direc==right)) snake.direc=up; //按下UP键时,只有蛇在水平方向时才能改变 break; caseK_DOWN:if((snake.direc==left)||(snake.direc==right)) snake.direc=down; //按下DOWN键时,只有蛇在水平方向时才能改变 break; caseK_LEFT:if((snake.direc==up)||(snake.direc==down)) snake.direc=left; //按下left键时,只有蛇在垂直方向时才能改变 break; caseK_RIGHT:if((snake.direc==up)||(snake.direc==down)) snake.direc=right; //按下right键时,只有蛇在垂直方向时才能改变 break; default: break; } if(KEY_OK==0)speeds=ASPEED;//加速键 elsespeeds=NORSPEED; keypad=K_NULL; if(tms>speeds) //半秒前进一格 { tms=0; Snake_Run(); //无聊散步 } if((snake.x[0]==food.x)&&(snake.y[0]==food.y))//是否吃到食物 { Sound_Tone(sound_ON,4,5);// getfood=1;//直接在此增加蛇长度会在下一个显示扫描产生一个原有数据留影,故通过加长 snake.node++;// game_speed-=10; //每吃一个食物增加10点速度 Create_Food(); //产生新食物 } if((snake.x[0]>WIDTH-1)||(snake.x[0]<0)||(snake.y[0]>LENGTH-1)||(snake.y[0]<0))//是否碰壁 { snake.life=0; //蛇碰到墙壁死亡 } for(i=3;i<snake.node;i++)//从蛇的第四节开始判断是否撞到自己了,因为蛇头不可能撞到二三四节 { if((snake.x[i]==snake.x[0])&&(snake.y[i]==snake.y[0]))//是否自残 snake.life=0; //蛇头碰到自身死亡 } Snake_Disp(); //显示游戏图像 scores=snake.node-3; SMG_Display(scores,duty); } scores=snake.node-3; TR2_OFF;}#include"config.h"staticvoidDelay1us() //@33.000MHz{ unsignedchari; _nop_(); _nop_(); _nop_(); i=5; while(--i);}staticvoidDelay1ms() //@33.000MHz{ unsignedchari,j; i=33; j=22; do { while(--j); }while(--i);}voiddelayus(unsignedintn){ while(n--) Delay1us();}voiddelayms(unsignedintn){ while(n--) Delay1ms();}#include"config.h"#defineA 0#defineB 1#defineON 1 //共阴voidData_CLR(bitab) //硬件上的原因,点阵共阳,数码管共阴,所以带参{ LED_D0=ab;LED_D1=ab;LED_D2=ab;LED_D3=ab; LED_D4=ab;LED_D5=ab;LED_D6=ab;LED_D7=ab;}voidROW_data(uint8rdata)//行选择模块{ switch(rdata) { case0:LED_R16=0;LED_R1=1; break; case1:LED_R1 =0;LED_R2=1; break; case2:LED_R2 =0;LED_R3=1; break; case3:LED_R3 =0;LED_R4=1; break; case4:LED_R4 =0;LED_R5=1; break; case5:LED_R5 =0;LED_R6=1; break; case6:LED_R6 =0;LED_R7=1; break; case7:LED_R7 =0;LED_R8=1; break; case8:LED_R8 =0;LED_R9=1; break; case9:LED_R9 =0;LED_R10=1; break; case10:LED_R10 =0;LED_R11=1; break; case11:LED_R11 =0;LED_R12=1; break; case12:LED_R12 =0;LED_R13=1; break; case13:LED_R13 =0;LED_R14=1; break; case14:LED_R14 =0;LED_R15=1; break; case15:LED_R15 =0;LED_R16=1; break; case0xff: LED_R1=1;LED_R2=1;LED_R3=1;LED_R4=1; LED_R5=1;LED_R6=1;LED_R7=1;LED_R8=1; LED_R9=1;LED_R10=1;LED_R11=1;LED_R12=1; LED_R13=1;LED_R14=1;LED_R15=1;LED_R16=1; break; //0xff全选模式 default: LED_R1=0;LED_R2=0;LED_R3=0;LED_R4=0; LED_R5=0;LED_R6=0;LED_R7=0;LED_R8=0; LED_R9=0;LED_R10=0;LED_R11=0;LED_R12=0; LED_R13=0;LED_R14=0;LED_R15=0;LED_R16=0; break; //其他关闭所以列选 }}voidDisPoint(uint8x,uint8y){ #defineL_ON0 ROW_data(88); //清除 Data_CLR(B); ROW_data(y); //行选择 switch(x) { case0: LED_D0=L_ON; break; case1: LED_D1=L_ON; break; case2: LED_D2=L_ON; break; case3: LED_D3=L_ON; break; case4: LED_D4=L_ON; break; case5: LED_D5=L_ON; break; case6: LED_D6=L_ON; break; case7: LED_D7=L_ON; break; }}voidTns(uint8n)//短暂延时{ while(n--);}voidMatxDisp(uint8*buf,uint8duty){ uint8p,i; bitb; SMG_S1=1;SMG_S2=1;SMG_S3=1; Data_CLR(B); #defineLED_OFF 1; for(p=0;p<16;p++) { ROW_data(p); for(i=0;i<8;i++) { b=~(bit)(buf[p]&bitman[i]);//共阳取反 switch(i) { case0: LED_D7=LED_OFF;Tns(100-duty);LED_D0=b; break; case1: LED_D0=LED_OFF;Tns(100-duty);LED_D1=b; break; case2: LED_D1=LED_OFF;Tns(100-duty);LED_D2=b; break; case3: LED_D2=LED_OFF;Tns(100-duty);LED_D3=b; break; case4: LED_D3=LED_OFF;Tns(100-duty);LED_D4=b; break; case5: LED_D4=LED_OFF;Tns(100-duty);LED_D5=b; break; case6: LED_D5=LED_OFF;Tns(100-duty);LED_D6=b; break; case7: LED_D6=LED_OFF;Tns(100-duty);LED_D7=b; break; default:break; } Tns(duty); } LED_D7=1; }}voidSMG_Num(uint8n) //数码管段码{ switch(n) { case0: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_E=ON;SMG_F=ON; break; case1:SMG_B=ON;SMG_C=ON; break; case2: SMG_A=ON;SMG_B=ON;SMG_D=ON;SMG_E=ON;SMG_G=ON; break; case3: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_G=ON; break; case4:SMG_B=ON;SMG_C=ON;SMG_F=ON;SMG_G=ON; break; case5: SMG_A=ON;SMG_C=ON;SMG_D=ON;SMG_F=ON;SMG_G=ON; break; case6: SMG_A=ON;SMG_C=ON;SMG_D=ON;SMG_E=ON;SMG_F=ON;SMG_G=ON; break; case7: SMG_A=ON;SMG_B=ON;SMG_C=ON; break; case8: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_E=ON;SMG_F=ON;SMG_G=ON; break; case9: SMG_A=ON;SMG_B=ON;SMG_C=ON;SMG_D=ON;SMG_F=ON;SMG_G=ON; break; }}voidSMG_Display(uint16goal,uint8duty){ ROW_data(88);//屏蔽点阵 Data_CLR(A); Tns(100-duty); SMG_S1=0; SMG_Num(goal/100); Tns(duty); Data_CLR(A); Tns(100-duty); SMG_S1=1;SMG_S2=0; SMG_Num(goal/10%10); Tns(duty); Data_CLR(A); Tns(100-duty); SMG_S2=1;SMG_S3=0; SMG_Num(goal%10); Tns(duty); SMG_S3=1;}#include"config.h"uint8site;uint8bullet=0;uint8aim_layer=1;uint8plane[2];uint8block[16];staticvoidShot_One();staticvoidShot_One(){ if(bullet>15){ bullet=1; return; } if(bitman[site]&block[bullet]) { block[bullet]&=(~

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论