基于51单片机音乐盒课程设计_第1页
基于51单片机音乐盒课程设计_第2页
基于51单片机音乐盒课程设计_第3页
基于51单片机音乐盒课程设计_第4页
基于51单片机音乐盒课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

课程名称微机原理课程设计题目基于51单片机的音乐盒设计摘要随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本设计是一个基于STC89C52RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个按键用来控制歌曲的播放、暂停以及换曲,另一个用来控制数码管上歌曲次序的变化,本音乐盒共有三首歌曲。播放歌曲时,相应歌曲对应相应数码管上歌曲次序的显示。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试。随后依照仿真布局在ALTIUMDESIGNER软件中绘制PCB单面板,检查无误后制成实物单面覆铜板。关键字STC89C52RCKEILPROTEUSPCB目录一、设计任务与要求411设计任务412设计要求413发挥部分4二、方案总体设计521方案列举522方案论证523总体设计原理5三、硬件设计631STC89C52RC芯片632晶振电路733开关按键电路834P0口上拉电阻835复位电路936蜂鸣器电路1037电源电路1138一位共阴数码管12四、软件设计1441软件设计程序流程图1442软件头文件定义以及字符类型定义1543音频、音调程序设计1544按键与蜂鸣器接口端程序设计1645外部中断程序设计1646定时程序设计1747延时程序编写1848主程序的编写18五、系统仿真与调试2051仿真平台2052仿真调试2053测试总结21六、PCB单面板制作2261绘制平台2262原理图的绘制2263PCB单面板的绘制22七、设计总结与心得体会2471设计总结2472心得体会24八、参考文献25附录一源程序26一、设计任务与要求11设计任务制作一个简易音乐盒,要求利用若干开关按键控制音乐播放并利用一位数码管显示相关消息。12设计要求完成该模块的硬件和软件的设计,在PROTEUS软件上仿真通过后,用ALTIUM_DESIGNER软件进行PCB单面板的绘制,修改合理后制成单面覆铜板。随后将程序下载到单片机进行硬件验证。最后就课程设计本身提交一篇课程设计说明文档。13发挥部分分别利用两个开关按键控制音乐的播放暂停和换曲操作,同时利用一位共阴数码管显示相关歌曲曲目的变化。二、方案总体设计21方案列举方案一用四个按键控制音乐的播放。3个按键选择3首不同的音乐播放,另一个按键控制音乐的停止。按下播放键,简单的控制之后,才开始播放音乐。比如,用定时器控制,亮灯倒计时10秒然后触发音乐播放。方案二用两个按键控制音乐的播放。一个按键(S1)控制音乐的播放、暂停以及换曲,另一个按键S2控制数码管上的曲目的更换。按下播放键S1,单片机开始播放音乐,再次按下该键,音乐播放暂停第三次按下该键,歌曲默认更换到下一首。每次按下选曲按键S2,单片机暂停当前歌曲的播放,并依次在数码管上显示曲目的更换。22方案论证在方案1中,共用了4个按键,其中3个按键控制播放3首音乐,另一个键控制音乐播放的停止。但是只能选择3首音乐,不能显示是哪首歌局限性太强。因此我们选择方案二更为合适、妥当。23总体设计原理本次设计是一个基于STC89C52RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路、蜂鸣器以及显示电路组成。使用一个按键来控制开始,播放和暂停、换曲。利用一个按键来显示数码管上曲目的更换并暂停当前曲目的更换,共三首音乐,蜂鸣器每播放一首歌时数码管上显示相对应的歌曲次序。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试。随后依照仿真布局在ALTIUMDESIGNER软件中绘制PCB单面板,检查无误后制成实物单面覆铜板。三、硬件设计31STC89C52RC芯片STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051片机。其引脚图如图1所示。图1STC89C52RC芯片引脚图STC89C52RC主要特性如下增强型8051单片机,指令代码完全兼容传统8051;工作电压55V33V(5V单片机)/38V20V(3V单片机);工作频率范围040MHZ,相当于普通8051的080MHZ,实际工作频率可达48MHZ;用户应用程序空间为8K字节;片上集成512字节RAM;通用I/O口(32个),复位后为P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻;ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P30,TXD/P31)直接下载用户程序,数秒即可完成一片;具有EEPROM功能;具有看门狗功能;共有2个16位定时器/计数器;即定时器T0、T1;外部中断2路,下降沿中断或低电平触发电路,POWERDOWN模式可由外部中断低电平触发中断方式唤醒;通用异步串行口(UART),还可用定时器软件实现多个UART;工作温度范围4085(工业级)/075(商业级);PDIP封装。P3口具有第二功能P30/RXD(串行输入口),P31TXD(串行输出口),P32/INT0(外部中断0),P33/INT1(外部中断1),P34T0(记时器0外部输入),P35T1(记时器1外部输入,P36/WR(外部数据存储器写选通),P37/RD(外部数据存储器读选通)。本设计中用到32位通用I/O口中P0、P2和P3的部分端口,RST电路复位以及外部中断等重要功能,其中P32口和P37口通过开关按键构成控制电路,27口接蜂鸣器构成输出电路,PO端通过上拉电阻的钳位、限流作用接一位共阴极数码管构成数字显示。32晶振电路晶体振荡器,简称晶振,它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络。晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。2PFCGNDYMHZX晶振电路图2晶振电路晶振在应用具体起到的作用,微控制器的时钟源可以分为两类一种是皮尔斯振荡器配置,适用于晶振和陶瓷谐振槽路。另一种为简单的分立RC振荡器。基于晶振与陶瓷谐振槽路的振荡器通常能提供非常高的初始精度和较低的温度系数。RC振荡器能够快速启动,成本也比较低,但通常在整个温度和工作电源电压范围内精度较差,会在标称输出频率的5至50范围内变化,震荡脉冲频FOSC在0至24MHZ范围内变化。但其性能受环境条件和电路元件选择的影响。需认真对待振荡器电路的元件选择和线路板布局。本设计中的晶振振荡电路(如图2)是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于电路的负载电容。同时,晶振可以等效为一个电感,所以只要晶振的两端并联上合适的电容它晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。其中端点1接STC89C52RC芯片的19引脚,端点2接芯片的18引脚。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄所以即使其他元件的参数变化很大这个振荡器的频率也不会有很大的变化。本实验中使用的是22PF的电容,如果再考虑元件引脚的等效输入电容,则两个22PF的电容构成晶振的振荡电路就是比较好的选择,但本设计简易,所以对于等效输入电容带来的误差不予讨论。33开关按键电路利用1位按键开关连接P32控制数码管的7个输入口,通过改变按键开关进行3个数字的显示和改变利用另1位按键开关连接P37控制外部中断,通过改变按键开关进行歌曲的播放、暂停。在实验室中有条件的话还利用数字电路实验箱,在适当的时钟频率下,控制位信号的输入,从而实现数码管的各段的显示,在数码管上显示数字。使用C语言描述上述控制过程,并将程序下载至控制芯片中,实现可编程器件的控制过程。GNDS2、P开关按键图3开关按键电路最先的思路包括通过三个按键控制数码管显示。在过程中发现三个按键的控制需要分时的操作,比较麻烦并且难于实现。于是采用简单的设计方案,采用一个按键控制数字,通过改变不同脉冲信号的输入来改变不同数字的显示。其电路图如图3所示。34P0口上拉电阻一般作单键触发使用时,如果IC本身没有内接上拉电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。数字电路有三种状态高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻排阻消除高阻状态。上拉电阻实物图如图4所示。图4上拉电阻实物图I/O端口的输出类似于一个三极管的集电极,当集电极通过一个电阻和电源连接在一起的时候,该电阻成为上拉电阻。简而言之,上拉电阻就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路提供输出电流通道。上拉电阻就是将电源通过电阻接到输出端。如果输出端是OC集电极开路,TTL或OD漏极开路,CMOS输出,不接上拉电阻则输出端无驱动能力。对于P1、P2、P3口内部就以及有上拉电阻,如果其端口电流较大,电平就会降低(电阻大,相应压降也太大),就可以通过外接上拉电阻(就是并一个电阻在IC内部的上拉电阻上,这时总电阻减小,总电流增大)提供电流分量,将电平“拉高”。本次设计中使用的上拉电阻为九引脚排阻(如图5所示)。顾名思义,排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚,其余引脚正常引出。所以如果一个排阻是由N个电阻构成的,那么它就有N1只引脚,一般来说,最左边的那个是公共引脚,它在排阻上一般用一个色点标出来。由于排阻引脚众多,所以排阻比若干只固定电阻更为方便。本次设计中排阻依次连接单片机P0口各引脚上拉电阻VCC端接单片机VCC端。图5上拉电阻35复位电路单片机在启动时都需要进行复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期24个振荡周期以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有手动按钮复位和上电复位。1)上电复位上电复位即是在RST复位输入引脚上接一电容至VCC端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1UF。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,VCC的上升时间约为10MS,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHZ,起振时间为1MS;晶振频率为1MHZ,起振时间则为10MS。在右图的复位电路中,当VCC掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“L”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。10KRUFC3STVGND复位电路图6复位电路2)手动按钮复位手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源VCC之间接一个按钮。当人为按下按钮时,则VCC的5V电平就会直接加到RST端。本设计采用的即是手动复位,其电路图如图6所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。该电路中将10UF电容与开关并联是为了在开关断开时减少开关断开的两个触点之间形成的电弧,开关闭合时,则没有消除电火花的作用。因为开关所接的电路中,常常都属于感性负载,感性负载在断电时由于电流不能突变,因此会在断开的两个触点之间形成的电弧,这个电弧一方面对触点造成损坏作用(容易拉成毛刺),一方面影响电路的断开时间,加上电容后,由于电容两端电压不能突变,使触点两端的电压也不能突变,因此就没有火花形成,起到保护触点的作用和及时断开电路的作用。接地端连接10K电阻则是为了保护复位电路不会因为电流过大而烧毁同时也能为复位电阻提供部分电压能力。36蜂鸣器电路蜂鸣器是一种一体化结构的电子讯响器,广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件,主要分为电磁式蜂鸣器和压电式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。P7Q9蜂鸣器电路图7蜂鸣器电路本次设计使用到的是第一种电磁式蜂鸣器。电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机I/O引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此在单片机P27引脚与蜂鸣器之间串联一个电阻和NPN型三极管9012。其电路原理如图7所示,蜂鸣器的负极接到接地端,三极管Q1集电极接到VCC(5V)电源上面、发射机接到蜂鸣器的正极,三极管的基级经过限流电阻R3后由单片机的引脚控制,当P27输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当P27输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P27脚的电平来使蜂鸣器发出声音和关闭。程序中改变单片机P27引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变P27输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。37电源电路现代电子电器中大量采用发光二极管作为电源指示灯,本设计使用的即是发光二极管电源指示灯电路。采用发光二极管作为指示器件具有许多优点,如发光醒目、耗电小、指示颜色可变等。如图8所示,电路中的L0是发光二极管,当它发光时表示电路中已有了直流工作电压,当L0不发光时,表示电路中没有直流电压除非L0本身损坏或电路存在故障。S3是电源开关,R2是L0的限流保护电阻。开关S3接通后,直流电压V经S3和R2加到L0的正极上,L0的负极直接接地,这样给L0加正向偏置电压,有电流流过L0,所以L0发光指示,表明电路中有正常的直流电压V。S3断开时,由于V不能加到L0上,所以没有电流流过L0,L0不能发光,这表明电路中没有直流电压V。V变大或变小时,流过L0的电流大小也作相应的变化。当V变大时,流过L0的电流在增大,所以L0发出的光更强;当V变小时,流过L0的电流变小,所以L0发出的光比较弱。VCTXDL01KR2电源模块N3456S蓝白自锁开关GPHEADR图8电源电路这一电源指示灯电路不仅能够指示是否有电源电压,还能指示电源电压的大小情况,对于采用电池供电的机器这一指示功能更实用,当L0发光强度不足时说明电池的电压已经不足。电路中的R2是L0的限流保护电阻,以防止由于V太大而损坏L0。它的保护原理是当V增大时,流过L0的电流在增大。由于L0和R2串联,这样流过R2的电流也在增大,在R2上的电压增大,加到L0上的电压增大量有所减小,不会使L0的工作电流太大,达到保护保护L0的目的。38一位共阴数码管LED数码管以发光二极管作为发光单元,颜色有单红,黄,蓝,绿,白,七彩效果。单色,分段全彩管可用大楼、道路、河堤轮廓亮化,LED数码管可均匀排布形成大面积显示区域,可显示图案及文字,并可播放不同格式的视频文件。我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。所谓的七段就是指数码管里有七个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极数码管就是将各个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将各个LED的阳极连在一起。其原理图如图9所示。图9数码管原理图其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5V电源。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即A,B,C,D,E,F,G,DP)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,则那个数码管便会被点亮。数码管的七段,对应一个字节的7位,A对应最低位,DP对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0X3F;共阳数码管的字符编码为11000000,即0XC0。可以看出两类数码管各字形对应的编码的各位正好相反。表1共阴数码管字符编码表设本计中我们用到的是一位七段式共阴数码管,以下我们给出该类型数码管显示各数字对应的字符编码表(如表1)。对照这张字符编码表编程,我们便能将对应的C语言程序导入单片机,从而实现在数码管以字形“1,2,3”循环显示歌曲次序。表格中列举出的字形“08”只是为设计做一个参考,在设计中并未使用。四、软件设计总体原理播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。41软件设计程序流程图流程图如图10所示图10程序流程图按下电源开关键后,整体电路开始运作,电源指示灯发光。此时,按下连接于P37端口的开关按键开始选曲,每按一下单片机将依序更换歌曲并在数码管上显示歌曲次序。歌曲次序将在数码管上以文字“1,2,3”的形式循环呈现。当开始按下连接于P32的开关按键后,单片机将依序播放歌曲,再次按下该开关按键后歌曲播放将暂停。当第三次按下该开关按键后,单片机将播放第二首歌曲。从总体上说,即是第奇数次按下开关将播放歌曲,第偶数次按下开关将暂停播放。开关按键的开合影响着单片机内部软件程序INT0的变化,而对应的INT0的数值控制着歌曲的播放、暂停以及选曲功能。42软件头文件定义以及字符类型定义1头文件定义INCLUDEINCLUDE2字符类型定义DEFINEUCHARUNSIGNEDCHARDEFINEUNITUNSIGNEDINT43音频、音调程序设计1要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。2利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。3以下是相应的节拍与节拍码的对照表。表2节拍与节拍码对照表4各调1/4节拍的时间设定表3时间设定5音乐符的标准延时设定CHARCODEHI_LIST0,226,229,232,233,236,238,240,241,242,244,245,246,247,248CHARCODELO_LIST0,4,13,10,20,3,8,6,2,23,5,26,1,4,36设置三段音乐的音符,任意编写,最后一位必须为1UCHARCODESONG501,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,1,3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,1,3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,17设置三段音乐的节拍,任意编写UCHARCODELEN501,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,144按键与蜂鸣器接口端程序设计在C语言里,如果直接写P10,C编译器并不能识别,而且P10也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0。可是C编译器并不会认为P1_0就是P10,所以必须给它们建立联系,这里使用了KEIL的关键字SBIT来定义,SBIT的用法有三种第一种方法SBIT位变量名地址值第二种方法SBIT位变量名SFR名称变量位地址值第三种方法SBIT位变量名SFR地址值变量位地址值本次程序设计使用的是SBIT的是第二种用法SBITK1P10/播放和停止键SBITSPKP27/蜂鸣器45外部中断程序设计中断是处理器处理外部突发事件的一个重要技术。它能使处理器在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行处理器原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。外部中断一般是指由计算机外设发出的中断请求,如键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求。内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。51单片机的有5大中断源串行口中断、定时中断1、外部中断1、定时中断0和外部中断0。对应的中断源的编号分别为串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0。同时各类中断源有优先级之分,按以上顺序排列,串行口中断最低、外部中断0最高。另外必须注意的是,使用外部中断0和1,必须分清楚TCON寄存器设置其触发方式是低电平触发还是下降沿触发。本设计使用的中断源是外部中断0。其对应的中断程序是VOIDEX0_INTINTERRUPT0TR00/播放结束或者播放中途切换歌曲时停止播放SONG_INDEXSONG_INDEX13/跳到下一首的开头TONE_INDEX0P0DSY_CODESONG_INDEX/数码管显示当前音乐段号46定时程序设计单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情接受的是外部脉冲,而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件MCS51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒。8051系列单片机有两个定时器T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器8052系列单片机增加了第三个定时器/计数器T2它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合。8051单片机的两个定时器T0和T1分别都由两个特殊功能寄存器组成T0由特殊功能寄存器TH0和TL0构成,而T1则是由TH1和TL1构成。作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数所以,定时器的分辨率是时钟振荡频率的1/12。作为计数器使用时,通过引脚T0P34或T1P35对外部脉冲信号进行计数,当输入的外部脉冲信号发生从1到0的负跳变时,计数器的值就自动加1计数器的最高频率一般是时钟振荡频率的1/24。由此可知,不论是定时器还是计数器工作方式,定时器T0和T1均不占用CPU的时间,除非定时器/计数器T0和T1溢出,才可能引起CPU中断,转而去执行中断处理程序所以说,定时器/计数器是单片机中效率高而工作灵活的部件。本设计使用的计数器是T0,其对应的定时中断程序如下VOIDT0_INTINTERRUPT1TL0LO_LISTSONGSONG_INDEXTONE_INDEXTH0HI_LISTSONGSONG_INDEXTONE_INDEX/选择音乐曲目SPKSPK47延时程序编写单片机显示电路一般分为静态显示和动态显示两类。80C51的静态显示电路一般由P0接一个8位锁存器和一个显示块,而动态显示电路动态显示电路一般是利用CPU控制电路来控制显示块的导通和截止。而由于单片机的运行速率非常快,为了使用者能更好的观察显示电路中信号的变化,一般需要在程序中加入延时函数,以适宜地改变信号变化的频率。延时函数在程序中有两个作用一是为了某些时序逻辑器件的时序要求,二是为了单纯的等待。时序是描述对象之间发送消息的时间顺序显示多个对象之间的动态协作,这样就需要等待,等待就可以通过延时子程序实现。也可能是为了单纯的等待。本次设计中的延时函数是为了时序的需要,一个音符的节拍需要用延时函数来实现。我们需要能够清晰地在数码管上观察歌曲次序的变化,因此我们必须在程序编写中写入延时程序。具体程序如下VOIDDELAYMSUNITMSUCHARTWHILEMSFORT0T/头文件定义INCLUDE/头文件定义DEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINT

温馨提示

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

评论

0/150

提交评论