当前位置:文档之家› 音乐盒单片机课程设计

音乐盒单片机课程设计

目录一、引言 (1)二、设计任务 (1)三、方案论证 (1)四.音频发声知识 (2)1、基本知识 (2)2、节拍 (3)3、编码 (4)五、音乐盒单路原理分析 (5)1、硬件原理 (5)2、软件程序设计 (8)3、程序调试 (9)六、结论与心得 (9)七、参考文献 (10)八、附录 (10)1、程序 (10)2、PCB板图 (23)一、引言本文是应用MCS-51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用汇编语言进行程序设计。

通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的音乐,再利用延迟来控制发音时间的长短。

把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。

这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。

对单片机和音乐爱好者有一定的借鉴价值。

二、设计任务设计题目:单片机音乐播放器设计要求:1、完成89S51的外围复位、时钟和电源等外围电路的设计,完成扬声器驱动设计。

2、根据各音阶频率算出定时器定时常数,根据节拍给出该音阶持续的时间。

3、完成音乐播放软件并完成乐谱表的翻译,最好能编写一个播放子程序用于播放。

4、播放音乐片段。

三、方案论证设计方案:设计中我们考虑了两种设计方案,两种设计方案中主要去区别在于硬件电路的不同,对于本设计通过模拟电路和单片机设计均可以实现,最后根据设计要求、可行性和设计成本的考虑选择了单片机设计的方案。

现在一一介绍论证如下:采用单片机来设计电路。

此电路包括时钟电路、复位电路、音乐驱动电路和MCS-51单片机。

各部分功能如下:(1)时钟电路:由石英晶体振荡器产生单片机工作时所必须的时钟信号。

振荡器采用12M的晶振,使之机器周期Tcy=1us,方便发音程序的计算和编译。

(2)复位单路:由复位按键使单片机的CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。

(3)音乐驱动电路:由于单片机最大灌入电流为3.2mA,所以选用PNP管,并要在PNP的基极和发射极加限流电阻。

(4)显示电路:使用单片机P0端口做显示电路,要在P0口加上拉电阻(5~10k Ω)。

还要加限流电阻,保护单片机。

(5)按键电路:有外部中断输入和定时/计数器的外部输入都是低电平有效,可以和复位电路相视,只要将复位电路中的电容去掉即可。

四.音频发声知识1、基本知识1.要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲.2. 利用8051的内部定时器使用其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法.3. 例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz).计数脉冲值与频率的关系公式如下:N=Fi÷2÷Fr N: 计算值;Fi: 内部计时一次为1us, 故其频率为1MHz;4. 其计数值的求法如下:T=65536-N=65536-Fi÷2÷Fr例如: 设K=65536, F=1000000=Fi=1MHz, 求低音DO(261Hz).中音DO (523Hz). 高音的DO (1046Hz)的计算值.T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580高音DO的T=65536-500000/1047=650595. C调各音符频率与计数值T的对照表如表1所示.表1 C 调各音符频率与计数值T的对照表2、节拍1相关知识每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表2为节拍与节拍码的对照.如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间.假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推.所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表3为1/4和1/8节拍的时间设定.表2 节拍与节拍码对照3、编码建立音乐的步骤:1. 先把乐谱的音符找出,然后由表63建立T值表的顺序.2. 把T值勤表建立在TABLE1,构成发音符的计数值放在"TABLE".3. 简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的"TABLE"处.表4 简谱对应的简谱码.T值. 节拍数五、音乐盒单路原理分析1、硬件原理原理分析:(1)原理图说明:当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。

同时启动定时器T1,显示歌曲号。

①. 硬件电路中用0INT(外部中断0、1输入端P3.2 P3.3)分别接S1、INT、1S2作为上、下一曲的功能键。

硬件电路中用T1(外部定时/计数器输入端P3.5)分别接S3作为暂停的功能键。

②. 用P0.0-P0.7控制七段码a,b,c,d,e,f,g,Dp。

③. 用P2.3口控制喇叭。

④. 电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。

(2)元件介绍①.AT89S51元件介绍AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

②.AT89S51引脚的排列、名称、功能和用法AT89S51采用标准双列直插式引脚DIP-40大规模集成电路封装。

它的引引脚排列如下图所示:AT89S51的引脚排列引脚介绍:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

2、软件程序设计图2 程序总框图图4 主程序3、程序调试程序调试中出现的问题及解决的办法:(1)有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。

(2)程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。

当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。

(3)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

(4)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

(5)编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。

六、结论与心得此次设计过程中,我们查了一些相关资料,使得我们更深层的了解了单片机芯片的工作原理以及软件、硬件如何联系起来实现我们的要求。

经过我们共同努力之下,不仅完成本次设计的具体相关要求,也熟练掌握了AT89C51芯片的具体功能和注意事项。

此外,设计中所涉及到的元器件还有:三极管、电阻、瓷片电容等,我们通过查了相关元器件的作用及其工作原理,并对其进行验算,从而进一步地减少实验误差。

在我们的不懈努力下加上老师的些许指导,最终还是发现了问题的原因,我们从而查找相关资料和不断地试验最终实现了乐曲的播放。

在整个设计过程中,我们不仅能将书本上学到的关于单片机相关的知识于实践相结合,而且还培养了团队合作精神以及提高了自学能力。

这将对我们今后的实践提供了有很大的基础。

它更加让我们意识到:理论和实践相结合的重要性。

虽然电路看上比较简单,但实际行动起来将会遇到许多挫折以及其它一些客观的因素。

因此,设计过程中要保持一种持之以恒、严谨的设计作风思想,这样才会在遇到问题时能够发现和解决问题。

设计已经结束,但它留给我们的不单是作品,更是一堂生动的课程。

它教会我们只有不断努力、不断吸取经验和教训和团结合作才会取得最终的成功!我相信经过此次设计,我们今后会取得更大的成功的!七、参考文献[1] 许珉.单片机原理及应用[M].北京:中国电力出版社,2007.08[2] 三恒星科技.MCS-51单片机原理与应用实例[M]. 北京:电子工业出版社,2008.01八、附录1、程序OUT BIT P2.3 ;定义音频输出端口,p2.3N EQU 9 ;歌曲总数OUT_NUM EQU P0 ;数码管显视当前所放歌曲曲数ORG 0000HAJMP MAINORG 0003HAJMP LAST_SONG ;外部中断0用于接上一曲歌按键ORG 000BHAJMP F_T0 ;定时器0用于定时,作音符发生器用ORG 0013Hq4: AJMP NEXT_SONG ;外部中断1接下一曲歌按键ORG 001BHAJMP START_PAUSE ;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffH,方式2ORG 0030HMAIN: MOV SP,#60HMOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。

MOV R0,#30H ;R0中存入数据30H,这里在以30H开始的单元存放每首歌曲的入口地址,其中30H,31H存放;歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。

MOV R5,#00H ;R5中存放表TABLE中正在执行操作的序号MOV R6,#1 ;R6存放正在设置入口信息的歌曲数SET_TAB: MOV A,R5 ;设置每首歌曲的入口信息,存放在以30H开始的存储单元中。

MOVC A,@A+DPTRMOV @R0,AINC R5INC R0MOV A,R5MOVC A,@A+DPTRMOV @R0,AINC R5INC R0MOV A,R5MOVC A,@A+DPTRMOV @R0,AINC R0INC R5MOV A,R5MOVC A,@A+DPTRMOV @R0,AINC R0INC R5INC R6 ;设置完一首歌曲后,歌曲数加一CJNE R6,#N+1,SET_TAB ;是否设置完,没有便继续,否则进行下面的操作;*********************************** 对中断,计数器的相关参数进行设置MOV TMOD, #61H ;计数器0工作方式1,计数器1工作方式2MOV TH1,#0FFH ;给计数器1置初值0FFH,又由于是工作方式2,所以MOV TL1,#0FFH ;计数器计数为1,相当于一外部中断。

相关主题