单片机课程设计报告--基于单片机交通灯控制系统.docx
单片机课程设计报告-基于单片机交通灯控制系统单片机课程设计报告-基于单片机的交通灯限制系统 本文关键词:单片机,交通灯,限制系统,课程设计,报告单片机课程设计报告-基于单片机的交通灯限制系统 本文简介:单片机原理及系统课程设计报告单片机原理及系统课程设计评语:考勤(10)守纪(10)过程(40)设计报告(30)答辩(10)总成果(100)专业:自动限制班级:姓名:学号:指导老师:兰州交通高校自动化与电气工程学院2022年3月7日9基于单片机的交通灯限制系统摘要当今时代是一个自动化时代,交通灯限制等单片机课程设计报告-基于单片机的交通灯限制系统 本文内容:单片机原理及系统课程设计报告单片机原理及系统课程设计评语:考勤(10)守纪(10)过程(40)设计报告(30)答辩(10)总成果(100)专业:自动限制班级:姓名:学号:指导老师:兰州交通高校自动化与电气工程学院2022年3月7日9基于单片机的交通灯限制系统摘要当今时代是一个自动化时代,交通灯限制等许多行业的设备都与计算机亲密相关。因此,一个好的交通灯限制系统将在道路拥挤等交通状况方面赐予技术革新。本文主要介绍了一个基于89C52单片机的交通灯限制系统,具体介绍了利用89C52设计并仿真实现交通灯限制系统的过程,重点对硬件设计、软件编程、调试分析以及各模块系统流程进行了具体分析,对各部分的电路也一一进行了介绍。本电路由AT89C52单片机、按键、数码管和LED灯组成,并在Protues软件上实现仿真。关键词:交通限制;单片机;AT89C52AbstractTheagesisanautomationagesnowadaysandtrafficlightcontrolswaitingalotofequipmentsofprofessionsiscloselyrelatedwithcalculator.Therefore,agoodtrafficlightcontrolsystemwillhustleforroad,givetechniqueinnovation.Thispaperdescribesa89C52microcontroller-basedtrafficlightcontrolsystem,detaileddescriptionoftheuse89C52developmentprocessofthetrafficlightcontrolsystem.Focusonadetailedanalysisofthehardwaredesign,softwareprogramming,analysisanddebuggingprocessofthemodularsystem,onthepartofthecircuitareintroducedonebyone.ThecircuitismadeupofAT89C52microcomputer,keyboard,digitaltubeandLEDlampdisplayandrealizesimulationintheProtuessoftware.Keywords:TrafficControl;SingleChipMicrocomputer;AT89C521引言信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行实力、削减交通事故有明显效果。交通灯在城市交通中起着重要的作用,它与人们日常生活亲密相关,是人们出行的平安保障。因此供应一个牢靠、平安、便捷的多功能交通灯限制系统有着现实的必要性。1.1设计目的通过应用单片机的有关学问,能够独立设计出基于单片机的交通灯限制系统,并要求在紧急状况下能运用中断方式限制指示灯的亮灭来转换道路通行方向。1.2设计要求本设计是单片机限制的交通灯限制系统设计。要求设计出针对一个大型十字路口设计的交通信号灯限制系统。通过单片机AT89C52限制LED灯和数码管,模拟现实生活中的交通灯工作情景。1.3设计方法本设计是将事先编制好的程序输入单片机,利用单片机的定时、查询、中断功能,依据十字路口两个方向上车辆动态状况赐予肯定的时间通行,其中利用中断方式来处理特别状况。2设计方案及原理交通灯的限制分为自动限制和人工限制两种方式,正常状况下,交通灯处于自动限制方式,此时东西方向和南北方向的交通灯轮番导通,特别状况下,可以通过人工方式延长东西方向或南北方向交通灯的导通时间。设计两个按键K1、K2,分别为延长南北方向交通导通时间和东西方向交通导通时间。自动限制方式:系统上电后处于自动限制方式,首先是南北方向交通导通,南北方向亮绿灯,东西方向亮红灯,数码管从20秒起先倒计时,每隔1秒减1。倒计时结束时,南北方向黄灯起先闪耀,闪耀间隔为0.5秒,共闪耀5秒。黄灯闪耀5秒倒计时结束之后,东西方向交通导通,东西方向亮绿灯,南北方向亮红灯,数码管重新起先从20秒倒计时,每隔1秒减1。人工限制方式:交通信号灯限制系统设有手控开关。在东西方向车道放行期间,若南北方向车流量较大,按下开关K1使南北方向车道放行;在南北方向车道放行期间,若东西方向车流量较大,按下开关K2使东西方向车道放行。采纳外部中断执行中断服务程序,并设置中断为低优先级中断。总体设计框图如图1所示。图1总体设计框图3硬件设计3.1主限制系统模块主限制器采纳AT89C52单片机。AT89C52具有1个8KB的FLASH程序存储器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16位定时/计数器及1个串行口和6个向量二级中断结构。单片机的P1口分别用于限制东西方向车道及南北方向车道的通行灯,P0口和个别P3口用于2个2位LED计时器的限制。3.2时钟电路模块时钟电路由一个12MHZ晶体振荡器和两个30pF的瓷片电容组成,时钟电路用于产生单片机工作所须要的时钟信号。电路如图2所示。图2时钟电路模块3.3复位电路模块复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这状态起先工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱逆境,也需按复位电路以重新启动。因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位事实上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。电路如图3所示。图3复位电路模块3.4交通灯输出限制模块道口交通灯指示采纳高亮度红、黄、绿发光二极管进行提示。通过与驱动电阻连接使发光二极管根据程序要求亮灯。电路如图4所示。图4交通灯输出限制电路3.5时间显示电路模块道口通行剩余时间倒计时采纳高亮红色7段LED发光数码管显示,采纳共阴极数码管。电路图如图5所示。图5数码管显示模块4软件设计主程序采纳查询方式定时,通过调用0.5S延时子程序的次数,从而获得交通灯的各种时间。子程序采纳定时器1方式1查询定时,定时器定时50ms,确定50ms循环20次,从而获得1S的延时时间。有车车道的放行的中断服务程序首先要爱护现场,因而需用到延时子程序,子程序采纳定时器0方式1查询式定时,定时器定时50ms,确定50ms循环20次,从而获得1S的延时时间,爱护现场时还需关中断。由软件查询外中断,判别哪一道有车。待交通灯信号出现后,保持10S的延时,然后关中断,复原现场,再开中断返回主程序。4.1程序流程图图6程序流程图5系统仿真及实际调试正常状况下的南北车道绿灯20S放行仿真图如附图1所示。当南北车道无车,东西车道有车时,切换到东西车道绿灯时的仿真图附图2所示。6总结通过此次课程设计,复习巩固以前我们所学习的数字、模拟电子技术、单片机原理及接口等课程学问,加深对各门课程及相互关系的理解,并胜利运用了ProteusIsis电子软件,使理论学问系统化、好用化。制作过程中遇到了许多问题,通过不断地查资料,不断地调试,一一解决。此次课程设计巩固了我的基础学问,提高了我的应用水平,熬炼了我的动手实力,使我受益匪浅。然而,在吸取阅历的同时,我也吸取了不少教训。在编写软件中,在此过程中我更为娴熟得驾驭汇编语言各种指令的运用方法,驾驭了keil软件的运用。在编程、仿真方面都走了不少弯路。在软件调试过程中,使我又一次复习了keil和proteus联合运用的方法。在调试时曾经遇到数码管倒计时显示时间两位不能同时显示,后来经过查找资料不断调试才领悟到原来在显示的过程中要循环显示才能使得显示稳定下来。通过这次课程设计,我驾驭了用单片机设计交通灯的基体方法,增加了我找寻问题,解决问题的实力。在今后的学习和实践中,我将接着努力钻研,提高自己,争取在学术和记忆上获得更大的进步。参考文献1李华,王思明,张金敏.单片机原理及应用M.兰州:兰州高校出版社,2001.52杨居义.单片机课程设计指导M.北京:清华高校出版社,2022.123卢艳军.单片机原理及应用系统M.北京:机械工业出版社,2022.2附录程序源代码ORG0000H;初始化AJMPBEGINORG0003HLJMPZDORG0013HLJMPZDORG0030HBEGIN:MOVSP,#6FH;设置中断位SETBEA;打开总中断SETBEX0;打开外部中断0SETBEX1;打开外部中断1CLRIT0CLRIT1AL:MOVR7,#20;南北车道亮绿灯20s程序MOVP1,#0DEHLCALLTIME1SMOVR4,#05AH:MOVP1,#0DDH;南北方向亮黄灯MOVR5,#05AAA:LCALLTIME01S;延时0.5sDJNZR5,AAAMOVP1,#0DFHMOVR5,#05BBB:LCALLTIME01S;延时0.5sDJNZR5,BBBDJNZR4,AHBL:MOVR7,#20;东西方向亮绿灯20s程序MOVR0,#0F3HMOVP1,R0LCALLTIME1SMOVR4,#05BH:MOVR0,#0EBH;东西方向亮黄灯MOVP1,R0MOVR5,#05BA:LCALLTIME01S;延时0.5sDJNZR5,BAMOVR0,#0FBHMOVP1,R0MOVR5,#05BB:LCALLTIME01S;延时0.5sDJNZR5,BBDJNZR4,BHJMPALTIME1S:MOVR3,#50;延时1sCLRAABC:MOVA,R7LCALLXSDJNZR3,ABCDJNZR7,TIME1SRETTIME01S:MOVR7,#05;延时0.1sCLRABCD:MOVA,R4LCALLXSDJNZR7,BCDRETTIME10MS:MOVR2,#20;键扫描10ms子程序YS:MOVR6,#248DJNZR6,$DJNZR2,YSRETXS:MOVR6,A;延时20ms并输出秒数MOVR1,#40HMOVA,R6MOVB,#10DIVABMOVR1,AINCR1MOVR1,BMOVDPTR,#LISTMOVA,R1MOVCA,A+DPTRMOVP0,ACLRP3.7LCALLTIME10MSSETBP3.7DECR1MOVDPTR,#LISTMOVA,R1MOVCA,A+DPTRMOVP0,ACLRP3.6LCALLTIME10MSSETBP3.6RETLIST:DB3FH,06H,5BH,4FH;查表DB66H,6DH,7DH,07HDB7FH,6FH,77H,7CHDB39H,5EH,79H,71HDB40H,00HZD:MOV43H,R7;中断PUSH43HMOV44H,R0PUSH44HMOV45H,R6PUSH45HMOV46H,R3PUSH46HJNBP3.2,S1JNBP3.3,S2RETS1:MOVR7,#10;由东西方向切换为南北方向MOVR0,#0DEHMOVP1,R0LCALLTIME1SAJMPFINALLYS2:MOVR7,#10;由南北方向切换为东西方向MOVR0,#0F3HMOVP1,R0LCALLTIME1SAJMPFINALLYFINALLY:POP46HMOVR3,46HPOP45HMOVR6,45HPOP44HMOVR0,44HPOP43HMOVR7,43HRETIEDN仿真图附图1正常状况下南北车道放行20S仿真图附图2南北车道绿灯切换为东西车道绿灯的仿真图篇2:单片机实训总结报告单片机实训总结报告 本文关键词:单片机,实训,总结报告单片机实训总结报告 本文简介:超声波测距实训总结报告专业:电子信息工程班级:信息091姓名:郑干恒(15)何清华(43)指导老师:邬志锋日期:2022.6.19广东交通职业技术学院交通信息学院摘要超声波测距技术在当今社会生活中已有很广泛的应用,本报告在了解超声波测距原理的基础上,完成了基于时差测距原理的一种超声波测距系统的软硬件单片机实训总结报告 本文内容:超声波测距实训总结报告专业:电子信息工程班级:信息091姓名:郑干恒(15)何清华(43)指导老师:邬志锋日期:2022.6.19广东交通职业技术学院交通信息学院摘要超声波测距技术在当今社会生活中已有很广泛的应用,本报告在了解超声波测距原理的基础上,完成了基于时差测距原理的一种超声波测距系统的软硬件设计,其中的限制芯片是STC89C52RC系列单片机。报告着重介绍了STC89C52RC与超声波测距模块组成的超声波测距系统的组成原理以及应用,另外也介绍了LCD显示等模组的应用。该系统可广泛应于小距离测距、机器人检测、车辆倒车雷达以及家居安防系统等应用方案。最终实际运用表明能实现基本测量。【关键词】STC89C52RC超声波距离测量一、设计背景本次设计的是以STC89C52RC单片机为核心的微型化数字显示超声波距离测量仪。二、设计任务要求1、实现对目标距离非接触性测量2、实现测量距离的显示三、超声波测距简介超声波测距原理:超声波具有方向性好,在介质中传播能量消耗缓慢,且其速度远小于光速等特点,因而超声波可用于距离测定。超声波测距的基本思想是,通过测量从超声波放射到接受到反射回波的时间间隔来计算距离。四、系统工作原理框图单片机控制超声波发送发送障碍物液晶显示超声波接收图1超声波测距系统原理框图五、超声波测距的实现方法总体介绍:规格:10cm*10cm实图:功能简介增加5cm报警距离放射信号超声波放射超声波接收复位键削减5cm报警距离液晶显示蜂鸣器下载端口电源开关停止信号放射图2实物图展示5.1硬件实现方法硬件电路主要分为单片机系统、显示及发声电路、矩阵键盘电路、超声波放射电路和超声波接收电路五部分。5.1.1超声波放射电路超声波放射电路原理图如图3所示,放射电路主要由反向器(74LS04)和超声波换能器构成。单片机P31口输出的40KHZ方波信号经一级反向器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器两端以提超群声波的放射强度。输出端采纳两个反向器并联,用以提高驱动实力。上拉电阻R9和R10一方面可以提高反向器74LS04输出高电平的驱动实力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡的时间。图3超声波放射电路5.1.2超声波接收电路超声波接收电路原理图如图4所示。集成电路CX20226A是一款红外线检波接收的专用芯片,考虑到红外遥控常用的载波频率38KHZ与测距的超声波频率40KHZ较为接近,可以利用它制作超声波接收电路。图4超声波接收电路5.1.3单片机系统测距系统以单片机STC89C52RC为核心,采纳24MHZ晶振,以获得较稳定的时钟频率,减小测量误差。单片机用P31端口输出超声波换能器所需的40KHZ方波信号,利用外中断0监测超声波接收电路的返回信号。单片机系统电路如图5所示。图5单片机最小系统5.1.4显示、发声电路显示电路采纳LCD1602液晶。发声电路采纳蜂鸣器HXD。如图6所示。图6显示、发声电路错误!未找到书目项。由于本系统所须要用到的按键比较少,所以采纳独立式键盘电路图7矩阵键盘电路5.2软件实现方法5.2.1测距算法超声波测距电路的程序设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。测量过程:超声波发生器放射出一系列超声波后,遇到反射物返回,然后接收器接收到放射波后送往CX20226A进行检波,产生外部中断,单片机通过计算前后时间差即可算出距离。假设环境温度为25°C,此时声速为V=346m/s,由此可以推出距离S:S=v*t/2t=(TH0*256+TL0)/(fosc/12)既得,S=V*(TH0*256+TL0)/(fosc/12)/2说明:THO,TLO为产生外部中断时的当前值,fosc为我们采纳的晶振频率(24MHZ),通过上式可以求出距离S(m)。5.22主程序流程图开始系统初始化发送超声波脉冲接收反射信号触发中断计算距离显示结果图5主程序流程图说明:T0用于计算超声波的传播时间,工作在方式1,16位计数器,约32.5ms溢出一次,T1用于放射超声波,工作在方式2,8位重装载计数器,初值为0xe7,即每12.5us取反一次,产生40KHZ方波。T1以查询方式放射超声波,当定时器T0中断产生时,在中断处理程序中读取T1当前的计数值,因为晶振频率为24mhz,所以每计数一次用时0.5us,所以可以得到从超声波发送到反射回来的时间,进而可以通过计算得到距离。六、系统测试与误差分析实际(cm)123410406080100110120130测量(cm)33441040608099110120129误差(cm)211000001001经过测试得该系统的测距误差大约为1cm,测量盲区为0-4cm,最大有效范围250cm七、参考文献单片机C语言应用100例王东峰王会良懂冠强编著电子工业出版社单片机实训指导书邬志锋香永辉编著广东交通职业技术学院AltiumDesigner快速入门余向民主编北京航空航天高校出版社实训心得这次亲自做出超声波测距器,再用自己做的超声波测距行距离的测量,不仅能推断数据的正误,而且对其测距的原理特别的清晰,驾驭了怎样把距离变为信号再表示出来的转换思想。在做超声波测距器的过程中,我们小组成员分工明确,各有所职,从刚起先找资料,分析资料讲的超声波测距原理,到大家确定方案,再到打算材料单,画出电路图,做出电路板,到焊接电路,和最终的调试电路,使其能够显示出数据,和尽可能的精确测出数据。在这个过程中,大家也遇到了些小麻烦,比如说,第一次制作好电路板的时候,我们的系统根本无法工作,无法下载程序,经过我们的细心查找,最终发觉了一个重大的错误我们的原理图上,原本应当接地的一个端口被接上了电源,导致晶振无法起振;并且在实际焊接电路板时有一个排阻也接反了。发觉了这些错误后我们毅然确定重新再做一块电路板。其次块电路板做出来后,我们的板子已经能下载程序了。但是我们在接下来编写程序的工作中又遇到了一个难题:我们把在软件上调试好的程序下载到单片机系统中,但是却没能实现测距的功能,在多次反复检查硬件后,我们一样认为是超声波模块出现了故障,最终我们又到电协用示波器测试超声波的放射端,示波器显示我们的超声波放射电路工作正常,于是我们才确定了是超声波的接收电路出现故障。最终通过各种尝试及对放射电路的排查,我们最终找到超声波接收电路的故障所在,就是有一个电阻的阻值太大,我们换了阻值小的电阻后,最终实现了系统的测距功能,测距显示胜利之后,还有一个问题就是测距不是那么精确,我们又对程序进行了多次改进,使我们的超声波测距系统测出的距离精确度大大提高了。通过这次制作超声波测距,我们收获的,不仅仅是那些有关超声波、电子制作等的学问,更重要的是让我们明白到许多时候,大胆的揣测和英勇地尝试,往往会得到意想不到的收获,心动不如行动,亲自动手付出的一份一份劳动,才能累积足够的高度去成为去抓住幻想的阶梯。篇3:单片机及DSP课程设计报告单片机及DSP课程设计报告 本文关键词:课程设计,机及,报告,DSP单片机及DSP课程设计报告 本文简介:一、课设目的1、通过本设计,能综合运用单片机技术原理与应用、DSP原理与应用C语言程序设计以及数字电路、模拟电路等课程的内容,为以后从事电子产品设计、软件编程、系统限制等工作奠定肯定的基础。2、学会运用KEILC和PROTEUS等软件,用C语言或汇编语言编写一个较完整的好用程序,单片机及DSP课程设计报告 本文内容:一、课设目的1、通过本设计,能综合运用单片机技术原理与应用、DSP原理与应用C语言程序设计以及数字电路、模拟电路等课程的内容,为以后从事电子产品设计、软件编程、系统限制等工作奠定肯定的基础。2、学会运用KEILC和PROTEUS等软件,用C语言或汇编语言编写一个较完整的好用程序,并仿真运行,保证设计的正确性。3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。二、课设内容设计一个基于单片机的音乐播放器,在播放音乐的同时并能显示播放的歌曲序号,同时可以实现上一曲、下一曲的转换;在播放的同时,还能实现暂停/起先的功能。3、问题分析、方案的提出、设计思路及缘由要想使播放器发出响声,就得设计一个能产生声响的程序,让单片机输出到扬声器。音调的凹凸用音阶表示,不同的音阶对应不同的频率。因此,不同频率的方波就可以产生音阶。由于频率的倒数是周期,因此可由单片机中的定时限制方波周期,当定时器计数溢出时产生中断。将与扬声器连接就可得到方波的周期,从而达到了限制频率,即音阶的目的。通过TXAL1与TXAL2输入时钟信号,通过p1.0p1.7输出限制现实限制信号显示,有p3.2、p3.3与p3.5分别作为上一曲、下一曲和起先暂停的限制输入。显示电路是一个8位共阴极LED数码管。单片机的P0.0-P0.7分别与数码管的A、B、C、D、E、F、G、DP相连接。晶振电路由两个1nF的电容和一个6Mhz的晶体振荡器组成。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机供应时间信号,为音乐的播放节拍限制供应基本时间单位:当晶体振荡频率为6.MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可依据下式计算X:限制电路,键一与p3.2相连、键二与p3.3相连、键3与p3.5相连。当电键按下时接口接低电平,从而实现对音乐播放器的限制。键一联通实现上一曲更换,键发声电路由数字扬声器连接p2.0接口实现音乐的输出,由限制电路发出操作指令后,单片机调用相应程序,并将音乐信号由p2.0口输出,通过驱动扬声器发出奇妙的音乐。二联通实现下一曲更换,键三联通实现起先暂停操作。四、电路设计及功能说明,硬件原理框图及电路图AT89C51是一种带4K字节闪耀可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。总原理图51单片机显示电路电源电路键控电路复位电路晶振电路发声电路时钟电路与振荡器共同产生单片机所需的工作时钟信号功能选择电路实现播放器的功能操作显示电路实现单片机的信息显示功能起先4、软件部分的程序流程图,算法和运用的编程技巧;初始化查询歌曲曲目上一曲、下一曲数码管显示暂停、播放等待播放关闭显示播放音乐推断是否结束?否是结束1、总体思路主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目推断。确定歌曲曲目后,数码管再进行显示。然后,子程序对是否播放进行循环推断,得到播放中断的指令后再进行播放。执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。在播放音乐的过程中,查表子程序循环推断音乐是否结束。当音乐结束时,程序跳转回曲目识别子程序。5、源程序清单OUTBITP2.0;定义音频输出端口,p2.0NEQU3;歌曲总数OUT_NUMEQUP1;数码管显视当前所放歌曲曲数ORG0000HAJMPMAINORG0003HAJMPLAST_SONG;外部中断0用于接上一曲歌按键ORG000BHAJMPF_T0;定时器0用于定时,作音符发生器用ORG0013Hq4:AJMPNEXT_SONG;外部中断1接下一曲歌按键ORG001BHAJMPSTART_PAUSE;定时器1用计数,这里用作中断,接起先/暂停键,初值为0ffH,方式2ORG0030HMAIN:MOVSP,#60HMOVDPTR,#TABLE;DPRT指向每首歌曲的入口地址的地址。MOVR0,#30H;R0中存入数据30H,这里在以30H起先的单元存放每首歌曲的入口地址,其中30H,31H存放歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。MOVR5,#00H;R5中存放表TABLE中正在执行操作的序号MOVR6,#1;R6存放正在设置入口信息的歌曲数SET_TAB:MOVA,R5;设置每首歌曲的入口信息,存放在以30H起先的存储单元中。MOVCA,A+DPTRMOVR0,AINCR5INCR0MOVA,R5MOVCA,A+DPTRMOVR0,AINCR5INCR0MOVA,R5MOVCA,A+DPTRMOVR0,AINCR0INCR5MOVA,R5MOVCA,A+DPTRMOVR0,AINCR0INCR5INCR6;设置完一首歌曲后,歌曲数加一CJNER6,#N+1,SET_TAB;是否设置完,没有便接着,否则进行下面的操作;*对中断,计数器的相关参数进行设置MOVTMOD,#61H;计数器0工作方式1,计数器1工作方式2MOVTH1,#0FFH;给计数器1置初值0FFH,又由于是工作方式2,所以MOVTL1,#0FFH;计数器计数为1,相当于一外部中断。SETBET1;允许计数器1中断SETBET0;允许计数器具0中断CLRPT0;计数器0为低优先级SETBPT1;计数器1为高优先级SETBIT0;外部中断0为跳沿触发SETBPX0;高优先级SETBIT1;外部中断1为跳沿触发SETBPX1;高优先级SETBEX1;允许外部中断1中断SETBEX0;允许外部中断定0中断SETBEA;开中断总开关SETBTR1;定时器1起先工作,作中断用SETBOUT;音频输出端口初始化;*;设置结束CLRF0;设置F0=0,用来作暂停/播放的标置位用MOV22H,#01H;22H单元中存放正在播放的歌曲编号MOVDPTR,#OUT_TAB;将正在播放的歌曲编号送数码管显视MOVA,22HMOVCA,A+DPTRMOVOUT_NUM,AMOVR7,#00H;R7中存放歌曲总信息的入口地址START0:MOVR4,#00H;R4存放当前正在播放歌曲的第几个节拍数MOVR0,#30H;30H起先的单元中存放歌曲的入口信息MOVA,R7;将歌曲的节拍表的入口地址送到DPTRADDA,R0MOVR0,AMOVDPH,R0INCR0MOVDPL,R0INCR0MOVA,R4INCR4MOVCA,A+DPTR;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符;*MOV26H,A;将取出的音符数+节拍数保存在职26H单元中NEXT:MOVR0,#30H;起先取出歌曲的第一个数据MOVA,R7ADDA,R0MOVR0,AMOVDPH,R0INCR0MOVDPL,R0INCR0MOVA,R4INCR4MOVCA,A+DPTR;放在A中;*JZEND0;若为0,则表示为休止符,不唱,本次音符不唱,MOVR1,A;不为0,取出节拍数ANLA,#0FHMOVR2,AMOVA,R1SWAPAANLA,#0FHJNZSING;音符不为0,唱CLRTR0;为0,不唱,关频率发生器SJMPSING1SING:DECA;起先唱,进行相应的数据处理MOVR3,ARLAMOVDPH,R0INCR0MOVDPL,R0INCR0MOVCA,A+DPTRMOV21H,AMOVTH0,AMOVA,R3RLAINCAMOVCA,A+DPTRMOV20H,AMOVTL0,ASETBTR0;开唱SING1:LCALLDELAY;每个音符唱多久JBF0,FOR;是否暂停,AJMPNEXT;没有暂停,接着FOR:CLRTR0;暂停,不唱JBF0,$;等待播放AJMPNEXT;起先播放END0:CLRTR0;不唱MOVA,22H;唱完处理CJNEA,#N,WW;是不是全部歌曲都唱完MOV22H,#01H;全部唱完,则从第一首起先再唱MOVR7,#00HMOVOUT_NUM,#06H;数码管显视第一首歌曲编号AJMPWWWWW:MOVA,R7;没有全部唱完,唱下一首,歌曲的入口信息调整ADDA,#4MOVR7,AINC22HCLREAPUSHDPHPUSHDPLMOVA,22HMOVDPTR,#OUT_TABMOVCA,A+DPTRMOVOUT_NUM,A;数码管显视相应的歌曲编号POPDPLPOPDPHWWW:SETBEAAJMPSTART0;起先下一首的演唱F_T0:MOVTH0,21H;定时器0置初值MOVTL0,20HCPLOUT;频率产生RETINEXT_SONG:PUSHACC;下一曲中断程序处理,爱护现场PUSHDPHPUSHDPLCLREA;关中断MOVA,22HCJNEA,#N,Q;是最终一首吗?MOVR7,#00H;是最终一首,则R7指向第一首,演唱第一首MOV22H,#01HAJMPBACKQ:INC22H;不是最终一首,唱下一首,R7内容加4,歌曲数加1MOVA,R7ADDA,#4MOVR7,ABACK:MOVR4,#00H;数码管显视相应的歌曲编号MOVA,22HMOVDPTR,#OUT_TABMOVCA,A+DPTRMOVOUT_NUM,A;*MOVB,R0;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行爱护MOVR4,#00HMOVR0,#30HMOVA,R7ADDA,R0MOVR0,AMOVDPH,R0INCR0MOVDPL,R0INCR0MOVA,R4INCR4MOVCA,A+DPTRMOV26H,A;结果存入26H单元中DECR4MOV