版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./WORD格式整理版毕业设计设计题目:CMOS高速锁相环的研究与设计系别:信息工程系班级:电子信息工程姓名:指导教师:年6.CMOS高速锁相环的研究与设计摘要在现今电子信息高速发展的时代,通信等技术变得越来越重要。锁相环作为一种能够跟踪输入信号的闭环自动相位控制系统,因其电路结构简单,性能优越等特点,现在被广泛应用于无线电通信、雷达、流体力学等众多领域。本文介绍了一种高速锁相环的设计方法。本文设计的锁相环采用当前主流的电路结构—数模混合结构的电荷泵锁相环。锁相环路中的鉴频鉴相器采用RS锁存器实现鉴频/鉴相功能,有效地提高了整个电荷泵锁相环对相位变化的灵敏度。电荷泵电路也做了一定的改进,性能更为优越。压控振荡器采用常用的环形振荡器结构,采用电流驱动逻辑〔CSL电路作为缓冲单元。分频器采用单相时钟TSPC逻辑实现。论文从系统设计角度出发对电荷泵锁相环的工作原理、数学模型及基本性能多做了详细的分析。该电荷泵锁相环采用0.13μmCMOS工艺实现。利用Tanner软件进行各模块、整体电路的设计,及版图的绘制与验证。从锁相环的仿真结果可知,我们的实验结果和理论结果相符。关键词:电荷泵锁相环电荷泵压控振荡器鉴频鉴相器AbstractCommunicationstechnologyisbecomingincreasinglyimportantintoday'seraofrapiddevelopmentofelectronicinformation.AtetrisgamesdesignmethodhasbeenintroducedinthisthesisbasedonSTC89C53MCU.ThissystemischieflyconstitutedofSTC89C53MCU,KXM12864JLCD,independentkeysandbuzzer.MCUisthecorecontrollerinthisdesign.Tomakerelatedinformationofthegameseenbyplayers,anareaisdifferentiatedshowingshapeofnextgraph,score,gametime,speedandlevelinthescreen.Whenplayingthisgame,wecancontrolthegraphshowntomoveleftandright,fallquicklyandtransformintoanotheroneflexiblybypressingkeys.Afterpassingonelevel,thescreenshowsus"GOODJOB",orweget"GAMEOVER".Thebuzzergivesoutdifferentsoundsmeanwhiletowarngame-playersofthecurrentstate.Inthisdesign,thesimulationisdoneinProteussimulativesoftware.Codecompiling,debuggingandmodificationofhardwarecircuitaredonewiththehelpofKielC51tool.Thenitisdebugedagainaftercircuitboardwelded.Finally,thesystemraslizesallthefunctionsofaminitypetetrismachine.Keywords:MCU;KXM12864J;Tetris;Keil目录1引言12芯片简介22.1单片机简介22.2KXM12864J简介43系统硬件的设计93.1单片机最小系统的设计93.1.1电源电路的设计93.1.2振荡电路的设计113.1.3复位电路的设计123.1.4下载电路的设计133.2LCD显示电路的设计163.3按键电路的设计173.4声音电路的设计184系统软件的设计194.1LCD显示子程序204.1.1显示字符子程序204.1.2显示图形子程序214.1.3设定游戏显示区域子程序224.1.4清屏子程序224.1.5显示计时子程序234.1.6消行积分子程序244.1.7闯关设置子程序254.2按键操作子程序264.3声音子程序285系统调试与仿真295.1KEIL软件和PROTEUS软件简介295.2系统调试与仿真315.3仿真过程中的问题336硬件焊接与调试366.1电路板焊接366.2硬件调试376.2.1LCD显示的调试376.2.2按键调试396.2.3声音调试397结论40谢辞41参考文献42附录43附录一总体设计电路原理图43附录二程序清单80附录三器件清单80外文资料81.1引言1.1锁相技术的发展锁相技术是一门实现相位自动控制的学科,是专门研究系统相位的技术。利用锁相技术而成的锁相环PLL<Phase-LockedLoop>是一个闭环的相位自动控制系统,它的输出信号能够自动跟踪输入信号的相位变化,也可以将之称为一个相位差自动跟踪系统,它能够自动跟踪两个信号的相位差,并且靠反馈控制来达到自动调节输出信号相位的目的。"锁相"的起源可以追溯到17世纪,荷兰天文学家、物理学家ChristianaHuygens,通过观察首次提出了"同步振荡器"〔synehronizedoseillator>的概念,但因为当时科学技术条件的限制,并没有引起重视,得到应有的发展。1932年法国科学家DeBelleseize在"LaReceptionSynehrone"一文中,首先公开发表了对锁相环路的数学描述,明确提出了"锁相"的概念,且运用此概念论述了无线电信号的同步接收。但是他的同步检波理论在当时并没有引起普遍的重视。直到1940年锁相环技术才得到了第一次成功的应用,在电视机水平扫描行同步装置中,有效的抑制外界噪声对同步信号的干扰,使电视图像的同步性能得到很大的改善。同时,在此期间的第二次世界大战中,各种武器装备对锁相环提出了更多的要求,也极大地推动了锁相技术的发展。为了满足这些极具挑战性的要求,很多先进的反馈控制理论在此期间得到发展。随着对锁相技术理论以及应用的广泛而深入的研究,锁相技术己经成为一门比较系统的理论科学。但是,研究的不断深入,科技技术的不断前进,新的物理现象和问题还是层出不穷,得不到解释。因此直到现在,世界各国科技工作者对锁相环的理论和应用进行还在继续的进行研究,而且锁相环原理的应用已经深入到许多其他学科中去了,如气象学、海洋学、生物物理学、原子物理学等等。在锁相环发展的最初阶段,PLL都是由分立元器件组成的,电路复杂,调整困难。随着半导体集成技术的日趋成熟,锁相环技术成为模拟集成电路设计中一个重要的研究方向[3]。之后的几年内就出现了数模混合的锁相环电路,以及后来的全数字锁相环电路。这三种锁相环电路各有千秋,相互弥补,分别存在于各类电子产品中。模拟锁相环在稳定工作时,各模块都可以认为是线性工作的,所以也称为线性锁相环。模拟锁相环对正弦特性信号的相位跟踪非常好,环路特性主要由鉴相器的特性决定,主要用于对信号的调制解调。模拟锁相环的优点是电路简单有效,低通滤波器设计良好时,输出频率纯净稳定,跟随性能好,理想情况下输出频率完全等于同步频率,对晶振压控特性的线性要求不高。缺点是一旦失去基准频率,输出频率立刻跳回晶振本身的频率。全数字锁相环的英文全称是AllDigitalPhase-LockedLoop,简称是ADPLL。ADPLL的经典结构为鉴相器用过零检测数字鉴相器,环路滤波器一般用可逆计数器来实现,振荡器则用数控振荡器实现。全数字锁相环具有精度高且不受温度和电压影响,环路带宽和中心频率编程可调,易于构建高阶锁相环等优点,缺点是不能过滤时钟源的抖动,会引入固有抖动,造成抖动的累积。数模混合锁相环的部分环路部件为数字电路,但是环路控制仍是模拟形式。数模混合锁相环的优点是相位误差、温度误差等较小,电路结构较简单,且噪声较小,具有高速低功耗等优越特性。电荷泵锁相环CPPLL<Charge-PumpPhase-LockedLoop>是数模混合锁相环中的典型代表。数模混合锁相环主要用于频率综合,时钟处理等领域。虽然PLL技术已经发展了半个多世纪,但是由于其应用领域的扩展,而且高新科技的发展对它的性能又不断提出新的要求,所以一直以来PLL的设计与分析都是集成电路设计者的热点。设计者们也不断的提出新的结构和新的分析方法,以满足不同应用的需要。本文设计了一种高速电荷泵锁相环,并用0.13μmCMOS工艺实现。利用Tanner软件进行仿真,并进行版图的绘制与验证。2芯片简介2.1单片机简介单片微型计算机简称单片微机或单片机,又称微控制器〔MCU。它是在一块半导体芯片上,集成了CPU、ROM、RAM、I/O接口、定时器/计数器、中断系统等功能部件,构成了一台完整的数字电子计算机。该器件采用高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性好且性价比高的设计方案。随着集成电路技术的发展,单片机功能逐渐增强,由单片机构成的计算机应用系统的功能也日益增强,进一步深化了单片机在工业控制、自动检测、智能仪器仪表、家用电器等领域的突出地位[2]。STC系列单片机功能基本相同,在此以STC89C51为代表进行简单介绍。1.STC89C51单片机引脚STC89C51单片机封装引脚如图2-1所示。T2/P1.0T2EX/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD/P3.0TXD/P3.1T2/P1.0T2EX/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3T0/P3.4WR/P3.6RD/P3.7XTAL2XTAL1T1/P3.5VSSVCCP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7EAALE/PROGPSENP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A81234567891011121314151617181920212223242526272829303111323334353637383940DIP—40图2-1STC89C51单片机封装引脚图STC89C51有4个8位可编程并行I/O口〔P0、P1、P2、P3,1个全双工串行口,2个定时器/计数器,2个外部中断输入口。各个引脚的功能说明如下:GND:接地端。VCC:电源端,接+5V。XTAL1:接外部石英晶体的一端。在单片机内部,它是反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,该引脚作为外部振荡的输入端。XTAL2:接外部石英晶体的另外一端。在单片机内部,它是反相放大器的输出端。RST:该引脚为单片机的上电复位引脚,高电平有效。当单片机电源电压达到单片机工作电压、同时单片机振荡器正常工作后,该引脚上必须持续两个机器周期的高电平,才可能实现复位操作,使单片机回到初始状态。ALE/PROG:地址锁存允许。PSEN:外部程序存储器读允许。:为0时,单片机只访问外部程序存储器。P0口:P0数据/低八位地址复用总线端口。P1口:P1静态通用端口。P2口:P2高八位地址总线动态端口。P3口:P3双功能静态端口。P3口也可作为STC89C51的一些特殊功能口。如:P3.0为串行输入口〔RXD,P3.1为串行输出口〔TXD,P3.2为外部中断0〔INT0,P3.3为外部中断1〔INT1,P3.4为定时/计数器0的外部输入口〔T0,P3.5为定时/计数器1的外部输入口〔T1,P3.6为外部数据存储器写选通〔WR,P3.7为外部数据存储器读选通〔RD。由于本设计中定时器的应用很多而且很重要,在此对定时器/计数器T1、T0的使用方法进行简单说明:STC89C51单片机内有两个可编程的定时器/计数器T1、T0。两个定时器都具有定时器和计数器两种工作模式,四种工作方式〔方式0、方式1、方式2和方式3,其控制字均在相应的特殊功能存储器中,通过对它的特殊功能寄存器编程,用户可方便地选择定时器/计数器的两种工作模式和四种工作方式。定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。特殊功能寄存器TMOD用于选择定时器/计数器T1、T0的工作模式和工作方式。特殊功能寄存器TCON用于控制T1、T0的启动和停止计数,同时包含了T1、T0的状态。TMOD、TCON这两个寄存器的内容由软件设置[3]。2.STC89C51单片机特点STC89C51单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,其主要特点:<1>增强型6时钟/机器周期,12时钟/机器周期,8051CPU。<2>工作电压:3.4~5.5V。<3>工作频率0~40MHZ,实际工作频率可达48MHZ。<4>应用程序空间8K字节。<5>RAM存储容量为128B,可扩展至64KB。<6>I/O口有32个,P0口开漏输出,作为I/O口需要上拉;P1、P2、P3口是准双向/弱上拉。<7>ISP,无需专用编程器/仿真器,可通过串口〔P3.0/P3.1直接下载用户程序,8K程序3秒即可完成。<8>具有看门狗,冷启动后为关闭状态。<9>工作温度范围:0~75。<10>STC89C51单片机的抗干扰与抗EMI辐射能力。2.2KXM12864J简介型的液晶显示模块种类繁多,而且大部分液晶显示模块都自带驱动,使用时直接连接控制器件即可。型的液晶显示模块分为带字库的和不带字库的。带字库的液晶显示模块可以直接从字库中调用汉字或字符,减少了代码长度,方便用户使用。不带字库的液晶显示模块,每个字符要逐个按一定的规则送出显示,但掌握一定的使用方法后使用会很方便,可以显示汉字、字符和图形。不带字库的液晶显示模块价格相对便宜又是其一大优势。本次设计选用KXM12864J显示模块。KXM12864J是一种不带字库的图形点阵液晶显示器。它主要采用动态驱动原理由行驱动—控制器和列驱动器两部分组成了128〔列×64〔行的全点阵液晶显示。此显示器采用了COD的软封装方式〔COD:英文全称为CacheonDie,芯片内集成缓存,通过导电橡胶和压框连接LCD,使其寿命长,连接可靠。1.KXM12864J的特点<1>工作电压为5V10%,可自带驱动LCD所需的负电压。<2>全屏幕点阵,点阵数为128〔列64〔行,可显示8〔行4〔行个〔1616点阵汉字,也可完成图形,字符的显示。<3>与CPU接口采用5条位控制总线和8位并行数据总线输入输出,适配M系列时序。<4>内部有显示数据锁存器。<5>简单的操作指令。如显示开关设置,显示起始行设置,地址指针设置和数据读/写等指令。2.KXM12864J的内部结构KXM12864J内部主要包括以下部分:数据显示RAM<DDRAM>、I/O缓冲器〔DB0~DB7、输入寄存器、输出寄存器、指令寄存器、状态字寄存器、地址寄存器、Y地址计数器、Z地址计数器、显示起始行寄存器、显示开/关触发器、复位端RES、背光接线[4]。KXM12864J的内部原理图如图2-1所示。图2-1KXM12864J原理图3.KXM12864J的软件应用规则KXM12864J的指令功能:<1>读状态字状态字是MPU了解LCM〔液晶显示模块当前状态,或LCM向MPU提供其内部状态的唯一的信息渠道。BUSY表示当前LCM接口控制电路运行状态。BUSY=1表示LCM正在处理MPU发过来的指令或数据。此时接口电路被封锁,不能接受除读状态字以外的任何操作。BUSY=0表示LCM接口控制电路已外于"准备好"状态,等待MPU的访问。ON/OFF表示当前的显示状态。ON/OFF=1表示关显示状态,ON/OFF=0表示开显示状态。RESET表示当前LCM的工作状态,即反映RES端的电平状态。当RES为低电平状态时,LCM处于复位工作状态,标志位RESET=1。当RES为高电平状态时,LCM为正常工作状态,标志位RESET=0。在指令设置和数据读写时要注意状态字中的BUSY标志。只有在BUSY=0时,MPU对LCM的操作才能有效。因此MPU在每次对LCM操作之前,都要读出状态字判断BUSY是否为"0"。若不为"0",则MPU需要等待,直至BUSY=0为止。<2>显示开关设置该指令设置显示开/关触发器的状态,由此控制显示数据锁存器的工作方式,从而控制显示屏上的显示状态。D位为显示开/关的控制位。当D=1为开显示设置,显示数据锁存器正常工作,显示屏上呈现所需的显示效果。此时在状态字中ON/OFF=0。当D=0为关显示设置,显示数据锁存器被置零,显示屏呈不显示状态,但显示存储器并没有被破坏,在状态字中ON/OFF=1。<3>显示起始行设置该指令设置了显示起始行寄存器的内容。LCM通过CS的选择分别具有64行显示的管理能力,该指令中L5~L0为显示起始行的地址,取值在0~3FH〔1~64行范围内,它规定了显示屏上最顶一行所对应的显示存储器的行地址。如果定时间隔地,等间距地修改〔如加一或减一显示起始行寄存器的内容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果。<4>页面地址设置该指令设置了页面地址—X地址寄存器的内容。LCM将显示存储器分成8页,指令代码中P2~P0就是要确定当前所要选择的页面地址,取值范围为0~7H,代表第1~8页。该指令规定了以后的读/写操作将在哪一个页面上进行。<5>列地址设置该指令设置了Y地址数计数器的内容,LCM通过CS的选择分别具有64列显示的管理能力,C5~C0=0~3FH〔1~64代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加一功能,在每一次读/写数据后它将自动加一,所以在连续进行读/写数据时,Y地址计数器不必每次都设置一次。页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。KXM12864J的接口时序:<1>写操作将8位数据写入先前已确定的显示存储器的单元内。操作完成后列地址计数器自动加一。时序如图2-2所示。图2-2写操作时序图<2>读操作该操作将LCM接口部的输出寄存器内容读出,然后列地址计数器自动加一。时序如图2-3所示。图2-3读操作时序图4.KXM12864J的显示方法点阵式LCD的取模方式有逐列式、逐行式、列行式、行列式等。本设计中选用列行式。列行式就是:先选择点阵的第一页,逐列查表显示一个汉字的上半部分,再选择第二页,逐列查表显示一个汉字的下半部分。显示字符,一页就可以显示完整一个。每次显示要先通过指令选中显示位置的页和列,然后将字模逐个送入。<1>汉字取模应用51单片机工具箱取汉字字模。取字模的方法以汉字"唐"为例进行介绍。设定每个汉字大小为1616。首先将汉字"唐"写入汉字字模生成工具1616的点阵中,如图2-4所示。图2-4汉字1616点阵图然后就可以生成"唐"字字模,"0xFF,0xFF,0xBF,0xBB,0xD8,0x1B,0xDB,0xAB,0x7A,0xAB,0x9A,0xAB,0xDA,0xAB,0xF2,0xAB,0xEA,0xAB,0xDA,0xAB,0x1A,0xAB,0xDE,0xFB,0xDD,0x7B,0xDB,0xBB,0xD7,0xAB,0xDF,0xF7”。<2>字符取模51单片机工具箱不可以实现字符取模,没有找到相应的取模工具,使用了一种比较传统的取模方式。以字符"T"为例进行介绍。设定每个字符大小为58。首先将字符"T"写入58的点阵中,如图2-5所示。图2-5字符58点阵图然后每列从下往上读,亮的点为"1”,暗的点为"0”。读出"T"的二进制字模"00000001,00000001,01111111,00000001,最后转换为十六进制字模"0x01,0x01,0x7F,0x01,0x01”3系统硬件的设计俄罗斯方块游戏系统硬件电路的设计分为四大模块,分别是单片机最小系统模块、LCD显示模块、独立按键模块和声音模块。单片机最小系统显示模块按键模块PC机声音模块单片机最小系统显示模块按键模块PC机声音模块图3-1硬件电路整体框图1.单片机最小系统模块,包括电源电路、复位电路、振荡电路和下载接口电路。2.LCD显示模块,采用KXM12864J型液晶显示器显示图形的形状、游戏得分游戏时间、游戏速度和游戏等级等信息。3.独立按键模块,设定六个独立按键进行游戏操作,功能分别为左移、右移、快速下移、翻转、变形、确定和暂停,其中确定和暂停功能由一个独立按键来实现。4.声音模块,主要由蜂鸣器构成,可以在不同的游戏进程发出不同的音乐,增加了游戏的娱乐性。系统总体设计电路原理图见附录一。3.1单片机最小系统的设计单片机最小系统包括:V直流电源电路、振荡电路、复位电路和下载电路。下面分模块进行介绍。3.1.1电源电路的设计设计中单片机和LCD显示屏所需电源均为V直流电。一般将220V交流电转化为稳定的V直流电的电路设计流程是把单相交流电经过电源变压器、整流电路、滤波电路和稳压电路转换成稳定的直流电[5],其框图如图3-2所示。~~220V50HZ整流电路滤波电路电源变压器稳压电路+5v图3-2电源电路框图由于上述供电方法需要220V到12V的电源变压器,这种变压器相对系统来说体积偏大,而且偏重。本次设计选择USB供电和外部供电。电路图如图3-3所示。图3-3电源电路图USB供电在很多情况下使用USB供电比较方便,不必携带不方便的AC适配器。在设计过程中电路板直接和笔记本电脑连接就可以供电。所有主机USB设备〔如PC和笔记本电脑至少可以供出500mA电流或每个USB插口提供5个"单元负载"。在USB述语中,"一个单元负载"是100mA。自供电USB插孔也可以提供5个单元负载。总线供电USB插孔保证提供一个单元负载〔100mA。所有USB设备在连接主机时需要主机对其加以识别。在识别过程中,主机决定USB设备的电源以及是否为其供电,对于被认可的设备将负载电流从100mA增大到500mA。USB供电方式,可以选择比较简单的电路来实现。如图3-3所示,在电路板上只需要有一个USB接口,传输过来的电流经过滤波后接电源开关。最后连接上熔断器,在电流过大时熔断器首先被烧坏使主板断电,可以有效的保护电路主板[6]。2.外部电源供电USB供电可能出现供电不足,在此又设计了外部供电。外部供电方式,首先需要用电源变压器将220V交流电转变为直流电,然后经过滤波和7805稳压后与USB供电电路重合。7805的引脚1是输入脚,接+8~+20V直流电源。引脚2是接地脚,接直流电源的负极。引脚3是输出脚,输出+5V的稳定电压,确保在输入交流电压波动或负载和温度变化时输出电压的稳定。后面电路与USB供电电路重合,如图3-3所示。电源指示灯电路为了可以直观的观测到电源接通情况,在电源设计部分增加了电源指示灯电路,如图3-4所示。图3-4电源指示灯电路图此电路由一个发光二极管和一个1KΩ的限流电阻构成,两端连接电路板电源的正负极。当按下电源开关时,电路板得电,同时指示灯亮。3.1.2振荡电路的设计单片机以晶体振荡器的振荡周期为最小的时序单位,片内的各种微操作都以此周期为时序基准。STC89C53可以选用外部振荡方式和内部振荡方式。内部振荡方式所得的时钟信号比较稳定,实用电路中实用较多,本设计选用内部振荡方式。STC89C53中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶振一起构成自激振荡器,振荡电路如图3-5所示。图3-5振荡电路图外接晶振及电容C2、C3接在放大器的反馈回路中构成并联振荡电路。外接电容C2、C3起稳定振荡频率,快速起振的作用。对外接电容C2、C3虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,电容使用30pF10pF,而如果使用陶瓷谐振器则选择30pF10pF[7]。在此选用石英晶体,电容使用30pF。3.1.3STC89C53单片机的复位引脚RST出现2个机器周期〔1个机器周期为12个振荡周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机将处于循环复位状态不在执行程序。复位操作分可分为上电复位和开关复位两种方式。上电复位要求接通电源后,自动实现复位操作。开关复位要求在电源接通的条件下,单片机运行期间,如果发生死机,用按下复位按钮操作使单片机复位。本设计中选用上电复位和开关复位并存的复位方式,如图3-6所示。基本原理是:上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择C=10~30uF,R=10~1kΩ。本设计中选择C=30uF,R=10kΩ。图3-6复位电路图如果不仅要使单片机复位,而且还要使单片机的外围芯片也同时复位,上述电路中应进行少许调整。单片机的复位操作使单片机进入初始化过程,其中包括使程序计数器PC=0000H,P0~P3=FFH,SP=07H,其他寄存器从H地址单元开始执行[8]。单片机复位后不改变片内RAM区中的内容,特殊功能寄存器复位后的状态见表3-1所示。表3-1特殊工作寄存器复位状态表特殊功能寄存器初始状态特殊功能寄存器初始状态A00HTMOD00HB00HTCON00HPSW00HTH000HSP07HTL000HDPL00HTH100HDPH00HTL100HP0~P3FFHSBUF不定IE***00000BSCON00HIP0**00000BPCON0*******B值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的初始化部分是十分必要的。说明:表中符号*为随机状态;A=00H,表明累加器已被清零;PSW=00H,表明选寄存器0组为工作寄存器组;SP=07H,表明堆栈指针指向片内RAM的H字节单元,根据堆栈操作的先加后压法则,第一个被压入的内容写入到08H单元中;P0~P3=FFH,表明已向各端口线写入1,此时,各端口既可用于输入又可用于输出;IP=×××00000B,表明各个中断源处于低优先级;IE=0××00000B,表明各个中断均被关断。3.1.4下载本次设计,软件程序是通过串行编程方式写入单片机Flash存储器的,即ISP编程方式,需要电平转换芯片MAX232。同时上位机与系统的连接需要一条下载线,下载线的一端是USB口接PC机,另一端是九针的串行口接系统电路板。1.ISP简介STC系列单片机提供ISP在线系统可编程,可方便使用RS232接口直接下载程序。ISP的好处是:不用购买通用编程器,单片机在系统上即可下载/烧录用户程序,而无须将单片机从已生产好的产品上拆下,再用通用编程器将程序代码烧录进单片机内部。这种方法极大地方便了软件编写过程中的调试工作。STC89系列单片机在出厂之前已在单片机内部固化有ISP系统引导程序,配合ISP端的控制程序即可将用户的程序代码下载进单片机内部,故无需编程器,而且速度比通用编程器快。2.MAX232简介MAX232芯片〔如图3-7所示是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用V电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由芯片的1、2、3、4、5、6脚和4只电容构成。功能是产生V和V两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由芯片的7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚〔R1IN、12脚〔R1OUT、11脚〔T1IN、14脚〔T1OUT为第一数据通道。8脚〔R2IN、9脚〔R2OUT、10脚〔T2IN、7脚TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2第三部分是供电。15脚GND、16脚VCC〔V。161615141312111091121314151617181C1+V+C1-C2++C2-V-T2OUTR2INVCCGNDT1OUTR1INR1OUTT1INT2INR2OUT图3-7MAX232芯片引脚图3.ISP下载电路图3-8下载电路图如图3-8所示STC系列单片机下载电路需要一片MAX232及五只电容即可,电路简单易行。两个发光二极管在下载程序时会不断闪烁,方便用户观察。下载程序时还需要使用STC提供的下载软件STC_ISP.exe,软件界面如图3-9所示。图3-9软件界面图下载步骤:<1>选择MCU类型:STC89C53RC。<2>将编译链接代码文件形成的为扩展的文件调入缓冲区,每次调入,都会使校验和改变。<3>选择PC串口,若没有串口,则需要USB转串口转换器。波特率可以使用默认值;若通信不正常,可以将波特率值降低后再试,知道通信正常。<4>不要改动无关的一些默认值。<5>点击"Download/下载"按钮,屏幕提示单片机上电,这时PC等待单片机冷启动〔给单片机通电,随后就可以看到HEX文件写入单片机。给单片机断电,点击"Donload/下载"按钮,单片机上电,消息框提示握手成功,几秒种后程序下载完毕,单片机自动开始运行下载的程序[9]。3.2LCD显示电路的设计LCD显示电路部分为该设计系统的主要部分。在前面已经介绍了LCD显示模块KXM12864J的显示原理,在此不再重复叙述。KXM12864J的D0~D7端口与单片机P0口相连,用于数据传输〔单片机的P0口连接了10K的排阻,用于拉高电平。E、R/W、RS、CS1、CS2分别与单片机的P2.0~P2.4相连,用于控制。显示电路图如图3-10所示。图3-10显示电路图KXM12864J的接线需要注意以下几点:1.在KXM12864J和单片机连接。不同的12864LCD部分引脚功能不同,而且不对应。连接时应对应所用型号LCD的引脚图逐个接线,以免因接线错误烧坏LCD。2.KXM12864J背光的连接。KXM12864J的19、20引脚分别为LED+和LED-,是背光电源引脚。在接线时,LED+要接V电源,LED-接系统的地,如图3-11所示。LCMLCMLCM20195V图3-11背光电路图3.KXM12864J亮度调节的电路连接。KXM12864J的18引脚为VEE,输出-10V的负电压〔单电源供电,3引脚为VLCD是LCD的驱动负电压。KXM12864J需要连接一个电位器,用于调节背光的亮度。设计中选用电位器的可调范围为0~20KΩ。线路连接方式如图3-12所示。LCD-VLCDLCD-VLCDLCD-VEER320KΩVCC图3-12亮度调节电阻连接图3.3按键电路的设计电路板的功能键可以使用矩阵键盘,也可以使用独立按键,在本设计中采用独立按键。根据系统功能需要,使用了六个独立按键。四个操作按键的功能分别为左移、快速下移、右移、翻转,分别与单片机的P1.0~P1.3口相接;变形键和确定/暂停键分别与单片机的P1.4~P1.5口相接。当有键按下时,则对应端口电平被拉低。系统中设置了定时器中断,定时对按键进行扫描,当扫描到有键按下时,执行相应程序完成相应功能。键盘接口电路如图3-13所示。图3-13键盘接口电路3.4声音电路的设计为了增加游戏的娱乐性系统中增设由蜂鸣器产生的游戏声音,通过编程控制蜂鸣器在游戏进程中发出不同的音调。这部分电路设计比较简单,由一个蜂鸣器,一个三极管驱动和一个200Ω的限流电阻组成。当向蜂鸣器送入脉冲时,蜂鸣器就会发出声音[10]。改变输入脉冲频率蜂鸣器所发声音的音调就会发生变化。蜂鸣器电路图如图3-14所示。图3-14蜂鸣器电路4系统软件的设计本系统软件设计主要分为三部分:LCD显示部分、功能按键部分和音乐部分。主程序中有两个循环:在一个图形下落到底时将下一个图形设定为当前图形并产生新的下一个图形为大循环,当前下落图形的状态检测和自动下移为小循环换。本设计软件编程主程序流程图如图4-1所示。程序清单见附录二。开始开始给定时器0赋初值开定时器初始化否计时显示按键操作下落到底?是否音乐闯关成功?闯关失败?产生图形否否有满行?消行积分是图形下移一行是是图4-1主程序流程图4.1LCD显示子程序显示分为两部分:左半屏显示游戏;右半屏显示游戏进程的相关信息,包括下一个图形形状、当前速度、游戏积分、游戏时间和游戏等级。本设计选用的KXM12864J型LCD,为128列、8页〔每页8行的点阵显示屏。它的使用有两个基本操作:送指令和送数据。通过"page0x7;page0xb8;lcdCmd<page>;"语句选定显示屏的页;"column0x40;column0x3f;lcdCmd<column>;"语句选定显示屏的列。主要用于显示字符、显示图形、设定游戏显示区域和清屏。4.1.1显示字符子程序否否开始选取字模首位置设定显示起始列colume,i=5+columei<64?是选择右屏选择左屏选择页、列写入字模++i,i<5+colume?否是结束图4-2LCD显示流程图显示流程图如图4-2所示。每个字符为58点阵,即字符占5列、8行的点阵,采用列行式的输入方法。每个字符有五个字模,字符取字模后存入asii[]数组。通过选择asii[]的脚标选择需要输出字符的字模〔取模方式已在LCD简介中介绍。显示图形子程序本设计定义了七个图形,每个图形由四个小方块构成,小方块为33的点阵。图形定义在cube[]数组中[13]。七个图形的形状如图4-3所示。图4-3七种显示图形每个图形的显示,是将小方块写入指定区域。图形显示流程图如图4-4所示。开始开始i<4?是否写入图形的模选择行、列i=0i=i-1结束图4-4中断程序流程图4.1.3设定游戏显示区域子程序本设计将游戏显示区设定在左半屏,显示区宽度为48列,高度为62行。可以容纳33的小方块16列,21行。按照所用显示屏的列行式显示方法,将左半屏的最顶行和最底行写入高电平,显示屏左起第2列和第51列送入高电平,其它位置写入"0",这样就可以在蓝色显示屏上显示出一个白框。清屏子程序清屏包括整体清屏和部分清屏,在程序除的位置再写入"0"即可。清屏的应用,可使图形和字符清晰显示,使显示界面更加中选择要清整洁。部分程序如下所示。voidlcdClear<void>{uchari,page;CS1=0;CS2=1;for<page=0;page<8;page++>{lcdSetPage<page>;lcdSetColumn<0>;for<i=0;i<64;i++>lcdWriteByte<0>;}CS1=1;CS2=0;for<page=0;page<8;page++>{lcdSetPage<page>;lcdSetColumn<0>;for<i=0;i<64;i++>lcdWriteByte<0>;}}显示计时子程序计时流程图如图4-5所示。中断入口t0ms=50?中断入口t0ms=50?downtimegapdowntimegap=50?产生中断?++s20=20?是是否否t0ms=0?是是是否否按键扫描downtimegap++,t0ms=++t0ms%100++m++s=60?结束否改变":"状态图形下移一行设置中断初值,开中断本设计在按键扫描、游戏计时、图形自动下移中均应用到时间。在此利用单片机的定时器T0使用方式1来实现所有的计时和定时。所用的定时器方式在每次中断后要重新载入初值,设置每次中断的时间为10ms。按键每次中断扫描一次。变量t0ms每次中断加一,计时时间每1s改变一次,在变量t0ms=100时改变时间显示值;分与秒之间的":"每0.5ms改变一次状态,在变量t0ms=50时改变状态。在没有任何按键操作时当前图形每隔一段时间自动下移一行,变量downtimegap每次中断加一,当downtimegap=50时图形下移,并将downtimegap清零。消行积分子程序俄罗斯方块游戏系统的设计每当一个图形下落到设定区域底部就会检测是否有满行。如果有满行则将此行逐行下移,移至最低端时将其消除,每消除一行就获得一分,一次消除delete行,可获得deletedelete分,由于图形最长由四个小方块组成所以最多一次只可以消除四行。若未有满行则图形仍会继续下落,每个图形的摆放都会对下一个图形造成影响,当图形累积到最顶行时游戏结束。开始i开始i=0?第i〔j行满行?j=0?是是否否将i行内容下移一行i=i-1score=score+deletedelete是否清除第0行,++delete,--j结束图4-6消行积分流程图闯关设置子程序本游戏共设置10个关卡,每20分闯一关。打开游戏提示是否开始游戏,界面显示"NEWGAME"按确定键就可以开始游戏。游戏每上升一关图形的下落速度就会加快一级,当玩家闯入第六关时变量"cdoor=1"有效〔开始游戏是cdoor初始化为0变形键可以使用。当玩家闯关失败时,界面将显示"GAMEOVER",延时后提示玩家是否开始新游戏,界面显示"NEWGAME",再次按确定键就可以重新开始游戏。当玩家闯关成功时,界面将显示"GOODJOB",延时后提示玩家是否再次闯关,界面显示"AGAIN",按下确定键界面显示"NEWGAME"再次按确定键就可以开始新游戏。开始score开始score<40?score<20?是是否否speed=1,level=1显示Score、Speed、level是否speed=10,level=10speed=2,level=2score<200?score<120?结束否是speed=6,level=6,cdoor=1,图4-7闯关设置流程图4.2按键操作子程序本设计使用的按键包括左移键、右移键、快速下移键、变形键、翻转键、确定键和暂停键。确定键和暂停键为复用键,该键在游戏进行过程中为暂停功能,在游戏开始前或结束一场游戏时为确定键功能。按键扫描部分位于中断子程序中,每10ms扫描一次。每个按键按下10ms后若此按键仍然按下则变量keyflag=1有效,在主函数的循环中执行相应的按键操作,否则当做按键抖动不执行操作。左移键、右移键、快速下移键每按下一次图形向相应方向移动一行,若按下0.5s后〔此时t0ms1=PUSHON此键仍持续按下则每100ms使图形向相应方向移动一次。翻转键每按下一次图形将按顺时针方向旋转。变形键在玩家闯入第六关时才可以使用,每按下一次,系统将重新选择一个图形赋给当前下落图形。确定键是用于游戏开始或结束时游戏玩家进行确认的按键。为方便玩家,增设了暂停键。当按下一次暂停键时变量zt取反,当zt=0时游戏处于暂停状态,zt=1时继续游戏。下面以左移操作为例说明按键的操作流程,如图4-8所示。否否开始清除图形列减一是列加一结束写入原图形是否到达边界?图4-8左移操作流程图开始cdoor=开始cdoor=1?是否有键按下?是是否否是否变形左移右移翻转下移暂停10ms后是否仍按下?key=5??key=3??key=2??key=1??key=0??key=5??是是是是是是否否否否否结束图4-9按键扫描流程图4.3声音子程序本设计利用蜂鸣器设置了声音部分。程序中定义蜂鸣器为BEEP,它对应着端口P3.6。当向BEEP送入脉冲时,蜂鸣器响;向BEEP持续送入高电平时,关蜂鸣器[14]。要想使蜂鸣器发出不同的音调就要改变送入BEEP脉冲的频率。部分程序如下所示:voidbeeping<>{unsignedchari;for<i=0;i<100;i++>{Delay1ms<4>; BEEP=!BEEP;//BEEP取反}BEEP=1;//关闭蜂鸣器} 由程序可以看出能够通过对BEEP取反实现对蜂鸣器送脉冲。脉冲宽度由延时函数Delay1ms<>决定,延时越长频率越低,蜂鸣器发出的音调也越低,反之音调越高。声音子程序主要应用:每下落一个图形,蜂鸣器响一下;闯关成功,蜂鸣器发出欢快的音调;闯关失败,蜂鸣器发出低沉的音调。5系统调试与仿真本设计的代码编写是在KeilC51软件中完成的,经过编译后生成"HEX"文件。在Proteus软件中选择所需要的器件绘制电路图。将"HEX"文件下载到电路图中的单片机内,进行仿真。观察仿真界面可以查找系统功能存在的问题。5.1KEIL软件和PROTEUS软件简介1.Keil软件简介随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,目前流行的51系列单片机开发软件是德国Keil公司推出的KeilC51软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为uVision〔通常称为uV3。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:uVisionIDE集成开发环境〔包括工程管理器、源程序编辑器、程序调试器、C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及Monitor-51、RTX51实时操作系统[15]。Keil软件开发流程:<1>建立工程。<2>为工程选择目标器件。<3>设置工程的配置参数。<4>打开/建立程序文件。<5>编译和连接工程。<6>纠正程序中的书写和语法错误并重新编译连接。<7>对程序中的某些纯软件的部分使用软件仿真验证。<8>使用Proteus对应用程序进行硬件仿真。2.Proteus软件简介ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析〔SPICE各种模拟器件和集成电路。本次设计使用的版本为ProteusVersion7.4。Proteus软件开发流程:运行Proteus的ISIS程序后,进入该仿真软件的主界面。在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。通过工具栏中的"P"〔从库中选择元件命令命令,在"pickdevices窗口"中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在"source菜单"的Definecodegenerationtools菜单命令下,选择程序编译的工具、路径、扩展名等项目;在"source菜单"的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况[16]。3.Keil和Proteus的连接<1>Keil软件中编译程序成功,打开"OptionsforTarget‘Target1’对话框",点击"Output按钮",然后选中"CreateHEXFi"。如图5-1所示。图5-1OptionsforTarget‘Target1’对话框确定后关闭窗口,再次执行编译程序,此时就生成了"HEX"文件。<2>利用Proteus画好电路图后,右击单片机,当单片机变为红色后,再左击单片机则会出现如图5-2所示对话框。图5-2HEX文件加载图单击ProgramFile所对应的文件夹图标,将HEX文件选中加入即可。单击运行按钮,就可以看到仿真结果[17]。5.2系统调试与仿真通过Keil和Proteus结合调试仿真可以控制系统观察游戏进程和显示情况,从而发现软件编程中语法之外的问题,更方便于设计的改进。仿真选用的是AMPIRE12864,它的各个引脚功能和KXM12864J完全一致,并且都是不带字库的显示器。游戏开始时,显示屏先初始化。显示屏右侧显示"NEXT";"PEED"初始值为"1";"SCORE"初始值为"0000";计时时间初始值"00:00";"LEVEL"初始值为"1"。1.显示屏左侧显示"NEWGAME"。仿真图如图5-3所示。图5-3仿真结果图<1>2.游戏过程中,当前图形下落的同时显示下一个图形形状,如图5-4所示。图5-4仿真结果图<2>3.闯关失败界面上显示"GAMEOVER",如图5-5所示。图5-5仿真结果图<3>经过一段延时间后可以重新开始游戏,界面显示"NEWGAME",如图5-6所示。图5-6仿真结果图<4>5.闯关成功后界面上左侧显示"GOODJOB",右屏可以看到得分、等级和用时,如图5-7所示。延时一段延时间后显示"NEWGAME",点击确定从新开始游戏。图5-7仿真结果图<5>5.3仿真过程中的问题1.仿真过程中曾出现过图5-8所示显示界面。图5-8仿真结果图<6>在游戏开始一分二十八秒后仍不见有图形下落,只有时间在累计,"NEXT"处显示的图形在不断变换。检查软件,有写图形到显示界面部分,并且逻辑没有错误。经仔细查找发下,在控制图形下落部分的代码中将图形擦除,使行减一后没有将图形写入。修改后代码如下:voidmoveDown<void>{clearCubeFromMap<>;this.row++;if<checkBorder<>||checkClask<>>{this.row--;downok=1;}elsedownok=0;rectangle<>;showCubeMap<>;writeCubeToMap<>;if<downok>checkMap<>;}其中clearCubeFromMap<>为清除图形函数,showCubeMap<>为写入图形函数。2.仿真时发现暂停键不可用。在仿真时暂停键无法实现暂停功能,即使在持续按下暂停键期间游戏依然进行。多次检查代码,都没有发现逻辑和语法错误,后来尝试将控制暂停的变量zt改变在代码中的位置。修改前:if<stop==1>{if<!OKOK>key=5;zt=~zt;}修改后:case0:if<key!=gkey>//执行case0后10ms才执行case1,相当于按键延时去抖{ gkey=key; zt=~zt; keystate=1; } break;修改成功后分析原因,发现是延时问题。修改后和修改前的差别在于暂停键的执行多了一个10ms的延时。在以后的设计中应注意此类问题。6硬件焊接与调试6.1电路板焊接任何电子产品,从几个零件构成的整流器到成千上万个零部件组成的计算机系统,都是由基本的电子元器件按电路工作原理,用一定的工艺方法连接而成。虽然连接方法有多种〔例如绕接、压接、粘接等,但使用最广泛的方法是锡焊。锡焊,就是用电烙铁和焊锡使焊件与电路板上的铜箔连接在一起。本设计的电路板显示部分和按键部分是手动焊接。系统所用器件清单见附录三。1.焊接流程<1>器件布局。尽量将发热多的部分〔如电源部分安放在通用板的角落。<2>画布线图。画布线图时应尽量减少接线交叉,可以根据需要再适当调整器件位置。<3>焊接器件。焊接有多个引脚的器件时应先固定几个端点然后再将每个引脚焊接好。<4>焊接连线。在焊接连线时可以适当将线拉紧,这样不仅节约用线,更重要的是可以使焊接线路清晰整洁,而且方便检查线路。<5>调试。焊接过程中最好每完成一个模块就测试一个模块,如果遇到问题就缩小了检查范围。这种方法可以提高焊接质量,同时提升焊接速度。2.焊接质量焊接时,要保证每个焊点焊接牢固、接触良好。焊点光亮、圆滑而无毛刺,锡量适中,锡和被焊物融合牢固。手工焊接步骤:<1>右手持电烙铁,左手用镊子夹持元件或导线。焊接前,电烙铁要充分预热。烙铁头刃面上要吃锡,即带上一定量焊锡。<2>将烙铁头刃面紧贴在焊点处。电烙铁与水平面大约成角,以便熔化的锡从烙铁头上流到焊点上。烙铁头在焊点处停留时间控制在2~3秒。<3>抬开烙铁头,左手仍持元件不动。待焊点处的焊锡冷却凝固后,松开左手。<4>用镊子转动引线,确认不松动,然后用偏口钳剪去多余的引线[18]。手工焊接注意事项:<1>烙铁在使用前先通电"上锡"。<2>掌握好加热时间,在保证焊料润湿焊件的前提下时间越短越好。<3>保持合适的温度,一般经验是烙铁头温度比焊料熔化温度高较为适宜。<4>烙铁不用时要及时断电,防止烙铁芯加速氧化而烧断[19]。6.2硬件调试整体硬件电路如图6-1所示。图6-1硬件电路板LCD显示的调试1.将程序下载到系统中,在系统供电的情况下观察LCD显示屏[20]。显示屏显示"NEXT";"PEED"初始值为"1”;"SCORE"初始值为"0000”;计时时间初始值"00:00”;"LEVEL"初始值为"1”。经检查发现程序中的选屏设置与硬件接线不对应〔CS1=1,CS2=0时选择左屏;CS1=0,CS2=1时选择右屏。将CS1和CS2引脚的接线交换位置,选屏显示就正常了。如图6-2所示。图6-2LCD显示屏<1>按提示按下确定键显示下一个新图形的形状,当前图形开始按一定速度逐行下移。左右移动图形,图形移动过的位置显示屏上留下许多亮点,而且随着时间的延续亮点越来越多,只有在重新开始游戏时才能将亮点全部清除一次。如图6-3所示。图6-3LCD显示屏<2>开始怀疑是延时问题,经过反复修改尝试排除了延时问题。在清屏上作修改后,显示界面清晰度有所改善。当有满行时可以实现消行加分。当图形堆积到设定区域顶部时,界面显示"GAMEOVER",全部闯关成功后显示"GOODJOB"。此时按下确定键可以重新开始新游戏。如图6-4、6-5所示。图6-4LCD显示屏<4>图6-5LCD显示屏<5>综上,在不断调试修改后,显示屏显示基本达到预期效果。按键调试在硬件系统中进行按键调试,各按键均可以很好的实现各自的功能。不过存在一个问题:按键过多,不便于操作。在原来的设计中使用了七个独立按键,功能分别为确定、翻转、左移、右移、快速下移、变形、暂停。按键过多使得玩家在进行操作时容易误用。为了减少按键,将确定功能和暂停功能设置在同一个按键上,形成复用键。在程序中增设了变量stop,将stop的初始值设置为"0",当stop=0时复用键执行确定功能,在游戏开始前或结束一场游戏时使用;当stop=1时复用键执行暂停功能,在游戏进行过程中可以使用。声音调试这部分在硬件测试中基本没有出现问题。每下落一个图形,蜂鸣器可以响一下;闯关成功时,蜂鸣器发出欢快的音调;闯关失败时,蜂鸣器发出低沉的音调。蜂鸣器发出声音的同时用手触摸蜂鸣器,能够感觉到蜂鸣器在震动。调试结束。7结论本设计实现了俄罗斯方块游戏系统设计。设计以STC89C53单片机作为主控芯片,以LCD为显示界面,使用独立按键进行操作,实现功能如下:通过预先设置的随机发生器不断输出单个图形到显示界面顶部,通过按键操作可以控制图形的左右移动、快速下落和变形,如果下落的某个图形使界面上的一行或多行完全填满,则组成这些行的所有小方块被消除,以此换取积分;未被消除的方块会一直积累,并对后来的方块造成一定的影响,如果未被消除的方块堆放的高度超过界面所规定的最大高度,则游戏结束。系统显示器左侧为方块存放区,右侧可显示下一个方块形状、当前得分、速度和游戏时间等。在设计过程中,我遇到了很多问题,比如按键功能问题、显示问题和声音控制问题等。经过查阅资料和不断尝试这些问题都逐一解决,在这一过程中我提高了独立思考的能力和解决实际问题的能力。本设计实现了俄罗斯方块游戏的基本功能,同时也存在很多不足。比如在显示方面,游戏显示图形的区域较小,如果将这个区域适当增大显示效果将会更好。又如在按键方面,本设计采用的是非自锁式的独立按键,这种按键虽然价格相对便宜但使用不太方便,以后可以尝试将按键换成游戏手柄。还有在声音方面,由于现在知识和能力有限,相对来说本设计在声音方面做得是比较粗糙的。如果在设计中应用专用芯片和器件使游戏进行的同时加上背景音乐,就更具有吸引力了。谢辞本设计能够顺利地完成,首先要感谢学院给我提供了这样一个平台,让我在毕业之前可以将所学知识付诸实践,完成了我的毕业设计;感谢系领导给予的大力支持和帮助。然后要感谢樊艳老师对我的指导。从设计题目的选取,到方案的设定老师都给予了细心的指导同时在此要感谢同学和朋友给予的帮助。这次毕设的完成离不开各位老师和同学,再次致以深深的谢意。参考文献[1]徐璐,唐勇波.基于VC的俄罗斯方块游戏设计与实现[J].软件导刊,2009,8[2]胡代弟,齐公博.用SPCE061A单片机实现俄罗斯方块游戏[J].电子制作,2008,10[3]张毅刚,彭喜元.单片机原理与应用设计[M],北京:电子工业出版社,2008,4[4]胡代弟,齐公博.用SPCE061A单片机实现俄罗斯方块游戏[J].电子制作,2008,10[5]童师白,华成英.模拟电子技术基础[M],北京:高等教育出版社,2007,7<3>:502-520[6]樊永显,许勇.基于STC89C54RC/RD+单片机的游戏机系统设计[J].XX工业大学学报,2007〔21:66-69[7]AT89C51DATASHEEPPhilipsSemiconductors[J],1999[8]STC89C52RCDataSheet[OL].[9]赵建领.51系列单片机开发宝典[M],北京:电子工业出版社,2007:123-125[10]刘同法,陈忠平.单片机外围接口电路与工程实践[M],北京:北京航天航空大学出版,2001:53-62[11]夏易路.单片机技术基础教程与实现[M],北京:电子工业出版社,2008,1:152-164[12]王为青,程国钢.单片机KeilCx51应用开发技术[M],北京:人民邮电出版社,2006,12:197-202[13]马俊伟.利用VC开发的俄罗斯方块游戏[J].电脑编程技巧与维护,2009,21[14]谢维成,杨家国.单片机原理与应用及C51程序设计[M],北京:清华大学出版社,2009,7:323-342[15]杜树春.单片机C语言和汇编语言混合编程实践[J],北京:航空航天大学出版社,2008:22-24[16]马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计[M],北京:北京航空航天大学出版社,1999,1:143-149[17]I.ScottMackKenzie.THE8051MICROCONTROLLER[M].USA.Prentice-Hall.Inc,1995[18]刘同法,陈忠平.单片机外围接口电路与工程实践[M],北京:北京航天航空大学出版社,2009,3:299-310[19]付家才.电子工程设计与实践[M],北京:化学工业出版社,2003,6[20]LCDDesignGuide[OL].附录附录一总体设计电路原理图附录二程序清单#include<AT89X51.H>#defineucharunsignedchar#defineuintunsignedint#defineDOWNTIME50 //用于控制图形下降时间的变量#defineMAXHANG21 //游戏显示区可容纳21行3*3的小方块#defineMAXLIE16 //游戏显示区可容纳18列3*3的小方块#defineMAXPIX3 //每个小方块是3*3的#definePUSHON50 //按键操作连续执行相关量#defineLCDP1//液晶屏的与C51之间的引脚连接定义〔显示数据线接C51的P0口#defineENP2_0//液晶屏的使能端#defineRWP2_1//选择读/写操作;RW=0为写操作,RW=1为读操作#defineRSP2_2//寄存器的选择;RS=0为写命令,RS=1为写数据#defineCS1P2_3#defineCS2P2_4//CS1、CS2用于选屏,低电平有效;CS1=0,CS2=1时选中左半屏;CS1=1,CS2=0时选中右半屏#defineKEYROTATIONP3_0//翻转#defineKEYDOWNP3_1//快速下落 #defineKEYLEFTP3_2//左移#defineKEYRIGHP3_3//右移#defineCHANGEP3_4 //变形#defineOKOKP3_7//确定/暂停--复用#defineBEEPP3_6//定义蜂鸣器 */#defineSTAR58 //右屏字符显示的起始列#defineWIDE6 //每个字符宽5列,字符间隔为1列,用于右屏中设置字符位置#defineSHOWSTAR12 //左屏框中字符显示的起始列#defineGAP8 //每个字符宽5列,字符间隔为3列,用于左屏中设置字符位置ucharg=0; //闯关预设为第1关uchargkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;//gkey、keystate按键相关标志符//t0ms中断计时相关变量//t0ms1按键操作连续执行相关量//downtimegap用于图形自动下移的变量,每次中断〔10ms加1,当downtimegap=DOWNTIME-5*speed时图形自动下移1次ucharmiao=0,fen=0,shi=0;uchardownok;//为1时,一个图形下落到底,开始新一个图形下落的标志位ucharstop=0; //控制复用键的变量bitkeyflag,timeupdate,fashionupdate,zt=1;//keyflag按键操作执行标志位//每1S使timeupdate置1,改变计时显示输出的标志位;//改变fashionupdate值使":"闪烁,fashionupdate=1":"消失;//zt用于暂停的中间变量;keyflag=1时有效,此时执行相应按键操作ucharidatacubeMap[MAXHANG][2]; typedefstruct{ucharcode*box; ucharcube:4;ucharstate:4; charrow; charcolumn; }block;//图形各属性的集合:row、column下降图形的初始位置//cube图形形状//state图形翻转的4个状态blockthis;uintscore=0;ucharspeed=1;ucharcodebittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};ucharcodecube[]={/*■■■■*/0,4,0xe,0,0,2,6,2,0,7,2,0,4,6,4,0,/*■■■■*/0,8,0xe,0,0,4,4,0xc,0,0,0xe,2,0,6,4,4,/*■■■■*/0,0xe,8,0,0,4,4,6,0,1,7,0,6,2,2,0,/*■■■■*/0,0xc,6,0,0,2,6,4,0,6,3,0,2,6,4,0,/*■■■■*/0,6,0xc,0,0,4,6,2,0,3,6,0,4,6,2,0,/*■■■■*/0,0xf,0,0,4,4,4,4,0,0,0xf,0,2,2,2,2,/*■■■■*/0,6,6,0,0,6,6,0,0,6,6,0,0,6,6,0};ucharcodeasii[]={0x3E,0x51,0x49,0x45,0x3E,//-0- 0x00,0x42,0x7F,0x40,0x00,//-1-0x62,0x51,0x49,0x49,0x46,//-2-0x21,0x41,0x49,0x4D,0x33,//-3-0x18,0x14,0x12,0x7F,0x10,//-4-0x27,0x45,0x45,0x45,0x39,//-5-0x3C,0x4A,0x49,0x49,0x31,//-6-0x01,0x71,0x09,0x05,0x03,//-7-0x36,0x49,0x49,0x49,0x36,//-8-0x46,0x49,0x49,0x29,0x1E,//-9-0x00,0x36,0x36,0x00,0x00,//-:-10//next0x7F,0x04,0x08,0x10,0x7F,//-N-110x7F,0x49,0x49,0x49,0x41,//-E-120x63,0x14,0x08,0x14,0x63,//-X-130x01,0x01,0x7F,0x01,0x01,//-T-14//speed0x26,0x49,0x49,0x49,0x32,//-S-150x7F,0x09,0x09,0x09,0x06,//-P-160x7F,0x49,0x49,0x49,0x41,//-E-170x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024某酒店与旅游公司之间的旅游服务合同
- 2024年渣土运输车分时租赁协议3篇
- 2024微商虚拟货币交易合作协议3篇
- 2024年车辆股权分割转让协议样本版B版
- 2024年版智能停车场建设与运营合同
- 2024投标书城市更新改造项目合同范本3篇
- 2024智能语音交互系统研发与商业化合同
- 2024年实习生职业素养培养实习协议书3篇
- 2024年环保设施运营委托担保合同范本23篇
- 2024民间借贷民事上诉状编制与法律援助服务合同3篇
- JJF(石化)047-2021氟化氢气体检测报警器校准规范
- 品质总监述职报告
- 2024年中信金属股份有限公司招聘笔试参考题库附带答案详解
- 山东省淄博市2022-2023学年高一上学期期末数学试题含答案
- 7【题组七】双变量的恒成立与存在性问题
- 2023年1月自考11749商务管理综合应用试题及答案
- 汽车制造整车AUDIT质量评审
- 非洲猪瘟防控难点与对策
- 教师如何管理和控制自己的情绪
- 《中外历史纲要(上)》全册单元知识点高频考点
- (完整版)庭审笔录(刑事普通程序)
评论
0/150
提交评论