基于单片机STC89C52的数字音乐盒设计
一、引言
1.1设计的目的
通过课程设计,让学生熟悉单片机微机应用系统开发、研制的过程,软硬件设计的工作方法、工作内容、工作步骤。对学生进行基本技能训练,例如:组成系统、编程、调试、查阅资料、焊接电路板等。使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。
1.2 设计的基本要求
(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏不同的乐曲(至少3首歌曲);
(2)采用七段数码管显示当前播放的歌曲序号;
(3)可通过功能键选择乐曲,暂停,播放,上一首,下一首;
扩展功能:利用一个循环跟每一个音调同步,每改变一个音调就变换一下彩灯,从而实现音乐控制彩灯的功能。
二、总体设计
2.1基本工作原理
高品质音乐盒1、播放音乐的原理
发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。
音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2、音符频率的产生 音符及定时器的初值:
例如:中音1(DO )的音频=523HZ,周期T=1/523s=1912s μ 定时器/计数器0的定时时间为:T/2=1912/2s μ=956s μ
定时器956s μ的计数值=定时时间/机器周期=956s μ/1s μ=956(时钟频率=12MHZ)
计算得到定时器0的初值为65536-956=64580,将初值装入T0的寄存器里,启动T0后,每计数956次后就溢出中断,进入中断服务程序后,只要将I/O 口的输出值取反,就可以得到中音1(DO )的音符音频。只要改变计数初值,就能得到不同频率的音符。表(1)是C 调各音符频率与计数初值的对照表:
表(1)
音符、音符编码及定时器初始值:
为了产生音符必须求出低音到高音的计数初值,而为了便于写谱,必须进行简单的编码,在编程时,根据音符编码查对应的计数初值,比如说音乐是C调的,低音5(SO)直接写为编码1,低音6(LA)直接写为编码2。表(2)是音符编码表:
3、节拍频率的产生
音乐中的节拍是利用延时产生的。例如:1拍=0.4s,1/4拍=0.1s。如此类推,可得到其他节拍的时间。为了便于写谱,也将节拍进行编码。表(3)是节拍数编码表,表(4)是乐谱节拍编程时间延时表:
在音符编码和节拍编码完成后,编程时,每个音符占一个字节,高4位是音符编码,低4位是节拍编码。
2.2硬件总体设计
本设计是由五部分电路组成的,分别是时钟复位电路、单片机系统、按键电路、显示电路和音频输出电路。硬件的总体框图如图(1)所示:
图(1)
根据系统框图,使用Proteus软件绘制总原理图,总原理图如图(2)所示:
图(2)
原理说明:
(1)当键盘有键按下时,判断键值,启动定时器0,产生一定的频率,驱动蜂鸣器,播放歌曲,启动定时器1,显示歌曲序号;
(2)用P0口控制七段数码管,P1口控制彩灯变化,P2.0控制喇叭,输出音频信号;
(3)电路采用12MHz的晶振工作,起振电路中C1和C2为22pF的电容。2.3软件总体设计
本设计采用Keil软件进行编写程序并进行编译,采用Proteus软件进行仿真调试。
在编写程序之前,首先应该画出该程序的流程图,这样编程起来会比较简单一点,不会那么复杂。音乐盒设计的总程序流程图如图(3)所示: