单片机音乐播放器设计.doc
目 录摘 要4前 言5第1章 设计综述61.1 单片机产生音调的基本原理61.2 开发环境简介71.3 设计内容与目标8第2章 音乐播放器的功能与组成92.1 音乐播放器的功能92.2 音乐播放器的组成10第3章 系统总体设计与关键技术113.1 系统总体设计113.1.1 音乐播放器的工作原理113.1.2 音阶对应频率计数初值的计算123.1.3 乐曲节拍的计算133.1.4 乐谱在程序中的编制143.2 系统中应用的关键技术14第4章 音乐播放器的硬件设计164.1 单片机最小系统164.1.1 单片机复位电路164.1.2 单片机晶振电路174.2键盘接口电路的设计184.3 LED显示接口电路的设计194.4 扬声器控制电路的设计214.5 硬件原理图21第5章 音乐播放器的软件设计225.1 主控软件的设计与流程图225.2 定时中断服务子程序的设计与流程图245.3 键盘控制模块的设计与流程图265.4 演奏乐曲模块的设计与流程图32第6章、系统的实现与调试356.1 硬件系统的焊接与调试356.2 软件调试366.2.1 测试LED显示模块376.2.2 测试键盘控制模块396.2.3 测试P3.0口输出406.3 调试中遇到的问题及解决41第7章 结 论43致 谢47参 考 文 献48摘 要随着科技的不断发展,目前市场上出现了许许多多的音乐播放器,人们对播放器的需求也越来越广泛,对其要求也越来越高。本文分析了基于单片机的音乐播放器的工作原理,详细介绍了音乐播放器的功能及其硬件设计和软件设计的方法,给出了基于MCS-51单片机的音乐播放器的具体实现方案并重点讲述了其硬件实现与软件编写,实现了单片机音乐播放器对音乐的演奏。关键词 : 音乐播放器、MCS-51单片机、LE 前 言几千年来,各种乐器的发声无一不是依靠琴弦、簧片、哨片引起管柱振动而作为声源的。随着现代电子工业技术的飞速发展,一种用新的声源来制造音响的新型乐器脱颖而出,这就是目前人们熟知的电子音乐播放器1。目前市场上的音乐播放器形形色色,例如大家所熟悉的MP3,随着电子技术的不断发展,音乐播放器的发展也会进一步发展。目前单片机的应用渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了2。 本课题即是在这种背景下,对基于MCS51单片机的音乐播放器的设计与实现进行了硬件及软件的设计,并给出了一套完整的解决方案,实现了单片机音乐播放器对音乐的演奏。第1章 设计综述1.1 单片机产生音调的基本原理音乐播放器是利用单片机产生乐曲音符,再把乐曲音符翻译成计算机音乐语言,用单片机进行信息处理,再通过蜂鸣器或喇叭放出音乐。音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制蜂鸣器发音。要想产生音频脉冲信号,需要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用单片机定时器计时这个半个周期时间,每当计时到后就将输出脉冲的I/O口反相,然后重复计时此半周期时间再对I/O口反相,这样就能在此I/O口上得到此频率的脉冲。通常,利用单片机的内部定时器0,工作在方式1下,改变计数初值TH0和TL0来产生不同频率。对于音乐的节拍,每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍。如果1拍为0.4S,1/4拍为0.1S,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,那么1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY,其余的节拍就是它的倍数。总而言之,一首乐曲是由音阶和节拍两大要素构成。一首乐曲演奏的原理是:不同音阶分别对应不同的频率,发出不同的音调,而节拍则控制发出音调时间的长短;若将乐曲的音调连续发出,并使其按相应的节拍变化,即可演奏一首乐曲。根据这一特点,我们采用单片机辅以相应的接口来设计音乐播放器3。1.2 开发环境简介随着单片机的不断发展,以C为主流的单片机高级语言也不断被更多的单片机爱好者和工程师所喜爱。使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C 语言的程序设计,它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能4。本系统采用的开发环境为KEIL uVISION2,软件开发环境主界面见图1-1。图1-1 KEIL uVISION2集成开发环境主界面1.3 设计内容与目标本设计以AT89C51单片机为核心。通过对其定时器的设定来实现音乐的播放,通过对键盘的设置可以实现人机对话,借助键盘可以向计算机系统输入程序,置数、送操作命令、控制程序的执行走向等,并最终通过LED显示器显示出播放的乐曲。重点研究内容有:·单片机最小系统的设计与实现·键盘电路的设计与控制·扬声器控制电路的设计与实现·LED显示器的驱动及显示·定时初值的计算·软件模块的设计与编写第2章 音乐播放器的功能与组成2.1 音乐播放器的功能基于单片机的定时和控制装置在许多行业中有着广泛的应用,而音乐播放器是其应用之一。在基于单片机的音乐播放器电路中,除了基本的单片机系统和外围电路外,还需要外部的控制和显示装置。在本设计中,输入装置是按键开关,由于控制音乐播放器的运行模式,显示装置是LED七段数码管5。此次设计的音乐播放器要求具有以下功能:·音乐播放器按照从头到尾的顺序自动播放预先设定的14共4首乐曲,全部乐曲播放完毕则停止。·音乐播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。·选定某一乐曲,随即输入选定乐曲的序列号(14),即按下14数字键之一,音乐播放器对选定的某一乐曲开始循环播放。·选定某一乐曲,随即输入选定乐曲的序列号(14),即按下14数字键之一,音乐播放器就从选定的某一乐曲开始播放,按照顺序自动播放到最后一首乐曲,乐曲播放完毕则停止。·当用户按下暂停键时,音乐播放器打断正在播放的某一乐曲,用户再次按下暂停键时,该乐曲继续播放。·当用户按下复位键时,音乐播放器终止正在播放的某一乐曲。2.2 音乐播放器的组成根据系统音乐播放器的功能要求,一个完整的音乐播放器电路相当于一个简单的单片机系统,该系统由按键开关、单片机、LED显示电路、扬声器控制电路4个方面构成。·51单片机。51单片机为整个系统的核心部分,是带动整个系统工作的重要部件。·键盘输入。键盘输入用来控制输入指令,发出指令至单片机,使单片机按照指令工作。·扬声器。扬声器作为输出部分按照键盘给单片机的指令发出乐曲。·LED显示电路。LED显示器也作为输出部分,按照键盘给单片机的指令,显示正在演奏的乐曲。音乐播放器的系统组成框图如图2-1所示:CPUAT89C51键盘输入扬声器 LED显示电路图2-1 音乐播放器的系统组成框图第3章 系统总体设计与关键技术3.1 系统总体设计根据系统的功能与组成,进行系统分析,系统除CPU核心部分外还需要与键盘连接以接收输入指令,连接LED显示器将要演奏的乐曲序号显示出来,通过连接扬声器使其发出音乐。3.1.1 音乐播放器的工作原理音乐播放器可利用单片机的定时器构成电子振荡器来发声。振荡器是电子乐曲播放器的声源,专门用来制造音响,也称信号发生器,其作用相当于常规乐器的琴弦、簧片、哨片。振荡器在音乐播放器的应用中有两个特点,可产生声音的频率与不同波形的振荡。通过对单片机的定时器设置不同的定时初值,可发出音乐的不同音阶,通过调整振荡波形与泛音的分布,可产生和变换各种音色。在我们所设计的音乐播放器中,是通过单片机的定时器,产生不同频率的方波信号,而没有调整振荡波形,因此音乐播放器发出的声音,是矩形波产生的音响,纯粹的矩形波声音类似于单簧管的音色。一首乐曲演奏的原理是:一首乐曲是由音阶和节拍两大要素构成,不同音阶分别对应不同的频率,发出不同的音调,而节拍则控制发出音调时间的长短;若将乐曲的音调连续发出,并使其按相应的节拍变化,即可演奏一首乐曲。根据这一特点,我们采用单片机辅以相应的接口来设计音乐播放器。3.1.2 音阶对应频率计数初值的计算单片机的振荡频率为fosc12MHz ,通过定时器T0溢出后对P3.0口取反产生方波,故定时器溢出时间为1/2f 。由: , 则定时初值为:以音阶“1”为例:f523 Hz,则T1/f 定时初值:用同一方法可求出其它音阶所对应的频率定时初值,将其制表放在程序中,通过查表向定时器T0装入所要求的定时初值,即可产生某一音阶所对应的频率的方波信号。C调的音阶及其频率、在单片机中的定时初值对应如下:音 名 C D E F G A B简谱音阶 1 2 3 4 5 6 7频率/ Hz 262 294 330 349 392 440 494定时初值 63628 63835 64021 64103 64260 64400 64524表中序号 1 2 3 4 5 6 7音 名 C D E F G A B简谱音阶 1 2 3 4 5 6 7频率/ Hz 523 587 659 698 784 880 988定时初值(Hex) 64580 64684 64777 64820 64898 64968 65030 表中序号 8 9 10 11 12 13 14音 名 C D E F G A B简谱音阶 1 2 3 4 5 6 7频率/ Hz 1046 1175 1318 1397 1568 1760 1967定时初值(Hex) 65058 65110 65157 65178 65217 65252 65283表中序号 15 16 17 18 19 20 213.1.3 乐曲节拍的计算取乐曲节拍的长度为0.4s ,即1拍0.4s ,由定时器T1控制延时。设置定时器T1的定时中断T50ms ,采用定时方式1。由: ,则定时初值X3C0BH因此1拍0.4s8*50ms,即通过定时器T1的定时中断8次,产生8*50ms的定时,就可以满足1节拍的定时要求。以此类推,通过定时中断N次,可产生N*50ms的定时以满足1/4拍、1/2拍、1拍、2拍等不同节拍的定时要求。由此可知,节拍值只能是整数值。不同节拍在单片机中的中断次数(音长)对应如下:节 拍 1/8 1/4 1/2 3/4 1 3/2 2 3 4时间长度 0.05s 0.1s 0.2s 0.3s 0.4s 0.6s 0.8s 1.2s 1.6s音长(Dec) 1 2 4 6 8 12 16 24 32音长(Hex) 01H 02H 04H 06H 08H 0CH 10H 18H 20H3.1.4 乐谱在程序中的编制将乐谱转换为代码,应包含乐曲的总长度、音阶、音长(节拍)等信息。具体设计如下:(1) 将音阶代码组成一个字节,节拍代码组成一个字节,按照:音阶代码,节拍代码,音阶代码,节拍代码 的顺序,将一个乐谱转换为一定长度的代码数据表。(2) 在程序执行时顺序查此表,取出音阶代码,并根据音阶代码查频率表,以得到该音阶对应的频率,随后将对应的定时初值送定时器T0,使定时器T0产生该音阶对应的频率,并通过P3.0口输出,驱动外接扬声器发声。(3) 取出节拍代码N,由定时器T1控制延时,通过定时中断N次,产生N*50ms的定时。T0、T1启动后,根据乐谱表,某一个音阶发出相应频率的声音,并持续相应的节拍,连续起来,我们就可以听到一个完整乐曲的演奏。3.2 系统中应用的关键技术基于单片机的音乐播放器在设计时需要解决以下4个方面的问题:· 有关单片机中定时器的使用。· 利用键盘控制实现对单片机的控制。· LED显示模块的驱动和编制,扬声器控制电路,用于发出不同频率的音调。第4章 音乐播放器的硬件设计一个完整的音乐播放器电路相当于一个简单的单片机系统,该系统由按键开关、单片机、晶振和复位电路、LED显示电路、扬声器控制电路5个方面构成。其中,除了单片机是集成的IC芯片,而其他4个部分则需根据应用要求而设计。4.1 单片机最小系统单片机芯片,配以必要的外部器件就能构成单片机最小系统。单片机具有较强的外部扩展、通信能力,能方便地扩展至应用系统所要求的规模。当使用带ROM或EPROM的MCS51系列单片机时,只要一个芯片即可构成一个单片机的最小系统。选用80C51或8051或AT89C51单片机作为主机,它们都具有4K片内ROM,128字节片内RAM,片外ROM寻址范围达64K,片外RAM寻址范围达64K,2个16位计数器,5个中断源,4个并行口,1个串行口。简易自动乐曲播放器采用单片机最小系统足以满足系统设计要求,同时要设计单片机最小系统的晶振和复位电路。4.1.1 单片机复位电路复位是单片机的初始化操作,其作用是使CPU中的各个部件都处于一个确定的初始状态,并从这个状态开始工作。当8051的ALE及 两脚输出高电平,RST引脚高电平时,单片机复位。8051单片机的复位电路有上电复位和手动按钮复位两种形式,RST/VPD端的高电平直接由上电瞬间产生高电平则为上电复位;若通过按钮产生高电平复位信号称为手动按钮复位。图4-1为兼有上电复位与按钮复位的电路。图中,上电瞬间RST端的电位与Vcc相同,随着电容充电电流的减小,+5V立即加到了RST/VPD端,该高电平使8051复位。若运行过程中,需要程序从头开始执行,这只需按图4-1中的按钮即可。按下按钮则直接把+5V加到了RST/VPD端从而复位,这称为手动复位。在实际应用系统中,有些外围芯片也需要复位,如果这些复位端的复位电平要求与单片机的要求一致,则可以与之相连。4.1.2 单片机晶振电路晶振是给单片机提供工作信号脉冲的,这个脉冲就是单片机的工作速度。比如 12M晶振,单片机工作速度就是每秒 12M。当然,单片机的工作频率是有范围的,不能太大,一般 24M就不上去了,不然不稳定 。图4-2为晶振电路。 图4-2晶振电路4.2键盘接口电路的设计单片机应用系统中的人机对话通道是用户为了对应用系统进行干预以及了解应用系统运行状态所设置的通道。主要有键盘、显示器等通道接口。在单片机应用系统中,为了控制系统的工作状态以及向系统中输入数据,应用系统设置键盘,用于系统复位,功能转换以及数字输入。键盘的设置可以实现人机对话,借助键盘可以向计算机系统输入程序、置数、送操作命令、控制程序的执行走向等。在本次设计中键盘由P1口输入, 按键设置:14四个数字键,AF六个功能键。数字键(14): 用于输入14共4首乐曲的序列号。功能键(AF): A键:乐曲从14按顺序播放B键:乐曲从14循环播放C键:循环播放某一乐曲D键:从某一乐曲开始播放至最后一首乐曲E键:暂停/播放F键:停止播放各功能键(AF)的意义与操作:A键:乐曲从14按顺序播放。当用户按下A键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动播放预先设定的14共4首乐曲,全部乐曲播放完毕则停止。 B键:乐曲从14循环播放。当用户按下B键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。C键:循环播放某一乐曲当用户按下C键后,并选定某一乐曲,随即输入选定乐曲的序列号(14),即按下14数字键之一,简易自动乐曲播放器对选定的某一乐曲循环播放。D键:从某一乐曲开始播放至最后一首乐曲当用户按下D键后,并选定某一乐曲,随即输入选定乐曲的序列号(14),即按下14数字键之一,简易自动乐曲播放器就从选定的某一乐曲开始播放,直到乐曲播放完毕则停止。E键:暂停/播放。当用户按下E键时,简易自动乐曲播放器打断正在播放的某一乐曲,用户再次按下E键时,该乐曲继续播放。F键:停止播放。当用户按下F键时,简易自动乐曲播放器终止正在播放的某一乐曲。本设计中按键作为输入部分,由P1口输入。4.3 LED显示接口电路的设计在单片机应用系统中,使用的显示器主要有LED显示器(发光二极管显示器)。这种显示器成本低廉,配置灵活,与单片机接口方便。在本系统的设计中采用LED显示器。LED显示器由8位LED数码管组成,用于显示系统在各种不同条件下的状态。用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态显示,按译码方式分为硬件译码和软件译码。静态显示是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后不再控制LED,直到下次显示时再传送一次新的显示数据。静态显示的数据稳定,占用CPU时间少。动态显示要CPU时刻对显示器件进行数据刷新,显示数据会有闪烁,占用的CPU时间多。 这两种显示方式各有利弊:静态显示虽然数据显示稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;动态显示虽然闪烁,占用的CPU时间多,但使用的硬件少,能节省线路板空间。在本设计中由于显示部分比较简单,所以选用了静态显示方式,LED显示器由74LS37来驱动,为了扩展外部存储器需一块74LS373(地址锁存器) 。LED发光器件一般常用的有两类:数码管和点阵。常用的数码管一般为8字型数码管,分为A、B、C、D、E、F、G、DP八段,其中DP为小数点。数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚为一个数码管的公共端,两根之间相连通。数码管从电路上来看可分为共阴和共阳两种,在本设计中用了共阳的LED。4.4 扬声器控制电路的设计扬声器控制电路用于发出不同频率的音调,是在P3.0口加一反相器再连接到喇叭这样就可够成。4.5 硬件原理图通过以上分析,本次设计的音乐播放器的电路原理图如图4-4所示。图4-4音乐播放器的原理图第5章 音乐播放器的软件设计软件设计的重点在于定时中断的设计、键盘控制、显示的实现、乐曲的演奏等方面。5.1 主控软件的设计与流程图主模块是系统软件的框架。本系统的主模块的程序框图可用图5-1来表示。主控模块用于控制系统的工作。该模块先初始化,接着接受到复位信号后读取键盘信号,再调用各键子程序。图5-1 主控模块的流程图主控程序主要源程序代码如下:START: MOV SP, #60HMOV TMOD, #11HMOV IE, #8AH MOV IP, #08H ;T1中断优先于T0中断MOV TH1, #3CHMOV TL1, #0BH;以上为系统初始化,T=50msW1:MOV P2, #10001110B ;等待提示"F"LCALLGETKEYCJNE A, #0FFH, W1 MOV A, BCJNE A, #0AH, W2LCALL KEY_A ;输入键是'A',转KEY_ASJMPW1W2:CJNEA, #0BH, W3LCALL KEY_B ;输入键是'B',转KEY_BW3:CJNEA, #0CH, W4LCALL KEY_C ;输入键是'C',转KEY_CW4:CJNEA, #0DH, W5LCALL KEY_DSJMPW1 ;输入键是'D',转KEY_D5.2 定时中断服务子程序的设计与流程图定时器T0 用于产生不同频率的音阶,如图5-2为定时器T0的中断服务子程序。而定时器T1控制延时来实现不同的节拍,定时时间设定为50ms,图5-3为定时器T1的中断服务子程序。 图5-2 定时器T0的中断服务流程图图5-3 定时器T1中断服务流程图其程序如下所示INT_T0: CLR TR0 ;定时器0中断子程序 MOV TL0, 20H MOV TH0, 21H CPL P3.0 SETBTR0 RETI INT_T1: CLR TR1 ;定时器1中断子程序CLR TR0LCALLKEY_EMOV TH1, #3CH MOV TL1, #0BHDJNZ 60H, OUT MOV 60H, #20OUT:SETBTR1RETI5.3 键盘控制模块的设计与流程图键盘控制模块分为6个功能键和读4个数字键。下面分别介绍各个键的流程图和程序:· F键子模块 F键是用于实现系统复位图5-4 F键流程图· E键子模块E键用于实现对乐曲的暂停和播放图5-5 E键子程序流程按下E键的主要源程序代码如下KEY_E: JBP3.1, L2; 中断键盘检测LCALLDELAY2; 消除抖动JB P3.1, L2; 如果是高电平就跳到L2JNB P3.1, $; 如果仍然是低电平就执行中断程序MOVP2, #10000110B; 让LED显示EL3:JBP3.1, $; 检测低电平,直到低电平时才跳出该指令LCALLDELAY2JBP3.1, L3JNB P3.1, $; 如果再来一个高电平才跳出中断MOVP2,R5L2:SETB TR0RET· A键子模块当用户按下A键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动播放预先设定的14共4首乐曲,全部乐曲播放完毕则停止。图5-6 A键子程序流程图A键主要源程序代码如下:KEY_A: LCALLMUSIC1 ; 乐曲我和你LCALLMUSIC2 ; 乐曲万水千山总是情LCALLMUSIC3 ; 乐曲送别LCALLMUSIC4 ; 乐曲北京欢迎您RET· B键子模块当用户按下B键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。图5-7 B键子程序流程图B键主要源程序代码如下:KEY_B: 键子程序(从14循环播放)T11:LCALLKEY_ASJMPT11RET· D键子模块当用户按下D键后,并选定某一乐曲,随即输入选定乐曲的序列号(14),即按下14数字键之一,简易自动乐曲播放器就从选定的某一乐曲开始播放。图5-8 D键子程序流程图D键源程序代码如下:KEY_D: D键子程序(从某一乐曲开始播放,播放完后停止)T2:LCALLGETWORDCJNEA, #0FFH, T2MOVA, BCJNEA, #00H, B1SJMPC0B1:CJNEA, #01H, B2SJMPC1B2:CJNEA, #02H, C3SJMPC2C3:LCALLMUSIC4 ;乐曲北京欢迎您RET读数字键读取正在播放乐曲的序号,读取键盘后消去键盘抖动接着显示和保存数据。 图5-9 GETWORD子程序(读数字键0)流程图读数字键主要源程序代码如下:GETWORD: ;读音乐序号子程序S1:JBP1.4, S2 ;读1键LCALLDELAY2JBP1.4, S1JNBP1.4, $MOVP2, #11111001B ;显示1MOVR5, #11111001BMOVA, #0FFHMOVB, #00HRET5.4 演奏乐曲模块的设计与流程图 (1) 将音阶代码组成一个字节,节拍代码组成一个字节,按照:音阶代码,节拍代码,音阶代码,节拍代码 的顺序,将一个乐谱转换为一定长度的代码数据表。(2) 在程序执行时顺序查此表,取出音阶代码,并根据音阶代码查频率表,以得到该音阶对应的频率,随后将对应的定时初值送定时器T0,使定时器T0产生该音阶对应的频率,并通过P3.0口输出,驱动外接扬声器发声。(3) 取出节拍代码N,由定时器T1控制延时,通过定时中断N次,产生N*50ms的定时。演奏乐曲的流程图如图5-10所示。 图5-10 演奏乐曲的流程图演奏乐曲主要源程序代码如下:MUSIC:MOV R3,#00H;音乐解码器NEXT20: MOV A, R3 MOV DPH, 52HMOV DPL, 53H MOVCA, A+DPTR MOV R2, A JZ STOP ANL A, #0FH MOV R1, A MOV A, R2 SWAP A ANL A, #0FH JNZ SING CLR TR0 JMP W11具体的在这里任选一首乐曲(我和你)说明乐曲的播放。演奏一首乐曲的流程图如图5-11所示。 图5-11 一首乐曲的流程图乐曲我和你主要源程序如下:MUSIC1: 第一首我和你MOV P2, #11111001B;显示1MOV R5, #11111001BMOV 52H, #HIGH TABLE10 MOV 53H, #LOW TABLE10LCALL MUSICRET第6章、系统的实现与调试系统焊接与调试分为硬件的焊接调试与软件的调试。硬件的焊接与调试侧重于原理设计的正确性验证和焊接工艺;软件的调试则侧重于子模块的功能验证和模块与模块的接口配合。下面结合本设计实例加以讨论。6.1 硬件系统的焊接与调试硬件焊接前首先要仔细核对硬件系统设计原理的正确性,包括参数选用的正确性与原理的正确性。确认正确后在通用实验板直接焊接实际电路来进行实物调试和验证。调试分为断电调试和上电调试。第一步:断电调试为安全起见,首先必须进行断电调试。断电调试的内容至少包括短路检测和原理正确性确认。(1)短路检测系统电路焊接完成后,必须进行短路检测。检测方法很简单,选用合适的万用表欧姆挡(例如,20K挡或200K挡),用红黑表笔接电路板的+5V电源的+、-极,如果存在充放电现象(即电阻指示从大到小再到大或从小到大),最后电阻稳定在一个适当的位置(一般为几千欧姆),则基本可排除系统短路现象。如果无充放电现象或电阻值稳定在很小的位置(例如几欧姆),则说明系统中可能存在短路故障,不能通电试验,必须对系统进行彻底排查,直至解决。(2)原理正确性确认关于这个问题,不同的电路有不同的工作原理,因此,必须针对具体电路进行具体分析。这里按照图4-4,检查各个器件的引脚是否连接正确。第二步:通电调试 1) 系统时钟是否起振凡是微处理器系统,正常运行的必要条件是系统时钟稳定正常。在实际工作中,因为各种原因导致系统时钟不正常而出现系统无法正常运行的情况也时有出现,因此系统时钟是否起振应是通电检查的首要一环。检查方法如下:(1)逻辑笔法。利用逻辑笔看时钟引脚18、19,应出现脉冲跳变现象(即高低电平和脉冲指示灯同时闪亮),否则,说明时钟没有起振。(2)数字万用表法。用数值万用表的直流电压挡(20V),分别测量18、19脚的电压,其中读数应在2.5V左右。(3)示波器法。波形应为6MHz的脉冲方波。2)复位电路是否正常复位不正常也会导致系统不工作,例如,9脚(复位脚)如果始终为高,则系统始终处于复位状态;如果始终为低电平(不能产生复位所需的高电平脉冲),则系统也可能无法正常工作.检查的重点是相关电路是否正确。6.2 软件调试结构化软件的调试一般可以将重点放在分模块调试上,通调是最后一环。软件调试可以采取离线调试和在线调试两种方式。前者不需要硬件仿真器,借助于软件仿真器即可;后者一般需要仿真系统的支持。在本次设计中利用的是KEIL C51软件仿真器,其评估版本可以免费获取,只是有2KB代码限制。基于MCS51的音乐播放器的设计与实现的调试,主要集中在对扬声器的输出音乐部分的调试以及键盘控制和LED显示部分的调试上。在编写完整的音乐播放器程序前,可以先按照如下的顺序分别调试各个功能模块的程序。 6.2.1 测试LED显示模块(1)调试目的使用P2口作为输出口实现LED的显示,从而检测P2口及LED显示模块是否正常工作。(2)调试程序 MAIN: MOV TMOD, #10H ;定时器T1工作在方式1 MOV TH1, #3CH MOV TL1, #0B0H ; T=50msSTART: MOV R1,#00H ;计数显示初始化 MOBDISP: MOV A,R1 MOVC A,A+DPTR ;查表得显示的码 MOV P2,A ;数码管显示0 ACALL DELAY1S ;延时1S INC R1 ;计数值加1 CJNE R1,#10,DISP ;秒值不到10,继续显示;否则清0 MOV R1,#00H ;计数值清0 SJMP DISPTAB: DB 0C0H,0F9H,0A4H ;0,1,2 DB 0B0H,99H,92H ;3,4,5 DB 82H,0F8H,80H ;6,7,8 DB 90H ;9DELAY1S: ;延时子程序 MOV R3,#14H ;置50MS计数循环初值 SETBTR1 ;启动T1LP1: JBC TF1,LP2 ;查询计数溢出 SJMP LP1 ;未到50MS继续计数LP2: MOV TH1,#3CH ;重新置定时器初值 MOV TL1,#0B0H DJNZ R3,LP1 ;未到1S继续循环RET ;返回主程序(3)调试结果 LED数码管从0到9自动循环显示,表明硬件与软件正确。6.2.2 测试键盘控制模块(1)调试目的通过键盘的控制可使LED数码管显示相应的内容。(2)调试程序GETKEY: ;读A键盘子程序 SA:JBP1.0, SB ;读ALCALLDELAY2JBP1.0, SAJNB P1.0, $MOVP2, #10001000B;显示AMOVR5, #10001000BMOVA, #0FFHMOVB, #0AHRET(3)调试结果键盘按下后LED显示相应的内容,表明软硬件正确。6.2.3 测试P3.0口输出(1)调试目的使用P3.0口做输出口使扬声器工作(2)调试程序START:MOV SP, #60HMOV TMOD, #11HMOV IE, #8AH MOV IP, #08H ;T1中断优先于T0中断MOVTH1, #3CHMOVTL1, #0B0H;以上为系统初始化,T=50msHERE:SJMP HEREINT_