3.3 音乐的产生
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,,则半周期为1912/2=956μs,因此只要令计数器计时956μs,每计数956次时将I/O反相,就可得到中音DO(523Hz)则初始值为65535-956 = 64579 = 0xFC43。
计数脉冲值与频率的关系式(如式3-1所示)是:
N=fi÷2÷fr (3-1) 式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下: T=65536-N=65536-fi÷2÷fr
例如:设K=65536,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/1046=65059
7
第4章 KEIL仿真软件的应用
硬件与软件的设计一般都要分别借助一些软件,如我们通常用作电路设计与制版的Protel,MCS-51程序开发工具KEIL等。
Keil C51 uVision2集成开发环境是基于80C51内核的软件开发平台,支持工程建立、程序的编译与链接、软件仿真、硬件仿真、目标代码的生成等功能。Keil C51编译器在产生代码的准确性和效率方面达到了较高的水平。
与大多数集成开发环境类似,Keil C51集成开发环境也是用工程的方法来管理文件,在一个工程文件中源程序(C51程序、汇编程序)、头文件等都可以进行统一管理。
安装运行KEIL51,使用KEIL的开发工具进行项目开发过程,与其他软件开发项目的过程基本上相同:
创建C 语言或汇编语言的源程序。 编译或汇编源文件。 纠正源文件中的错误。
从编译器和汇编器连接目标文件。 测试连接的应用程序。
8
第5章 调试与故障分析
5.1 软件程序调试
本次设计的软件部分由音乐播放程序组成。
关于音乐播放程序的调试,我首先采用Preteus软件来仿真,但是该仿真软件中没有喇叭或蜂鸣器等声音播放工具。于是本人将图3-4中的单片机的P1.0处接了一个示波器,想通过这样来仿真并调试音乐播放程序,但是效果不是很理想。程序运行的时候,能看见示波器有不同频率的波形交替出现,但是频率变换得很快,无法确认是否显示的是所需要的频率,并且无法辨别音频变换的节奏是否正确。此方法并不适用。
接着,我制作了一个简单的单片机播放器电路。即在实验板上焊接实验电路,电路由单片机89C51、按钮外围电路组成,并在单片机的P1.0处用三极管连接一个简单的音频放大器,再外接一个蜂鸣器。将程序写入单片机中,这样就能听出声音和音乐节奏是否正确。
5.2 硬件电路调试
本次设计的硬件电路主要由单片机89C51组成,在调试电路的过程中也碰到了一些问题。
问题一:单片机无法正常下载程序。 调试步骤:
(1)检查单片机和串口电路是否连接错。 (2)检查焊接电路是否有虚焊和漏焊。 问题二:下载音频程序后无法播放音乐。 调试步骤:
检查电源是否正常接入电路中。
利用示波器测试单片机输出端是否有信号输出,发现信号输出正常,说明单片机正常工作。
利用示波器测试音频放大电路输出端是否有信号输出,发现信号输出正常,说明音频放大电路工作正常,同时说明是蜂鸣器部分出现了问题。
故障原因:焊接时将发声器件烧坏了,导致发不出声音。 解决方案:重新换一个无源蜂鸣器,即可正常播放音乐。
9
总 结
经过这次创新设计,我觉得自己学到了不少东西。归纳起来,主要有以下几点:
(1)通过这次创新设计,我能将以前四年所学到的专业知识与实践相联系,将所学到的知识充分运用到本次设计中。同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。
(2)进一步熟悉了单片机的知识。通过本次设计,我对单片机的基本原理、内部结构、各引脚功能、定时器和中断的应用都有了更深刻的理解。并且,能够以单片机为基础元件设计一个简单的系统。
(3)通过本次设计,熟悉了设计一个项目所必经的几个阶段。本次设计从理论研究到硬件原理图设计,从元器件的选择到PCB板的制作,从软件编程到最后的调试过程都由我独立完成。这不仅锻炼了我独立完成设计工作的能力,更重要的是了解了一个电子产品的设计流程,为将来投入工作增加了宝贵的经验,奠定了坚实的基础。
(4)提高了自己查找资料的能力。在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得不断学习的重要性。
10
相关推荐: