单片机音乐源编码.docx
《单片机音乐源编码.docx》由会员分享,可在线阅读,更多相关《单片机音乐源编码.docx(11页珍藏版)》请在冰豆网上搜索。
单片机音乐源编码
实训项目三:
音乐演奏器
一、实训目的
了解发出不同音调声音的编程方法。
二、项目内容及电路
1、项目内容:
播放自己喜欢的歌曲
附加功能:
实现播放多首歌曲,数码管显示正在播放的是第几首曲目,按键K1设为上一首按键,按键K2设为下一首按键,按键K3设为播放按键。
2、项目电路同实训项目一。
三、实训内容
1、声音原理
声音的产生是一种音频振动的效果。
振动的频率高,则为高音,振动的频率低,则为低音。
振动的频率不同,发出的声音也就不同,有规律的振动发出的声音叫“乐音”。
音频的范围为20HZ~200KHZ之间,人类的耳朵比较容易辨识的声音频率范围是200HZ~20KHZ。
一般音响电路是用正弦波信号驱动喇叭,从而产生悦耳的音乐;在数字电路里,则是用数字脉冲信号驱动喇叭,从而产生声音。
如果声音的频率相同,人类的耳朵很难区分哪个是脉冲信号产生的声音,哪个是正弦波信号产生的声音。
音乐演奏控制器是通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音阶的声音。
再利用延迟来控制发音时间的长短,即可控制音调中的节拍。
把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间。
(1)利用定时/计数器T0工作在16位定时方式,通过改变TH0和TL0的值,就可以产生不同频率的脉冲,例如想产生523HZ(音符1的中音)的脉冲,其周期为1/523=1922uS,因此只要让T0定时956uS后,使P1.6取反,就可以在P1.0引脚上输出一个频率为523HZ的脉冲。
若晶振的频率为12MHZ,机器周期为1uS,则计数值为956/1=956,而计数器的初值为65536-956=64580=FC44H,即TH0=0FFH,TL0=22H。
这样每个音符都对应了一个T值,12M晶振时各音符的T值如下表1:
表1:
12M晶振时对应的T值表
音符(低音)
T值
音符(中音)
T值
音符(高音)
T值
1
63628
1
64580
1
65058
2
63835
2
64684
2
65110
3
64021
3
64777
3
65157
4
64103
4
64820
4
65178
5
64260
5
64898
5
65217
6
64400
6
64968
6
65252
7
64524
7
65030
7
65282
(2)每个音符的发音长度,各调节拍与时间的设定如下表2所示:
表2:
调值与节拍延时时间关系表
曲调值
1/4拍时间
1/8拍时间
调4/4
125ms
62ms
调3/4
187ms
94ms
调2/4
250ms
125ms
2、软件设计
(1)音符节拍
选择你喜欢的歌曲,查找这些歌曲的简谱,根据表1和表2,做好音符节拍常数表,如
;兰花草音符节拍表
SONG0:
DB 42H,82H,82H,82H,86H,72H,63H,71H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B2H,0B6H,0A2H
DB 83H,0A1H,0A2H,92H,88H,82H,0B2H,0B2H,0A2H,86H,72H
DB 63H,71H,62H,52H,44H,12H,02H
DB 12H,62H,62H,52H,46H,82H,73H,61H,52H,32H,48H
DB 00H
备注:
高4位为音调,低4位为节拍,00H为休止符。
(2)绘制流程图
采用模块化设计,分为主程序、中断服务子程序及显示子程序,分别绘出这些程序的流程图。
(3)根据流程图,编制源程序。
3、仿真调试,最好先调试出一首。
四、实训总结
1、学会使用伪指令,方便程序阅读与更改。
2、程序编写要规范,要有相应的注释。
参考程序如下:
BEEPBITP2.0;生日快乐
JDEQU30H
YDEQU31H
THH0EQU32H
TLL0EQU33H
JPEQU34H
ORG0000H
AJMPMAIN
ORG000BH
AJMPTIM0
ORG0030H
MAIN:
MOVSP,#60H;主程序
MOVTMOD,#01H;设定时方式
MOVIE,#82H;开中断
CLRBEEP
START0:
MOVJD,#00H;
NEXT:
MOVA,JD
MOVDPTR,#TABLE
MOVCA,@A+DPTR;查表取音调和节拍
MOVB,A
JZEND0;为零,不进行处理.
ANLA,#0FH
MOVJP,A;将节拍存入JP
MOVA,B
SWAPA
ANLA,#0FH
JNZSING;根据音调决定是否演奏.
CLRTR0
JMPD1
SING:
DECA
MOVYD,A;将音调存入YD.
RLA
MOVDPTR,#TABLE1
MOVCA,@A+DPTR;根据音调决定定时器初值.
MOVTH0,A;放入TH0
MOVTHH0,A
MOVA,YD
RLA
INCA
MOVCA,@A+DPTR
MOVTL0,A;放入TL0
MOVTLL0,A
SETBTR0;启动定时
D1:
ACALLDELAY
INCJD
JMPNEXT
END0:
CLRTR0
JMPSTART0
TIM0:
;定时器中断服务程序
PUSHACC
PUSHPSW
MOVTL0,TLL0;重赋初值.
MOVTH0,THH0
CPLBEEP
POPPSW
POPACC
RETI
DELAY:
MOVR7,#02H;节拍延时子程序
D2:
MOVR6,#187
D3:
MOVR5,#248
DJNZR5,$
DJNZR6,D3
DJNZR7,D2
DJNZJP,DELAY
RET
TABLE1:
;决定音调的定时初值.
DW 63628,63835,64021,64103,64260,64400,64524 ;低音1234657
DW 64580,64684,64777,64820,64898,64968,65030 ;中音1234567
DW 65058,65110,65157,65178,65217,65252,65282 ;高音1234567
TABLE:
;决定音调和节拍的表格,不同的歌曲此表不同
DB82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H
DB82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;兰花草;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 42H,82H,82H,82H,86H,72H,63H,71H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B2H,0B6H,0A2H
DB 83H,0A1H,0A2H,92H,88H,82H,0B2H,0B2H,0A2H,86H,72H
DB 63H,71H,62H,52H,44H,12H,02H
DB 12H,62H,62H,52H,46H,82H,73H,61H,52H,32H,48H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;两只老虎;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 44H,54H,64H,44H
DB 44H,54H,64H,44H
DB 64H,74H,88H
DB 64H,74H,88H
DB 82H,92H,82H,72H,64H,44H
DB 82H,92H,82H,72H,64H,44H
DB 54H,14H,48H
DB 54H,14H,48H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;生日快乐;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 82H,01H,81H,94H,84H
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H
DB 82H,01H,81H,0F4H,0D4H
DB 0B4H,0A4H,94H,04H
DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;两只蝴蝶;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 62H,52H,64H,04H,
DB 52H,62H,52H,44H,04H
DB 22H,42H,54H,64H,52H,42H,22H,42H,14H,04H
DB 62H,52H,64H,04H
DB 52H,62H,52H,44H,04H
DB 22H,42H,54H,64H,52H,42H,22H,42H,54H,04H
DB 62H,52H,64H,04H
DB 52H,62H,52H,44H,04H
DB 22H,42H,54H,64H,52H,42H,22H,42H,14H,04H
DB 62H,82H,84H,04H
DB 82H,92H,82H,64H,04H
DB 52H,62H,54H,64H,52H,42H,22H,42H,44H,04H
DB 82H,82H,92H,0B2H,0A2H,0A2H,92H,62H,52H,52H,66H,04H
DB 62H,62H,82H,94H,94H,22H,62H,56H,04H
DB 62H,82H,82H,62H,84H,04H
DB 0B4H,0A2H,92H,0A2H,64H,04H
DB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04H
DB 82H,82H,92H,0B2H,0A2H,0A2H,92H,62H,52H,52H,66H,04H
DB 62H,62H,82H,94H,94H,22H,62H,56H,04H
DB 62H,82H,82H,62H,84H,04H
DB 0B4H,0A2H,92H,0A2H,64H,04H
DB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04H
DB 62H,82H,82H,62H,84H,04H
DB 0B4H,0A2H,92H,0A2H,64H,04H
DB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;记事本;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 84H,82H,82H,82H,0B2H,0B2H,82H,0C2H,0C3H,82H,84H,0B2H,0A2H,0A2H,93H,04H
DB 94H,92H,82H,82H,63H,62H,62H,52H,52H,42H,44H,04H
DB 62H,52H,52H,42H,84H,04H
DB 92H,82H,94H,82H,63H,04H
DB 84H,82H,82H,82H,0B2H,0B2H,82H,0C2H,0C3H,83H,04H
DB 84H,0B2H,0A2H,0A2H,93H,94H,82H,92H,82H,63H,04H
DB 52H,62H,52H,62H,44H,04H
DB 52H,62H,52H,42H,84H,04H
DB 14H,62H,52H,52H,42H,54H,42H,44H,04H
DB 0A2H,0B2H,0A2H,63H,04H
DB 0A2H,0B2H,0A2H,63H,04H
DB 0D2H,0C2H,0C2H,0B2H,0C2H,0B2H,0B2H,0B2H,94H,84H,94H,64H,04H
DB 64H,62H,52H,52H,42H,44H,04H
DB 64H,62H,52H,52H,42H,84H,04H
DB 84H,92H,82H,92H,83H,63H,04H
DB 0A2H,0B2H,0A2H,63H,04H
DB 0A2H,0B2H,0A2H,63H,04H
DB 0D2H,0C2H,0C2H,0B2H,0D2H,0C2H,0C2H,0B2H,0C2H,0C2H,0C4H,0E4H,64H,04H
DB 0D4H,0C2H,0D2H,0C2H,0B2H,94H,04H
DB 0D4H,0C2H,0D2H,0C2H,0B2H,0C4H,04H
DB 0D4H,0C2H,0D2H,0C2H,0B2H,0C4H,0B4H,96H,04H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;新年快乐;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 42H,42H,44H,14H,02H
DB 62H,62H,64H,44H,04H
DB 42H,62H,84H,84H,02H
DB 72H,62H,54H,04H
DB 52H,62H,74H,74H,02H
DB 62H,52H,64H,44H,04H
DB 42H,62H,54H,14H,02H
DB 32H,52H,44H,04H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;哈巴狗;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 42H,42H,42H,52H,64H,04H
DB 62H,62H,62H,72H,84H,04H
DB 92H,92H,82H,72H,64H,04H
DB 82H,82H,52H,62H,44H,04H
DB 42H,42H,42H,52H,84H,04H
DB 62H,62H,62H,72H,84H,04H
DB 92H,92H,82H,72H,64H,04H
DB 82H,82H,52H,62H,44H,04H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;绿岛小夜曲;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2H
DB 0B2H,0A2H,82H,72H,88H
DB 72H,82H,0A2H,82H,72H,62H,42H,62H
DB 38H,38H
DB 0A4H,02H,0B2H,0A4H,084H
DB 72H,82H,72H,62H,72H,84H,72H
DB 64H,62H,12H,34H,02H,42H
DB 38H,38H
DB 44H,02H,32H,44H,64H
DB 72H,82H,72H,62H,72H,84H,0A2H
DB 72H,74H,82H,0A2H,02H,0B2H
DB 0A8H,0A8H
DB 0B2H,0B4H,0A2H,84H,82H,72H
DB 62H,72H,82H,0A2H,88H
DB 72H,74H,62H,42H,32H,32H,62H
DB 78H,78H
DB 82H,84H,72H,82H,0A2H,84H
DB 72H,82H,72H,62H,48H
DB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H
DB 68H,68H
DB 0B2H,0B2H,0A2H,82H,84H,02H
DB 72H,74H,62H,42H,32H,42H,62H
DB 78H,78H
DB 0A2H,0B2H,0A2H,72H,82H,84H,82H
DB 72H,74H,62H,44H,64H
DB 0A8H,0A4H,02H,0A2H
DB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H
DB 0A2H,0B2H,0A2H,82H,78H
DB 84H,72H,62H,44H,02H,62H
DB 72H,81H,71H,62H,72H,84H,02H,0A2H
DB 0B4H,02H,82H,74H,82H,72H
DB 68H,68H,04H
DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;弯弯的月亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 62H,82H,82H,62H,98H
DB 92H,0B2H,0B2H,82H