单片机电子琴系统程序设计 第2页

单片机电子琴系统程序设计 第2页
第一章  绪 论
1.1  设计任务与要求:
设计任务:能够发出1、2、3、4、5、6、7等七个音符。
设计基本要求:
⒈按键与音符:一个按键对应一个音符
⒉播放:能够演奏播放一首完整的歌曲。
1.2  设计目的
(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。
(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
第二章 硬件设计
2.1  音乐的基本知识
在音乐中使用的各个固定频率的音叫音级。常用符号C、D、E、F、G、A、B、c、d、e、……a1、b1、c2、d2……表示,它们对应于钢琴上的白键。两音之间音高的距离叫音程。在上述音级中,E与F、B与C之间音高的距离仅为其它相邻音级之间距离的一半,称它们之间的音程为半音音程,而称其它相邻各音之间的距离为全音音程。在这些全音音程之间又加入新的半音音级,用符号﹟C、﹟D、﹟F、﹟G、﹟A、﹟c、﹟d、﹟f、……表示,对应于钢琴上的黑键。国际上目前采用以a1 =440Hz作为标准国际音高,由此推算出各音级的频率见表1。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。
2.2  音乐产生原理
要产生音频信号,只要算出某一音频的周期(频率的倒数),将此周期除以2即为半周期的时间,利用定时器计时此半周期时间,计时到后取反输出,重复此过程即得到此频率的声音信号。此信号从P1.7脚输出。
定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。一般中断响应时间为3~6个机器周期,经过反复试验取5个机器周期作为校正最为恰当,表1中所给的定时初值就是考虑中断响应后的定时常数。另外,为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。每个音符使用两个字节。低位字节(偶地址)代表音级,00H表示不发音(休止符),01H~30H依次表示的音级为c、﹟c、d、﹟d、e、f、……a3、﹟a3、b3 ,详见表1。高位字节(奇地址)代表音符的时值(拍数),00H~0FH依次表示拍数为1/8拍(0.10s)~8拍(6.40s),见表2。乐曲的结束标志是两个字节:00H,0FH。
定时器T1工作在定时方式1,定时时间为0.10s左右,作为音符节拍的最小时间单位,即1/8拍,该时间要求不必很准确,该时间越短,音乐播放节奏就越快。时间取0.10s时,定时常数取为3CB0H。即TH1=3CH,TL1=0B0H。其它的音符节拍都是1/8拍的整数倍,借助软件计数,允许中断的次数就是倍数。例如,要得到1拍的延时,只要中断8次即可。
要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的内容来实现的。
主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0;根据定时器T1应中断的次数,启动定时器T1。数据表读完后,根据所设置的循环演奏次数决定是否结束程序。音级子程序的任务是取出字节中的音级部分,分析TH0和TL0中应送入何值,送给寄存器R3、R2。音长子程序的任务是取出字节中的音长部分,分析确定定时器T1应中断的次数,次数送寄存器R4中,同时启动定时器T1,直到完成所需拍数。
定时器T0的中断服务程序任务是取反P1.7输出产生方波,重新为TH0,TL0送初值。
定时器T1的中断服务程序任务是:判断节拍数完成否,关闭定时器T0、T1中断。
当乐曲较长时(超过254个字节),数据表指针溢出,应及时修改基址
寄存器DPTR内容,即数据表的表头指针。
例如,C=1时音节:   6 -用音符(包含音级和音长)字节表示就为:11H,02H,14H,01H,16H,01H,19H,02H,16H,02H,16H,08H,16H,0AH,00H,04H。其中11H,02H中的11H表示音3(mi),02H表示节拍为半拍。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216--5﹡105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:
表1  各音的频率、定时初值、字节字符
音级/1=C 频率(Hz) 定时初值 字节字符 音级/1=C 频率(Hz) 定时初值 字节字符
c  / 1 130.81 F88E 01H c2 /   523.25 FE27 19H
﹟c 138.59 F8F9 02H ﹟c2 554.37 FE42 1AH
d  / 2 146.83 F95E 03H d2 /   587.33 FE5B 1BH
﹟d 155.56 F9BE 04H d2 622.25 FE73 1CH
e  / 3 164.81 FA18 05H e2  /   659.26 FE8A 1DH
f  / 4 174.61 FA6D 06H f2  /   698.46 FE9F 1EH
﹟f 185.00 FABE 07H ﹟f2 739.99 FEB3 1FH
g  / 5 196.00 FB09 08H g2  /   783.99 FEC6 20H
﹟g 207.65 FB51 09H ﹟g2 830.61 FED8 21H
a  / 6 220.00 FB95 0AH a2  /   880.00 FEE9 22H
﹟a 233.08 FBD4 0BH a2 932.33 FEF9 23H
b  / 7 246.94 FC11 0CH b2 /   987.77 FF08 24H
c1  / 1 261.63 FC49 0DH c3 /   1046.5 FF16 25H
﹟c1 277.18 FC7F 0EH ﹟c3 1108.7 FF24 26H
d1  / 2 293.66 FCB2 0FH d3 /   1174.7 FF30 27H
﹟d1 311.13 FCE1 10H ﹟d3 1244.5 FF3C 28H
e1  / 3 329.63 FD0F 11H e3  /   1318.5 FF47 29H
f1  / 4 349.23 FD39 12H f3  /   1396.9 FF52 2AH
﹟f1 369.99 FD61 13H ﹟f3 1480.0 FF5C 2BH
g1  / 5 392.00 FD87 14H g3  /   1568.0 FF66 2CH
﹟g1 415.30 FDAB 15H ﹟g3 1661.2 FF6F 2DH
a1  / 6 440.00 FDCD 16H a3  /   1760.0 FF77 2EH
﹟a1 466.16 FDED 17H ﹟a3 1864.7 FF7F 2FH
b1  / 7 493.88 FE0B 18H b3 /   1975.5 FF86 30H播放方法:
P1.7输出的音频信号不能直接驱动普通喇叭,可驱动高阻抗耳机发声或者有源音箱发音。也可自制音频放大电路驱动喇叭发音。747

上一页  [1] [2] [3] [4] [5] [6] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有