
通信工程系电子线路实现训练报告单片机音乐播放器设计报告.doc
19页通信工程系电子线路实现训练报告目 录1.方案与论证 11.1 显示电路 11.2 时钟电路 12.电子音乐产生原理 12.1音调 12.2节拍 33.系统硬件设计 63.1系统总框图 63.2 电路设计 73.2.1 单片机时钟电路 73.2.2. 复位电路 83.2.3.电源电路 83.2.4. USB程序下载电路 93.2.5. 蜂鸣器驱动电路 103.2.6. 显示电路 113.2.8 矩阵电路 114.系统软件设计 125.总结与展望 146.参考文献 14附 录 15附录1系统总电路 15附录2源代码 161.方案与论证1.1 显示电路方案.1:采用LED数码管来显示(电路简单,成本低);方案.2:采用LCD液晶显示器来显示(电路简单,成本高);方案3:采用TFT真彩液晶显示(电路复杂,成本高,但显示的分辨率高);综上所述,选择方案一进行设计1.2 时钟电路方案.1:选择DS1302实时时钟芯片来实现音乐播放器(时间准确,但要增加额外开销);方案.2:选择单片机的软件实时来实现音乐播放器(灵活性高,时间不准确);方案.3:选择单片机内部可编程定时器来实现音乐播放器(在不增加额外的开销前提下,时间可以做到准确)。
综上所述,选择方案三进行设计2.电子音乐产生原理单片机发音原理:单片机演奏音乐基本是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,但一定要弄清楚两个概念即可,也就是“音调”和“节拍” ·音调 表示一个音符唱多高的频率·节拍 表示一个音符唱多长的时间下面,就此两点,阐述说明:2.1音调在音乐中所谓“音调”,其实就是我们常说的“音高”在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz,其余与其比较f1和f2为两个音符,当这两个音符的频率相差一倍时,也即f2=2×f1时,则称f2比f1高一个倍频程在音乐中1与,2与……,正好相差一个倍频程,在音乐学中称它相差一个八度音在一个八度音内,有12个半音以1—i八音区为例,12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i 这12个音阶的分度基本上是以对数关系来划分的如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率确定一个频率所对应的定时器的定时初值的方法:以标准音高A为例:标准音高A的频率f = 440 Hz,其对应的周期为: T = 1/ f = 1/440 =2272μs因此,需要在单片机I/O端口输出周期为T =2272μs的方波脉冲,如下图所示。
图1 方波脉冲由上图可知,单片机上对应喇叭的I/O口来回取反的时间应为: t = T/2 = 2272/2 = 1136μs此处分两种方式叙述,请比较选用,其实结果相同:Ⅰ.这个时间t也就是单片机上定时器应有的中断触发时间一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲设振荡器频率为f0,则定时器的予置初值由下式来确定: t = 12 ×(TALL – THL)/ f0式中,TALL = 216 = 65536,THL为定时器待确定的计数初值因此定时器的高低计数器的初值为: TH = THL / 256 = ( TALL – t× f0/12) / 256 TL = THL % 256 = ( TALL – t× f0/12) %256将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的预置初值为 : TH440Hz = (65536 – 1136 * 12/12) /256 = FBH TL440Hz = (65536 – 1136 * 12/12)%256 = 90H根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
Ⅱ.假设单片机晶振频率f0=12Mhz,定时器在工作方式1计数脉冲值与频率的关系为:N=FI ÷2÷FR其中 N——计数值; FI——内部计时一次为1us,故其频率为1MHz; FR——要产生的频率其计数值的求法为: T=65536-N=65536-FI ÷2÷FR 则标准音高A(频率f = 440 Hz)的计数值为: T=65536-N=65536-FI ÷2÷FR=65536-1000000÷2÷ FR =65536-500000/440=65536-1136=64400=0FB90H下面给出C调各音符频率值和定时器定时初值:(晶振频率f0=12Mhz,定时器在工作方式1)表1 C调各音符频率值和定时初值对照表C调音符11#22#344#55#66#7频率Hz262277293311329349370392415440466494TH/TLF88BF8F2F9B7FA14FA66FAB9FB03FB4AFB8FFBCFFBCFFC0BC调音符11#2#4#5#6#频率Hz 523553586621658697739783830879931987TH/TLFC43FC78FCABFCDBFD08FD33FD5BFD81FDA5FDC7FDE7FE05C调音符11#22#344#55#66#7频率Hz104511061171124113161393147615631658175518601791TH/TLFB21FE3CFE55FE6DFE84FE99FEADFEC0FE02FEE3FEF3FF02对于非C调的歌曲,要对各音符的频率做相应的变化 调号——音乐上指用以确定乐曲主音高度的符号。
升C调:1=#C,也就是降D调:1=bD;277(频率)升D调:1=#D,也就是降E调:1=bE;311升F调:1=#F,也就是降G调:1=bG;369升G调:1=#G,也就是降A调:1=bA;415升A调:1=#A,也就是降B调:1=bB4所谓1=A,就是说,这首歌曲的“导” (即作为基调的中音DO)要唱得同A音符一样高,其它各音符依次向后递推,通常把这首歌曲叫做A调歌曲,或叫“唱A调”1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”同样是“导”,不同的调唱起来的高低是不一样的在递推的时候要严格按各音符间音程关系进行(全音还是半音,只有3—4和7—i 之间是半音关系,其它音之间都是全音关系),下面以1=D调进行说明参照上面的钢琴键盘图和表1,确定出D调各音符对应的频率值为:(到后来制表时就以各音符对应的新频率值确定定时初值)2.2节拍音符的节拍我们可以举例来说明在一张乐谱中,我们经常会看到这样的表达式,如1=C 、1=G…… 等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,、就是用来表示节拍的以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如: 其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms若乐谱有特别说明则另行对待如有乐谱中注明每分钟86拍,则一拍时间为60/86s=698ms可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推具体来说,Ⅰ. 每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,节拍与节拍码的对照,如下表所示表2 节拍与节拍码的对照表节拍码节拍数节拍码节拍数1 (十六分音符)1/4拍 为1DELAY11/8拍2 (八分音符)2/4拍21/4拍33/4 拍33/8拍4 (四分音符)1 拍41/2拍51又1/4拍55/8拍6 1又1/2拍63/4拍8 (二分音符)2 拍81拍10 A2 又1/2 拍A1又1/4拍12 C3 拍C1又1/2拍15 F3又3/4 拍16(全音符)4拍Ⅱ. 以1/4拍(十六分音符)为一个基准定时单位(1DELAY),则2/4拍(八分音符)为2DELAY, 1 拍(四分音符)为4DELAY, 2 拍(二分音符)为8DELAY, 4拍(全音符)为16DELAY。
1/4和1/8节拍的时间设定,如下表所示表3 各调节拍时间设定表1/4节拍的时间设定1/8节拍的时间设定曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms通过上面介绍的音符音调和节拍的相关知识,以及它们在单片机系统中的确定方法,我们就可以在单片机上实现演奏音乐了具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲请注意,用单片机上实现音乐演奏关键在于,根据乐谱制作出数据表格,编程在其次,这个过程很耗费时间和精力另外,对于乐曲中的休止符,一般将其音调参数设为FFH或00H,其节拍参数与其它音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示实例说明建立音乐的方法(1)建立简谱对应的简谱码、T值及节拍数表,画在草稿纸上①先对照歌曲的简谱把其中所有出现的音符找出,从低音到高音依次排序,确定各音的数值(编写查表程序时将此值减1,即得对应音符相对于TABL1表头的偏移量)。
对于不是C调的歌曲,要对各音符的频率做相应的变化② 对照歌曲的简谱确定各音符的节拍数相对于基准定时单位的倍数,从小到大排列各音符时值的倍数关系是确定不变的,关键要正确确定其值这需要懂一点简谱知识才能准确的确定出乐谱中音符节拍数以歌曲兰花草为例,如下表:表4简谱发音(这一列知道就行不必写出)简谱码T值节拍码节拍数低3低音MI16402111/4拍低4低音FA2641。
