1、课程名称: 微机原理课程设计 题 目: 基于51单片机音乐盒设计 摘要伴随人类社会发展,大家对视觉、听觉方面享受提出了越来越高要求。小小音乐盒能够给大家带来美好回想,提升大家精神文化享受。传统音乐盒多是机械型,体积粗笨,发音单调,不能实现批量生产。本设计是一个基于STC89C52RC系列单片机音乐盒,依据单片机技术原理,经过硬件电路制作和软件编译,设计制作出一个多功效多功效音乐盒。该音乐盒关键由按键电路、复位电路、时钟电路和蜂鸣器组成。使用两个按键控制音乐盒,一个按键用来控制歌曲播放、暂停和换曲,另一个用来控制数码管上歌曲次序改变,本音乐盒共有三首歌曲。播放歌曲时,对应歌曲对应对应数码管上歌曲
2、次序显示。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试。随即依据仿真布局在Altium Designer软件中绘制PCB单面板,检验无误后制成实物单面覆铜板。关键字:STC89C52RC KEIL PROTEUS PCB目录一、设计任务和要求- 4 -1.1 设计任务- 4 -1.2 设计要求- 4 -1.3 发挥部分- 4 -二、方案总体设计- 5 -2.1 方案列举- 5 -2.2 方案论证- 5 -2.3 总体设计原理- 5 -三、硬件设计- 6 -3.1 STC89C52RC芯片- 6 -3.2 晶振电路- 7 -3.3 开关按键
3、电路- 8 -3.4 P0口上拉电阻- 8 -3.5 复位电路- 9 -3.6 蜂鸣器电路- 10 -3.7 电源电路- 11 -3.8 一位共阴数码管- 12 -四、软件设计- 14 -4.1 软件设计程序步骤图- 14 -4.2 软件头文件定义和字符类型定义- 15 -4.3 音频、音调程序设计- 15 -4.4 按键和蜂鸣器接口端程序设计- 16 -4.5 外部中止程序设计- 16 -4.6 定时程序设计- 17 -4.7 延时程序编写- 18 -4.8 主程序编写- 18 -五、系统仿真和调试- 20 -5.1 仿真平台- 20 -5.2 仿真调试- 20 -5.3 测试总结- 21
4、-六、PCB单面板制作- 22 -6.1 绘制平台- 22 -6.2 原理图绘制- 22 -6.3 PCB单面板绘制- 22 -七、设计总结和心得体会- 24 -7.1 设计总结- 24 -7.2 心得体会- 24 -八、参考文件- 25 -附录一:源程序- 26 -一、设计任务和要求1.1 设计任务制作一个简易音乐盒,要求利用若干开关按键控制音乐播放并利用一位数码管显示相关消息。1.2 设计要求完成该模块硬件和软件设计,在Proteus软件上仿真经过后,用Altium_Designer软件进行PCB单面板绘制,修改合理后制成单面覆铜板。随立即程序下载到单片机进行硬件验证。最终就课程设计本身提
5、交一篇课程设计说明文档。1.3 发挥部分分别利用两个开关按键控制音乐播放暂停和换曲操作,同时利用一位共阴数码管显示相关歌曲曲目标改变。二、方案总体设计2.1 方案列举方案一:用四个按键控制音乐播放。3个按键选择3首不一样音乐播放,另一个按键控制音乐停止。按下播放键,简单控制以后,才开始播放音乐。比如,用定时器控制,亮灯倒计时10秒然后触发音乐播放。方案二:用两个按键控制音乐播放。一个按键(S1)控制音乐播放、暂停和换曲,另一个按键(S2)控制数码管上曲目标更换。按下播放键S1,单片机开始播放音乐,再次按下该键,音乐播放暂停第三次按下该键,歌曲默认更换到下一首。每次按下选曲按键S2,单片机暂停目
6、前歌曲播放,并依次在数码管上显示曲目标更换。2.2 方案论证在方案1中,共用了4个按键,其中3个按键控制播放3首音乐,另一个键控制音乐播放停止。不过只能选择3首音乐,不能显示是哪首歌不足太强。所以我们选择方案二更为适宜、妥当。2.3 总体设计原理此次设计是一个基于STC89C52RC系列单片机音乐盒,依据单片机技术原理,经过硬件电路制作和软件编译,设计制作出一个多功效多功效音乐盒。该音乐盒关键由按键电路、复位电路、时钟电路、蜂鸣器和显示电路组成。使用一个按键来控制开始,播放和暂停、换曲。利用一个按键来显示数码管上曲目标更换并暂停目前曲目标更换,共三首音乐,蜂鸣器每播放一首歌时数码管上显示相对应
7、歌曲次序。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试。随即依据仿真布局在Altium Designer软件中绘制PCB单面板,检验无误后制成实物单面覆铜板。三、硬件设计3.1 STC89C52RC芯片STC89C52RC单片机是宏晶科技推出新一代高速/低功耗/超强抗干扰单片机,指令代码完全兼容传统8051片机。其引脚图图1所表示。图1 STC89C52RC芯片引脚图STC89C52RC关键特征以下: 增强型8051单片机,指令代码完全兼容传统8051; 工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V单片机); 工作频率
8、范围:040MHz,相当于一般8051080MHz,实际工作频率可达48MHz; 用户应用程序空间为8K字节; 片上集成512字节RAM; 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻; ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可经过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片; 含有EEPROM功效; 含有看门狗功效; 共有2个16位定时器/计数器;即定时器T0、T1; 外部中止2路,下降沿中止或低电平触
9、发电路,PowerDown模式可由外部中止低电平触发中止方法唤醒; 通用异步串行口(UART),还可用定时器软件实现多个UART; 工作温度范围:-40+85(工业级)/075(商业级); PDIP封装。 P3口含有第二功效:P3.0/RXD(串行输入口),P3.1TXD(串行输出口),P3.2/INT0(外部中止0),P3.3/INT1(外部中止1),P3.4T0(记时器0外部输入),P3.5T1(记时器1外部输入,P3.6/WR(外部数据存放器写选通),P3.7/RD(外部数据存放器读选通)。本设计中用到32位通用I/O口中P0、P2和P3部分端口,RST电路复位和外部中止等关键功效,其中
10、P3.2口和P3.7口经过开关按键组成控制电路,2.7口接蜂鸣器组成输出电路,PO端经过上拉电阻钳位、限流作用接一位共阴极数码管组成数字显示。3.2 晶振电路晶体振荡器,简称晶振,它能够等效成一个电容和一个电阻并联再串联一个电容二端网络。晶振有一个关键参数,那就是负载电容值,选择和负载电容值相等并联电容,就能够得到晶振标称谐振频率。图2 晶振电路晶振在应用具体起到作用,微控制器时钟源能够分为两类:一个是皮尔斯振荡器配置,适适用于晶振和陶瓷谐振槽路。另一个为简单分立RC振荡器。基于晶振和陶瓷谐振槽路振荡器通常能提供很高初始精度和较低温度系数。RC振荡器能够快速开启,成本也比较低,但通常在整个温度
11、和工作电源电压范围内精度较差,会在标称输出频率5%至50%范围内改变,震荡脉冲频fosc在0至24MHZ范围内改变。但其性能受环境条件和电路元件选择影响。需认真对待振荡器电路元件选择和线路板布局。本设计中晶振振荡电路(图2)是在一个反相放大器(注意是放大器不是反相器)两端接入晶振,再有两个电容分别接到晶振两端,每个电容另一端再接到地,这两个电容串联容量值就应该等于电路负载电容。同时,晶振能够等效为一个电感,所以只要晶振两端并联上适宜电容它晶振等效为一个电感,所以只要晶振两端并联上适宜电容它就会组成并联谐振电路。其中端点1接STC89C52RC芯片19引脚,端点2接芯片18引脚。这个并联谐振电路
12、加到一个负反馈电路中就能够组成正弦波振荡电路,因为晶振等效为电感频率范围很窄所以即使其它元件参数改变很大这个振荡器频率也不会有很大改变。本试验中使用是22PF电容,假如再考虑元件引脚等效输入电容,则两个22PF电容组成晶振振荡电路就是比很好选择,但本设计简易,所以对于等效输入电容带来误差不予讨论。3.3 开关按键电路利用1位按键开关连接P3.2控制数码管7个输入口,经过改变按键开关进行3个数字显示和改变;利用另1位按键开关连接P3.7控制外部中止,经过改变按键开关进行歌曲播放、暂停。在试验室中有条件话还利用数字电路试验箱,在合适时钟频率下,控制位信号输入,从而实现数码管各段显示,在数码管上显示
13、数字。使用C语言描述上述控制过程,并将程序下载至控制芯片中,实现可编程器件控制过程。图3 开关按键电路最先思绪包含:经过三个按键控制数码管显示。在过程中发觉三个按键控制需要分时操作,比较麻烦而且难于实现。于是采取简单设计方案,采取一个按键控制数字,经过改变不一样脉冲信号输入来改变不一样数字显示。其电路图图3所表示。3.4 P0口上拉电阻通常作单键触发使用时,假如IC本身没有内接上拉电阻,为了使单键维持在不被触发状态或是触发后回到原状态,必需在IC外部另接一电阻。数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场所不期望出现高阻状态,能够经过上拉电阻或下拉电阻排阻消除高阻状态。上拉电阻实
14、物图图4所表示。图4 上拉电阻实物图I/O端口输出类似于一个三极管集电极,当集电极经过一个电阻和电源连接在一起时候,该电阻成为上拉电阻。简而言之,上拉电阻就是将不确定信号经过一个电阻钳位在高电平,电阻同时起限流作用。对于非集电极(或漏极)开路输出型电路(如一般门电路)提升电流和电压能力是有限,上拉电阻功效关键是为集电极开路输出型电路提供输出电流通道。上拉电阻就是将电源经过电阻接到输出端。假如输出端是OC(集电极开路,TTL)或OD(漏极开路,CMOS)输出,不接上拉电阻则输出端无驱动能力。对于P1、P2、P3口内部就和有上拉电阻,假如其端口电流较大,电平就会降低(电阻大,对应压降也太大),就能
15、够经过外接上拉电阻(就是并一个电阻在IC内部上拉电阻上,这时总电阻减小,总电流增大)提供电流分量,将电平“拉高”。此次设计中使用上拉电阻为九引脚排阻(图5所表示)。顾名思义,排阻就是若干个参数完全相同电阻,它们一个引脚全部连到一起,作为公共引脚,其它引脚正常引出。所以假如一个排阻是由n个电阻组成,那么它就有n+1只引脚,通常来说,最左边那个是公共引脚,它在排阻上通常见一个色点标出来。因为排阻引脚众多,所以排阻比若干只固定电阻更为方便。此次设计中排阻依次连接单片机P0口各引脚(上拉电阻VCC端接单片机VCC端)。图5 上拉电阻3.5 复位电路单片机在开启时全部需要进行复位,以使CPU及系统各部件
16、处于确定初始状态,并从初态开始工作。89系列单片机复位信号是从RST引脚输入到芯片内施密特触发器中。当系统处于正常工作状态时,且振荡器稳定后,假如RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就能够响应并将系统复位。单片机系统复位方法有:手动按钮复位和上电复位。1) 上电复位上电复位即是在RST复位输入引脚上接一电容至VCC端,下接一个电阻到地即可。对于CMOS型单片机,因为在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1uF。上电复位工作过程是在加电时,复位电路经过电容加给RST端一个短暂高电平信号,此高电平信号伴随VCC对电容充电过程而逐步回
17、落,即RST端高电平连续时间取决于电容充电时间。为了确保系统能够可靠地复位,RST端高电平信号必需维持足够长时间。上电时,VCC上升时间约为10ms,而振荡器起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在右图复位电路中,当VCC掉电时,肯定会使RST端电压快速下降到0V以下,不过,因为内部电路限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。假如系统在上电时得不到有效复位,则程序计数器PC将得不到一个适宜初值,所以,CPU可能会从一个未被定义位置开始实施程序。图6
18、复位电路2) 手动按钮复位手动按钮复位需要人为在复位输入端RST上加入高电平。通常采取措施是在RST端和正电源VCC之间接一个按钮。当人为按下按钮时,则VCC+5V电平就会直接加到RST端。本设计采取即是手动复位,其电路图图6所表示。因为人动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位时间要求。该电路中将10uf电容和开关并联是为了在开关断开时降低开关断开两个触点之间形成电弧,开关闭合时,则没有消除电火花作用。因为开关所接电路中,常常全部属于感性负载,感性负载在断电时因为电流不能突变,所以会在断开两个触点之间形成电弧,这个电弧首先对触点造成损坏作用(轻易拉成毛刺),首先影响电路断
19、开时间,加上电容后,因为电容两端电压不能突变,使触点两端电压也不能突变,所以就没有火花形成,起到保护触点作用和立即断开电路作用。接地端连接10k电阻则是为了保护复位电路不会因为电流过大而烧毁同时也能为复位电阻提供部分电压能力。3.6 蜂鸣器电路蜂鸣器是一个一体化结构电子讯响器,广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件,关键分为电磁式蜂鸣器和压电式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生音频信号电流经过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁相互作用下,周期性地振动发声。图7 蜂鸣器电路此次设计
20、使用到是第一个电磁式蜂鸣器。电流经过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声,所以需要一定电流才能驱动它,单片机I/O引脚输出电流较小,单片机输出TTL电平基础上驱动不了蜂鸣器,所以在单片机P2.7引脚和蜂鸣器之间串联一个电阻和NPN型三极管9012。其电路原理图7所表示,蜂鸣器负极接到接地端,三极管Q1集电极接到VCC(5V)电源上面、发射机接到蜂鸣器正极,三极管基级经过限流电阻R3后由单片机引脚控制,当P2.7输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当P2.7输出低电平时,三极管导通,这么蜂鸣器电流形成回路,发出声音。所以,我们能够经过程序控制P2.7脚电平来使蜂
21、鸣器发出声音和关闭。程序中改变单片机P2.7引脚输出波形频率,就能够调整控制蜂鸣器音调,产生多种不一样音色、音调声音。另外,改变P2.7输出电平高低电平占空比,则能够控制蜂鸣器声音大小,这些我们全部能够经过编程试验来验证。3.7 电源电路现代电子电器中大量采取发光二极管作为电源指示灯,本设计使用即是发光二极管电源指示灯电路。采取发光二极管作为指示器件含有很多优点,如发光醒目、耗电小、指示颜色可变等。图8所表示,电路中L0是发光二极管,当它发光时表示电路中已经有了直流工作电压,当L0不发光时,表示电路中没有直流电压(除非L0本身损坏或电路存在故障)。S3是电源开关,R2是L0限流保护电阻。开关S
22、3接通后,直流电压+V经S3和R2加到L0正极上,L0负极直接接地,这么给L0加正向偏置电压,有电流流过L0,所以L0发光指示,表明电路中有正常直流电压+V。S3断开时,因为+V不能加到L0上,所以没有电流流过L0,L0不能发光,这表明电路中没有直流电压+V。+V变大或变小时,流过L0电流大小也作对应改变。当+V变大时,流过L0电流在增大,所以L0发出光更强;当+V变小时,流过L0电流变小,所以L0发出光比较弱。图8 电源电路这一电源指示灯电路不仅能够指示是否有电源电压,还能指示电源电压大小情况,对于采取电池供电机器这一指示功效更实用,当L0发光强度不足时说明电池电压已经不足。电路中R2是L0
23、限流保护电阻,以预防因为+V太大而损坏L0。它保护原理是:当+V增大时,流过L0电流在增大。因为L0和R2串联,这么流过R2电流也在增大,在R2上电压增大,加到L0上电压增大量有所减小,不会使L0工作电流太大,达成保护保护L0目标。3.8 一位共阴数码管LED数码管以发光二极管作为发光单元,颜色有单红,黄,蓝,绿,白,七彩效果。单色,分段全彩管可用大楼、道路、河堤轮廓亮化,LED数码管可均匀排布形成大面积显示区域,可显示图案及文字,并可播放不一样格式视频文件。我们最常见是七段式和八段式LED数码管,八段比七段多了一个小数点,其它基础相同。所谓七段就是指数码管里有七个小LED发光二极管,经过控制
24、不一样LED亮灭来显示出不一样字形。数码管又分为共阴极和共阳极两种类型,其实共阴极数码管就是将各个LED阴极连在一起,让其接地,这么给任何一个LED另一端高电平,它便能点亮。而共阳极就是将各个LED阳极连在一起。其原理图图9所表示。图9 数码管原理图其中引脚图两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5V电源。一个八段数码管称为一位,多个数码管并列在一起可组成多位数码管,它们段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自公共端称为位选线。显示时,全部从段选线送入字符编码,而选中哪个位选线,则那个数码管便会被点亮。数码管七段,对应一个字节7位,a对应最
25、低位,dp对应最高位。所以假如想让数码管显示数字0,那么共阴数码管字符编码为00111111,即0x3f;共阳数码管字符编码为11000000,即0xc0。能够看出两类数码管各字形对应编码各位恰好相反。表1 共阴数码管字符编码表设本计中我们用到是一位七段式共阴数码管,以下我们给出该类型数码管显示各数字对应字符编码表(如表1)。对照这张字符编码表编程,我们便能将对应C语言程序导入单片机,从而实现在数码管以字形“1,2,3”循环显示歌曲次序。表格中列举出字形“0-8”只是为设计做一个参考,在设计中并未使用。四、软件设计总体原理:播放一段音乐需要是两个元素,一个是音调,另一个是音符。首先要了解对应音
26、调,音调关键由声音频率决定,同时也和声音强度相关。对一定强度纯音,音调随频率升降而升降;对一定频率纯音、低频纯音音调随声强增加而下降,高频纯音音调却随强度增加而上升。另外,音符频率有所不一样。基于上面内容,这么就对发音原理有了部分初步了解。音符发音关键靠不一样音频脉冲。利用单片机内部定时器/计数器0,使其工作在模式1,定时中止,然后控制P3引脚输出音乐。只要算出某一音频周期(1/频率),然后将此周期除以2,即为半周期时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲I/O反相,然后反复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率脉冲。4.1 软件设计程序步骤图步骤图图1
27、0所表示:图10 程序步骤图按下电源开关键后,整体电路开始运作,电源指示灯发光。此时,按下连接于P3.7端口开关按键开始选曲,每按一下单片机将依序更换歌曲并在数码管上显示歌曲次序。歌曲次序将在数码管上以文字“1,2,3”形式循环展现。当开始按下连接于P3.2开关按键后,单片机将依序播放歌曲,再次按下该开关按键后歌曲播放将暂停。当第三次按下该开关按键后,单片机将播放第二首歌曲。从总体上说,即是第奇数次按下开关将播放歌曲,第偶数次按下开关将暂停播放。开关按键开合影响着单片机内部软件程序INT0改变,而对应INT0数值控制着歌曲播放、暂停和选曲功效。4.2 软件头文件定义和字符类型定义1. 头文件定
28、义:#include#include2.字符类型定义:#define uchar unsigned char#define unit unsigned int4.3 音频、音调程序设计1) 要产生音频脉冲,只要算出某一音频周期(1/频率),然后将此周期除以2,即为半周期时间。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲I/O反相,然后反复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率脉冲。2) 利用8051内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不一样频率方法。3) 以下是对应节拍和节拍码对照表。表2 节拍和节拍码对照表4) 各调1/4节
29、拍时间设定:表3 时间设定5) 音乐符标准延时设定:char code HI_LIST=0,226,229,232,233,236,238,240,241,242,244,245,246,247,248;char code LO_LIST=0,4,13,10,20,3,8,6,2,23,5,26,1,4,3;6) 设置三段音乐音符,任意编写,最终一位必需为-1:uchar code Song50= 1,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,
30、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,-1 ;7) 设置三段音乐节拍,任意编写:uchar code Len50= 1,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,-1;4.4 按键和蜂鸣器
31、接口端程序设计在C语言里,假如直接写P1.0,C编译器并不能识别,而且P1.0也不是一个正当C语言变量名,所以得给它另起一个名字,这里起名为P1_0。可是C编译器并不会认为P1_0就是P1.0,所以必需给它们建立联络,这里使用了KEIL关键字sbit来定义,sbit使用方法有三种:第一个方法:sbit位变量名=地址值第二种方法:sbit位变量名=SFR名称变量位地址值第三种方法:sbit 位变量名=SFR地址值变量位地址值此次程序设计使用是sbit是第二种使用方法:sbit K1=P10; / 播放和停止键sbit SPK=P27; / 蜂鸣器4.5 外部中止程序设计中止是处理器处理外部突发事
32、件一个关键技术。它能使处理器在运行过程中对外部事件发出中止请求立即地进行处理,处理完成后又立即返回断点,继续进行处理器原来工作。引发中止原因或说发出中止请求起源叫做中止源。依据中止源不一样,能够把中止分为硬件中止和软件中止两大类,而硬件中止又能够分为外部中止和内部中止两类。外部中止通常是指由计算机外设发出中止请求,如:键盘中止、打印机中止、定时器中止等。外部中止是能够屏蔽中止,也就是说,利用中止控制器能够屏蔽这些外部设备中止请求。内部中止是指因硬件犯错(如忽然掉电、奇偶校验错等)或运算犯错(除数为零、运算 溢出、单步中止等)所引发中止。内部中止是不可屏蔽中止。51单片机有5大中止源:串行口中止
33、、定时中止1、外部中止1、定时中止0和外部中止0。对应中止源编号分别为:串行口中止为4、定时中止1为3、外部中止1为2、定时中止0为1、外部中止0为0。同时各类中止源有优先级之分,按以上次序排列,串行口中止最低、外部中止0最高。另外必需注意是,使用外部中止0和1,必需分清楚TCON寄存器设置其触发方法是低电平触发还是下降沿触发。本设计使用中止源是外部中止0。其对应中止程序是: void EX0_INT() interrupt 0 TR0=0; /播放结束或播放中途切换歌曲时停止播放 Song_Index=(Song_Index+1)%3; /跳到下一首开头 Tone_Index=0; P0=D
34、SY_CODESong_Index; /数码管显示目前音乐段号4.6 定时程序设计单片机中定时器和计数器其实是同一个物理电子元件,只不过计数器统计是单片机外部发生事情(接收是外部脉冲),而定时器则是由单片机本身提供一个很稳定计数器,这个稳定计数器就是单片机上连接晶振部件;MCS-51单片机晶振经过12分频以后提供给单片机只有1MHZ稳定脉冲;晶振频率是很正确,所以单片机计数脉冲之间时间间隔也是很正确,这个正确时间间隔是1微秒。8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器全部是16位定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们全部
35、有定时或事件计数功效,常见于时间控制、延时、对外部时间计数和检测等场所。8051单片机两个定时器T0和T1分别全部由两个特殊功效寄存器组成;T0由特殊功效寄存器TH0和TL0组成,而T1则是由TH1和TL1组成。作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后脉冲个数,即:每个机器周期使定时器T0/T1寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数;所以,定时器分辨率是时钟振荡频率1/12。作为计数器使用时,经过引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数,当输入外部脉冲信号发生从1到0负跳变时,计数器值就自动加1;计数器最高频率通常是时钟振荡频
36、率1/24。由此可知,不管是定时器还是计数器工作方法,定时器T0和T1均不占用CPU时间,除非定时器/计数器T0和T1溢出,才可能引发CPU中止,转而去实施中止处理程序;所以说,定时器/计数器是单片机中效率高而工作灵活部件。本设计使用计数器是T0,其对应定时中止程序以下:void T0_INT() interrupt 1 TL0=LO_LISTSongSong_IndexTone_Index; TH0=HI_LISTSongSong_IndexTone_Index; /选择音乐曲目 SPK=SPK;4.7 延时程序编写单片机显示电路通常分为静态显示和动态显示两类。80C51静态显示电路通常由P
37、0接一个8位锁存器和一个显示块,而动态显示电路动态显示电路通常是利用CPU控制电路来控制显示块导通和截止。而因为单片机运行速率很快,为了使用者能愈加好观察显示电路中信号改变,通常需要在程序中加入延时函数,以适宜地改变信号改变频率。延时函数在程序中有两个作用:一是为了一些时序逻辑器件时序要求,二是为了单纯等候。时序是描述对象之间发送消息时间次序显示多个对象之间动态协作,这么就需要等候,等候就能够经过延时子程序实现。也可能是为了单纯等候。此次设计中延时函数是为了时序需要,一个音符节拍需要用延时函数来实现。我们需要能够清楚地在数码管上观察歌曲次序改变,所以我们必需在程序编写中写入延时程序。具体程序以
38、下:void Delay MS(unit ms) uchar t; while(ms-) for(t=0;t120;t+);4.8 主程序编写主程序也是经过中止来实现,首先设置T0工作方法0,设置外部中止0请求方法,然后等候按键开始。当按下播放键K1=0,使TR0=1,从第0个音符开始播放,播放中间调用延时函数。当音乐播放完最终一个音符时TR0=0,音乐停止,在播放过程中能够按下K1提前停止。主程序设计以下:void main() SPK=0; TMOD=0x00; /T0方法0 IE=0x83; IT0=1; /外部中止0请求方法控制位 IP=0x02; while(1) while(K1=
39、1); /未按键等候 while(K1=0); /等候释放 TR0=1; /开始播放 Tone_Index=0; /从第0 个音符开始/播放过程中按下 K1可提前停止播放(K1=0)。/若切换音乐段会触发外部中止,造成TR0=0 ,播放也会停止 while(SongSong_IndexTone_Index!=-1&K1=1&TR0=1) Delay MS(300*LenSong_IndexTone_Index); /播放延时(节拍) Tone_Index+; /目前音乐段下一音符索引 TR0=0; /停止播放 while(K1=0); /若提前停止播放,按键未释放时等候 ;五、系统仿真和调试5
40、.1 仿真平台仿真平台为Proteus软件。Proteus软件是世界上著名EDA工具,能完成原理图布图、代码调试到单片机和外围电路协同仿真,一键切换到PCB设计它不仅含有其它EDA工具软件仿真功效,还能仿真单片机及外围器件,是现在最好仿真单片机及外围器件工具。5.2 仿真调试必需注意是,每次按下选曲键全部将使目前歌曲暂停播放!开始仿真后,音乐播放器处于暂停状态。图11所表示:图11 仿真图1第一步操作,按下播放键S1和选曲键S2,数码管显示字符“一”并默认播放第一首曲目。其仿真图以下:图12 仿真图2第二步操作,按下S1曲目播放暂停,数码管显示字符不变。再次按下播放键S1和选曲键S2。其仿真图
41、以下:图13 仿真图3第三步操作,按下S1曲目播放暂停,数码管显示字符不变。再次按下播放键S1和选曲键S2。其仿真图以下:图14 仿真图4仿真图刚刚做好开始调试时候各类器件连接一切正常,不过仿真结果中数码管显示正常但蜂鸣器却没有声响,以后经过更换器件类型,最终发觉是蜂鸣器选择发生了错误。将有源蜂鸣器改为无源蜂鸣器后,仿真声音最终正常。仿真完以后便是仿真程序编写,说实话程序编写一直是自己软肋。在数次尝试自我编写程序失败以后,我选择了使用baidu文库中类似现有程序,并依据实际情况对其进行了合适修改和整理。程序中中止程序和音符、音调部分我分析了很久,在明白其原理以后在程序编写中对其进行了适宜注释。
42、在完成程序编写以后便将其HEX文件导入仿真中,进行仿真调试。5.3 测试总结音乐播放器很好实现了播放、暂停和换曲功效,并满足了数码管显示特殊要求。当然设计音乐播放器也存在着不足之处。调试中碰到问题:1)数码管显示乱码。原因分析:C语言程序中对应字符对应代码出现错误。处理方案:依据一位共阴数码管引脚图从新编写正确字符代码。2)音乐盒播放音乐音律不齐而且音色很差。原因分析:对音调和节拍编写过于随意,不成规章。处理方法:对照正确音调和音符编写规律歌曲。六、PCB单面板制作6.1 绘制平台Altium_Designer软件是原Protel软件开发商Altium企业推出一体化电子产品开发系统,关键运行在
43、Windows-XP操作系统。这套软件经过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术完美融合,为设计者提供了全新设计处理方案,使设计者能够轻松进行设计,熟练使用这一软件必将使电路设计质量和效率大大提升。6.2 原理图绘制绘制步骤以下:(1) 观察原理图绘制工作界面,熟悉“菜单栏”、“工具栏”、“文件浏览区”、“工作区”等界面;(2) 常见工具条及操作快捷方法设置;(3) 依据实际需求添加原理图元件库;(4) 从元件库查找并选择元件;(5) 摆放元件,调整元件布局并调整删除多出元件;(6) 连接电路,预防发生重合、交叉等情况;(7) 修改元件属性和封
44、装;(8) 设置元件命名元件参数或标称值;(9) 电路检验及创建网络表。图15为此次设计绘制PCB板原理图。图15 PCB板原理图6.3 PCB单面板绘制在完成PCB原理图制作后,我们首优异行工作是对PCB元件进行合理布局。其大致步骤以下:(1) 设置PCB规则(必需首先完成此工作),进行单面板布线并合理修改布线宽度;(2) 依据实际要求,设置单面板外形和尺寸、边框;(3) 自动布局(元件自动摆放,不过成功率不高);(4) 依据布局基础规则合理修改元器件摆放,尽可能按电路图中各元件相对位置放置,电路图中相邻元件,在摆放时尽可能靠近;(5) 手动调整元件布局需遵守以下规则:a、元件摆放横平竖直,
45、b、需要调整或需要散热器件必需留出较大空隙或放在电路板边缘,c、输入输出端口放在板子边缘部分。完成对元器件合理摆放以后,我们接下来要做工作便是PCB布线。其大致步骤以下:(1) 开启自动布线,系统自动生成连线;(2) 修改(拖动、翻转)不理想布局,修改不理想布线(多出或连接复杂),加粗必需连线,调整修改警告信息(相邻太进或出现交叉等情况);(3) 添加标注文字(包含汉字),修改文字高度和粗细,降低飞线数量。在完成对PCB单面板布局和布线以后,PCB单面板绘制任务基础结束。图16为此次设计PCB单面板图样。图16 PCB单面板七、设计总结和心得体会7.1 设计总结经过以上步骤对实物音乐盒设计、调
46、试。任务要求基础达成。不仅有原来播放音乐要求,还扩展为三首音乐,含有按键选曲,按键暂停播放,数码管显示目前播放乐曲段位等附加功效。预期功效基础达成。7.2 心得体会看着十多页汇报文档,握着自己焊出单片机板子,涌现出一份莫名喜悦,感觉自己十余天辛劳终究没有白费。这过程中即使碰到很多理论知识上不解和实际操作迷惑,不过在老师和学长、同学帮助下,加上自己悉心学习,问题全部被顺利处理。首先,在试验室这十多天学习中,我最深刻体会就是再精妙理论知识也必需应用到实际操作中才能发挥最大作用。理论知识即使能让我们取得高分,不过实际动手能力却对我们更为关键。记得来试验室第一天早晨,老师便让我们每个人全部进行焊接练习,以加强我们焊接技术。在以后音乐盒实际焊接中,对此我也是深有体会。自己花了一天时间焊出音乐盒,在晚上进行调试时却出现LED不亮、数码管没有显示和蜂鸣器没有声音等问题。经过两个小时检测以后,才发觉是自己实际焊接过程中出现了一次虚焊错误。即使这只是个小问题,不过却花费了我两个小时来检测。由此可见,实际操作中一点点小问题也会造成很严重结果,耗时费力。我必需对其引发重视,在每次实际操作中认真仔细,一点一滴地增强我们实际动手能力。其次,我认为我们必需对试验室中每份工作全部应该保持认真、严谨态度,尽可能避免犯错、走弯路。作为初学者,当我们碰到迷惑、问题时,我们首先应该选择自我处理问