音乐程序原理_第1页
音乐程序原理_第2页
音乐程序原理_第3页
音乐程序原理_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、音乐程序的设计原理和程序如下:2 z& p/ s# l! c; i! / r7 p, ?6 v设计原理7 l9 8 r! ?! b3 t1 - j! z 总体原理:- x9 l$ p* s3 c# p! 8 a 乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。# a& q; m+ c. g# g2 c 单片机产生不同频率脉冲信号的原理:/ g& p8 r p7 l v$ k t2 h0 t1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,

2、每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期的时间再对i/o反相,就可以在i/o脚上得到此频率的脉冲。: o5 _* o t5 3 x) l2)利用8051的内部定时器使其工作在计数器模式mode1下,改变计数值th0及tl0以产生不同频率的方法如下:+ o& o! 0 m1 p0 u, y2 ? 例如,频率为523hz,其周期天/523 s=1912us,因此只要令计数器计时956us/1us=956,在每计数956次时就将i/o反接,就可得到中音do(532hz)。 1 g2 5 e3 o7 v! b. m计数脉冲值与频率的关系公式如下:% 0 l+ ! f5 |5 |0 n

3、+ n=fi/2/fr ) f1 y9 |, ?7 ) j(n:计数值,fi:内部计时一次为1us,故其频率为1mhz,fr:要产生的频率 )9 kh8 l5 / b 其计数值的求法如下:/ q: 4 ! a# w. l6 k gt=65536-n=65536-fi/2/fr* n+ g1 y# d& l6 f; n7 l- t计算举例:9 w; w2 q3 7 x1 x4 t0 j设k=65536,f=1000000=fi=1mhz,求低音do(261hz)、中音do(523hz)、高音do(1046hz)的计数值。6 kq# o% a. _t=65536-n=65536-fi/2/fr=6

4、5536-1000000/2/fr=65536-500000/fr9 k& ) b0 w- - h- s d低音do的t=65536-500000/262=636279 v4 f; % u5 e4 z) k7 中音do的t=65536-500000/523=64580; t9 g/ x c0 s, r高音do的t=65536-500000/1047=65059! z q3 h2 q; z9 e c调个音符频率与计数值t的对照表如下表所示:- r* x# t! b d, r z, g4 u( : x# h) x( w. 1 h# y0 k3 w表9.1c调各音符频率与计数值t的对照表+ x! w

5、- / 5 d5 s音符 频率(hz) 简谱码t值 音符 频率(hz) 简谱码t值- c/ x; c+ w3 t& z; x9 e低1do 262 63628 #4fa# 740 64860f: y2 y4 x3 k* i% 3 w4 l0 z#1do# 277 63731 中5so 784 64898$ a. t0 w) |. _7 m& d低2re 294 63835 #5so# 831 649237 z% w# l6 d9 a1 y/ a! d#2re# 311 63928 中6la 880 64968 u9 q5 l! # r8 4 l( h低3m 330 64103 #6 932 6

6、4994l4 d7 : 3 k! s: q, a低4fa 349 64103 中7si 988 650301 b, ?& - 8 ac#4fa# 370 64260 高1do 1046 65058* b& , . u3 x低5so 392 64260 #1do# 1109 65085) d/ d i5 w* q j#5so# 415 64331 高2re 1175 65110; n; w2 g1 i, r+ h6 低6la 440 64400 #2re# 1245 65124. , r3 x! 6 z0 w#6 466 64463 高3m 1318 651576 r, c# k# i; x)

7、n低7si 494 64524 高4fa 1397 65178; k/ jp- d4 w中1do 523 64580 #4fa# 1480 651986 9 w; f h( _+ j7 j/ h: v# z# f, h7 w! cd 每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4节拍为1delay,则1拍应为4delay,以此类推。所以只要求得1/4拍的delay时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。 1 g2 y: 2 u# b表

8、9.2节拍码对照表# 1 l& z9 ?* e$ . y; n1/4节拍 1/8节拍0 w9 s5 e5 il8 g& _2 t9 v节拍码 节拍数 节拍码 节拍数: r8 % _0 t w; u! z6 s, n) s1 1/4拍 1 1/8拍5 a. h: v, e( m1 s* u7 i2 2/4拍 2 1/4拍9 b( f- m5 o+ j/ x3 3/4拍 3 3/8拍* ( t$ p1 a6 w! d7 b! a b4 1拍 4 1/2拍- m# c) y$ q4 o8 l5 1又1/4拍 5 5/8拍- i2 . 7 b8 0 n6 1又1/2拍 6 3/4拍9 t6 k4 p)

9、 v/ o, p5 lm, _7 1又3/4拍 7 7/8拍6 3 2 9 n+ c8 2拍 8 1拍) a2 u2 c, c- d# 9 2又1/4拍 9 1又1/8拍8 - y; / q x+ ya 2又1/2拍 a 1又1/4拍 q( 2 |# v) h* n1 a8 s( ab 2又3/4拍 b 1又3/8拍3 b( ! u( g$ r+ p0 g: b6 hc 3拍 c 1又1/2拍2 j9 b( i; k1 k! cd 3又1/4拍 d 1又5/8拍- ( g( c! - r3 a; ge 3又1/2拍 e 1又3/4拍; d. 5 e! b; j kf 3又3/4拍 f 1又7/

10、8拍) c1 u; v0 p& m6 d9 kq表9.3 各调节拍的时间设定表$ + 6 r. t6 e9 0 q1/4节拍 1/8节拍+ o/ yn5 q4 eu& |$ k5 m曲调值 delay 曲调值 delay8 * u! m w# j5 p8 s+ c调4/4 125毫秒 调4/4 62毫秒4 c9 - n o! y: tf& ic# a调3/4 187毫秒 调3/4 94毫秒& s8 e9 r# n$ f* q/ k9 y. b8 调2/4 250毫秒 调2/4 125毫秒$ v7 q8 e. z5 w! y) 6 b* i 建立音乐的步骤:! k t5 c% z1 n0 g0

11、v- r7 w 1)先把吧乐谱的音符找出,然后由上表建立t值表的顺序。+ n e; k) * |4 w; |+ f 2)把t值表建立在table1,构成发音符的计数值放在“table”。! w, d+ ! p5 k- p. n3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“table”处。+ o) a! 0 f) f; o/ g4 _! b6 u1 b5 x表9.4简谱对应的简谱码、t值、节拍数- c5 |5 ) c6 k3 l0 z! x简谱 发音 简谱码 t值 节拍码 节拍数: f$ o+ b8 f j2 u, e: % f5 低5so 1 64260 1 1/4

12、拍0 o; k5 x. u0 k+ v! y6 低6la 2 64400 2 2/4拍5 t0 g% v: g; j ny+ z7 低7si 3 64524 3 3/4拍- r* s7 q e, z u9 ( z7 i1 中1do 4 64580 4 1拍! l- |. v0 p. m2 n/ - ! q; e, 2 中2re 5 64684 5 1又1/4拍! g+ f5 k4 ( z/ x7 k) * 3 中3m 6 64777 6 1又2/4拍. e p h) es4 中4fa 7 64820 7 1又3/4拍q p& i4 yh5 4 * t9 z. 5 中5so 8 64898 8

13、2拍: y4 j/ m, 2 _& q: u6 中6la 9 64968 9 2又1/4拍( _6 y6 g5 e2 k7 中7si a 65030 a 2又2/4拍/ y: o% ! n8 p9 0 f9 y1 e9 t1 高1do b 65058 b 2又3/4拍) h) & b 4 p 2 a7 u1 f b2 高2re c 65110 c 3拍* n, z# p( w3 j5 f) q, * c j3 高3m d 65157 d 3又1/4拍2 z$ p3 w3 j6 ew- 5 _5 y4 高4fa e 65178 e 3又2/4拍1 e2 c5 x5 z+ o0 d$ o- c5

14、高5so f 65217 f 3又3/4拍8 b$ 6 ?% - 不发音 0 5 g6 k; e; |1 q7 n* f% j, y t0 y* a1/4拍的延迟时间=187毫秒8 t: e, v4 f) g- w ndelay: movr7,#2. nv8 0 q; g; d) fd2: movr4,#1874 ?1 ?! 0 s: l% e2 e5 v0 g0 t9 ud3: movr3,#2480 e# y g# n7 j; ldjnzr3,$0 t! j$ t. w6 b! p/ odjnzr4,d38 a5 r3 k4 m5 h9 y5 ) q$ kdjnzr7,d2# _/ g*

15、t, d1 p( ) j/ h. z& gret5 a7 m3 z) h0 r) t9 h9 d( v4程序范例3 n. o& bu1 k: j7 org 0000h ;主程序起始地址% |, d x7 j% l% l, r( t7 osjmp start ;跳至主程序, x. ?6 f, c- q% z0 z* v( t! borg 000bh ;timer0中断起 始地址i1 o7 x, v% 7 1 g ljmp tim0 ;跳至timer0中断子程序9 9 ?s. n5 v8 d b3 lstart:mov tmod,#01h ;设t0在m1 c - d/ x$ dq mov ie,#

16、82h ;中断使能% z; o9 q k, k i. sstart0:mov 30h,#00 ;取简谱码指针! u; f s& k+ bnext: mov a,30h ;简谱码指针载入a2 e. f ! - v# w) n% mov dptr,#tab ;至tab取简谱码! d! x! ( r9 e, s0 . lmovc a,a+dptr ;* 4 g v. w2 r5 y& ?* i* d0 c& n mov r2,a ;渠道的简谱码暂存于r2- o w3 , d* b % g0 u jzend0 ;是否渠道00(结束码)% r h o+ y1 9 c anla,#0fh ;不是,则取低4

17、位(节拍码)2 g r& g m( w* t mov r5,a;将节拍码存入r5. e7 r2 c! 1 o8 y2 y+ f u mov a,r2;将取到的简谱码再载入a+ . + y7 t0 l0 k1 a; f5 swap a ;高低4位交换m: u; i! + u5 m lw anla,#0fh;取低4位(音符码)% m6 h; j e6 m9 e jnzsing;取到的音符码是否为0? x. a- k% c% z1 t2 e v! r9 p1 o* d, z clr tr0 ;开始,则不发音! l- t5 , p2 k f; n sjmp d1 ;跳至d1# u 9 ) a: 3 /

18、 jsing: dec a ;取到的音符码减1(不含0)5 e( g/ a+ c& h2 z- l, b mov 22h,a;存入(22h)5 2 _% k% o z1 rla ;乘23 l- t7 l5 u: o+ p mov dptr,#tab1 ;至table1取相对的高位字节计数值. n8 e0 , q0 t6 e w |$ u: j movc a,a+dptr ;5 _o; * d* 0 ch7 mov th0,a;取到的高位字节存入th0+ r9 k/ t# * c: ?) smov 21h,a;取到的高位字节存入(21h)1 t7 ?0 j; y h f6 amov a,22h;

19、在载入取到的音符码& 6 u# z( 0 ez- m/ e& orla ;乘2te) x6 r g8 c% _0 xinca ;加14 c. b) a: d5 ?movc a,a+dptr ;至table1取相对的低位字节计数值& g4 y+ n$ i/ n; g7 u) omov tl0,a;取到的低位字节存入tl01 n4 k& ?0 n8 , c+ % zmov 20h,a;取到的低位字节存入(20h)0 a1 w% s& . q6 l: dsetb tr0 ;启动timer0$ 0 ? ?/ u9 w2 g. z/ o: b0 pd1:lcall delay;其本单位时间1/4拍187

20、毫秒1 g: g7 3 x1 e inc30h ;取简谱码指针加1* z z$ l: o5 m2 u jmp next;取下一个简谱码3 d1 s! n e/ e# d1 yend0: clr tr0 ;停止timer0) q% : q6 7 _: m5 v jmp start0;重复循环 i0 r) m( w; i2 ftim0: push acc;将a的值暂存于堆栈! r! p) k1 f. _6 m1 q6 d l, he push psw;将psw的值暂存于堆栈: v& l% f9 a% x mov tl0,20h ;重设计数值4 u/ n6 a3 6 w* z. u ?1 b( w5

21、 r2 p mov th0,21h ;: yd8 0 m8 s cplp3.0;将p3.0位反相,控制蜂鸣器发声( * e0 m4 v. f5 e( : j- g pop psw;至堆栈取回psw的值6 h( e$ h; s k- ( o) k pop acc;至堆栈取回a的值* x8 g$ y9 a+ d- / k2 s6 reti : s z* o: w6 y% k/ b/ u) . ?) idelay:mov r7,#02 ) p& # w# e& 1 g0 q; e z* fd2: mov r4,#187 $ |. e! d9 v3 w$ k. ! td3: mov r3,#248 4

22、 m4 h3 u! o! d* l: us djnz r3,$ # z k, + k i7 m% : z djnz r4,d3 4 g7 u- r/ ) a$ q. v6 q. h djnz r7,d2 _7 o$ g+ u& $ l$ c ret g2 a+ 9 o) - l6 y. tab1: ;决定节拍, u( g$ s9 o7 6 y+ w6 h n0 q5 ddw64260,64400,64521,64580 n9 j j, d9 # b: c dw64684,64777,64820,64898. r1 q. r# 4 g n# * k# a n5 dw64968,65030,65058,651100 u, p6 x9 e( k0 k; w4 i) l6 i dw65157,65178,65217 6 br$ e, x, g, h/ l9 i( xtab: ;乐曲名称梁祝4 wk 1 w% w/ s$

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论