原创 编写基于单片机的宽音域高音准音乐程序

2009-8-13 08:34 2285 9 9 分类: MCU/ 嵌入式

摘要介绍了一种利用定时中断为单片机编写高音准的音乐程序的方法,并给出实例程序清单。电子园51单片机学习网w9m:VmY:xh7mr


关键词单片机,中断,编程,音乐,音级,音程电子园51单片机学习网Q7Oc~A.z


采用适当的误差补偿,利用单片机定时中断的方法能在宽音域范围产生准确稳定的音频信号。本文以MCS-51单片机为例介绍单片机的音乐程序的编写,给出的程序,只须修改乐曲内容就可得到读者自己的程序。

8W|jBFGx]-x0

1音乐的基本知识电子园51单片机学习网4O6[`r#bG&S6w+V0`


在音乐中使用的各个固定频率的音叫音级[1]。常用符号CDEFGABcde、……a1b1c2d2……表示,它们对应于钢琴上的白键。两音之间音高的距离叫音程。在上述音级中,EFBC之间音高的距离仅为其它相邻音级之间距离的一半,称它们之间的音程为半音音程,而称其它相邻各音之间的距离为全音音程。在这些全音音程之间又加入新的半音音级,用符号﹟C、﹟D、﹟F、﹟G、﹟A、﹟c、﹟d、﹟f、……表示,对应于钢琴上的黑键。电子园51单片机学习网8}+Xl_ n


国际上目前采用以a1=440Hz作为标准国际音高,由此推算出各音级的频率见表1

KWva-Q Oj\T${0

音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。电子园51单片机学习网 ChUq K+T


2编程思路

8P#})v^vx\0

要产生音频信号,只要算出某一音频的周期(频率的倒数),将此周期除以2即为半周期的时间,利用定时器计时此半周期时间,计时到后取反输出,重复此过程即得到此频率的声音信号。此信号从P1.7脚输出。

,O/V1qfR0p0

定时器T0工作在定时方式1,改变TH0TL0,产生不同的音频频率。必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。一般中断响应时间为36个机器周期,经过反复试验取5个机器周期作为校正最为恰当,表1中所给的定时初值就是考虑中断响应后的定时常数。另外,为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。本例中单片机晶振频率为6MHz

*H;DH8{-f0

每个音符使用两个字节。低位字节(偶地址)代表音级,00H表示不发音(休止符),01H30H依次表示的音级为c、﹟cd、﹟def、……a3、﹟a3b3,详见表1。高位字节(奇地址)代表音符的时值(拍数),00H0FH依次表示拍数为1/8拍(0.10s)~8拍(6.40s),见表2。乐曲的结束标志是两个字节:00H0FH电子园51单片机学习网z9CM6f}4j%G


定时器T1工作在定时方式1,定时时间为0.10s左右,作为音符节拍的最小时间单位,即1/8拍,该时间要求不必很准确,该时间越短,音乐播放节奏就越快。时间取0.10s时,定时常数取为3CB0H。即TH1=3CHTL1=0B0H。其它的音符节拍都是1/8拍的整数倍,借助软件计数,允许中断的次数就是倍数。例如,要得到1拍的延时,只要中断8次即可。电子园51单片机学习网 I9}4E#Z0n_e0eV&j i


要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的内容来实现的。

diOu4Z9s|)@k|O0

主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0;根据定时器T1应中断的次数,启动定时器T1。数据表读完后,根据所设置的循环演奏次数决定是否结束程序。音级子程序的任务是取出字节中的音级部分,分析TH0TL0中应送入何值,送给寄存器R3R2。音长子程序的任务是取出字节中的音长部分,分析确定定时器T1应中断的次数,次数送寄存器R4中,同时启动定时器T1,直到完成所需拍数。电子园51单片机学习网Iyqx!\"wHG


定时器T0的中断服务程序任务是取反P1.7输出产生方波,重新为TH0TL0送初值。电子园51单片机学习网t$a-w"z.P/Hb.E


定时器T1的中断服务程序任务是:判断节拍数完成否,关闭定时器T0T1中断。

.h k5m.j@/_V0

当乐曲较长时(超过254个字节),数据表指针溢出,应及时修改基址寄存器DPTR内容,即数据表的表头指针。电子园51单片机学习网|wE)x.rM


例如,C=1时音节: 用音符(包含音级和音长)字节表示就为:11H,02H,14H,01H,16H,01H,19H,02H,16H,02H,16H,08H,16H,0AH,00H,04H。其中11H,02H中的11H表示音3(mi)02H表示节拍为半拍,即。其余类推。电子园51单片机学习网.}8CD3Kd,}%G+rP


3播放方法:

m {6q*v&uP*{0

P1.7输出的音频信号不能直接驱动普通喇叭,可驱动高阻抗耳机发声或者有源音箱发音。也可自制音频放大电路驱动喇叭发音。电子园51单片机学习网E)HpW s2Lmlo


 

\i$tGpw7I0

1各音的频率、定时初值、字节字符

oim7}0A;r0

电子园51单片机学习网5kqQ5f E#~


2拍数对应的字节字符电子园51单片机学习网$? DY#K%l-mU



拍数

'H-q1R,mpGA0

1/8

9a${3G$}.F Z~0

1/4电子园51单片机学习网9[(GiDR eB]pge


1/2电子园51单片机学习网R1q dka!R%Aw


3/4电子园51单片机学习网'Z/H r?yT#|


1

,c3{z*od n0

5/4电子园51单片机学习网3Xoh$[~?pM7j


3/2电子园51单片机学习网9k;UX*TU


7/4

N`O,|!a*U9S E0

字符电子园51单片机学习网,S2ag5}XO)D okI q%T$w ]


00H电子园51单片机学习网E:\ W'QY!k a(r


01H

Mv5]0a#?3M-OP0

02H

%YQ)l(hm}7Tq0

03H电子园51单片机学习网9P6d)rLqC&gV9eD


04H

%W,`*_)QV,km0

05H

j? Y2Q `3z.q0

06H

#~z`N4h M3\U5sJ0

07H

0B G`+V-MO Td,{T0

 电子园51单片机学习网o `C!e4XL:r


 电子园51单片机学习网bf~"J1Ut L6K/b)Ae


 电子园51单片机学习网sl/h}0{8q


 电子园51单片机学习网(enH)a.U"ZC


 电子园51单片机学习网JJ-?-dL


 

o Q4e^%om {Bv/l0

 

/\ } @iJ"u0

 

l Py"_vK0

 电子园51单片机学习网"xU mB"X C3k q`4Vj"|


拍数电子园51单片机学习网1E&u!`$E1~,R P_!Tk*Q(u


2电子园51单片机学习网 U1nw]^6g8K*R


5/2电子园51单片机学习网3b2pvF?oZ


3电子园51单片机学习网B%r-Y*_"K n4w5UaA


7/2电子园51单片机学习网'M"JsrJ Z*]f


4

0P`/X/E o6T'P;MW0

5电子园51单片机学习网0^0T vZ3|ZH


6

l+Gz1o#[ZUK0

8

0W3^@.]&`9vX0

字符

S'xq"[K3X6rp0

08H电子园51单片机学习网HV`/nf


09H电子园51单片机学习网3Y nQ5Z9w+p9V


0AH

l4NR0mxvR;` X/g0

0BH电子园51单片机学习网9JS IUa5t


0CH电子园51单片机学习网8H:_;Ud[| I8lf2D


0DH电子园51单片机学习网!Ts/VI"j S`


0EH电子园51单片机学习网\$`8ws9i


0FH

D4{L/Gu0

 电子园51单片机学习网8w"Y`[j4\:k


 

9x~ d'Up9Mw`,z0

 电子园51单片机学习网'_M ^0SR)G x


4程序清单实例。下面以《一路平安》为例,给出程序清单。本程序使用的寄存器有R1R740H41H42H单元。标号TAB1处为T0的定时常数数据表。电子园51单片机学习网 `wJM$[7qm5?{$M


ORG0000H

6vVAI7j,O D0

AJMP MAIN电子园51单片机学习网\)a$gh1HO`&M


ORG000BH

F$A d}6I/v0

MOV TL0,R2

R5e'PF,LQf}0

MOV TH0,R3

EI*N]c0

CPL P1.7

5W i0o-I%h6f'yxY0

RETI电子园51单片机学习网#iP["HO f;V&Mx


ORG001BH电子园51单片机学习网$JQ2c;s b6szX:p/t


DJNZ R4,GOON;中断次数不够,继续。电子园51单片机学习网 Yo7U+u4A1j+R|@


MOV IE,#80H ;持续时间到,该音符停止。

&Y3M'k4G xi2Y{0

SJMP RE01

jSwc r?:KJ0

GOON: MOV TL1,40H

1w,[/Q [)M6j4|4{9K0

MOV TH1,41H

)I[9v)j1fk/F:Ijz0

RE01: RETI电子园51单片机学习网CN*lq*]5H pL


ORG0100H

k(q#wyA,d A0

MAIN: MOV R5,#02H ;乐曲循环演奏次数电子园51单片机学习网X8M;TJ"w H b"G


LOOP: MOV TMOD,#11H

iz+x{h |~0

MOV IP,#02H

#['nC2x9\*Z0]} TA7Y0

MOV 41H,#4CH; T1初值放在41H40H单元电子园51单片机学习网 ^iM5s``?#dv


MOV 40H,#0B0H ;值越大,演奏越快电子园51单片机学习网w"G9um vce1U8`;|(s


SETB EA

(` [5^o(?"O$u0

CLR A电子园51单片机学习网j$UVMc;o g


MOV R1,A ;R1作为音符指针

)O$b a$y0A[2{ Rr0

MOV DPTR,#0300H;乐曲数据表的表头电子园51单片机学习网{BI#{E;V


L1: MOVC A,@A+DPTR

+{4Z7Yx8q1fa&D0

INC R1 ;指向音符的拍数字节电子园51单片机学习网-VVO Y.@~


MOV R6,A ;音级字节暂存入R6

+R+GpE Q)vi0

JZ L3电子园51单片机学习网gu'J.tHMjm"M*U


ACALL TONE电子园51单片机学习网 Y\YP0jX


MOV TH0,R3

&?$\k.Ry6UN0

MOV TL0,R2电子园51单片机学习网L$L"T,e\g}t


SETB TR0电子园51单片机学习网(z'N'^:n4\:@0~


SETB ET0

4w? YV1sb#iN[F0

MOV A,R1电子园51单片机学习网mE6\ z O%I:cj


MOVC A,@A+DPTR

@ ^|H`1oE ?Z0

INC R1

I D5Z)]/d'uqq.ES0

CJNE R1,#00H,L2

r)u%Y"`D(Zj0

MOV DPTR,#0400H;表指针溢出,更改表头电子园51单片机学习网~R$?fpe$j


L2: ACALL LONG ;

]0`b&P!T i0~0

MOV A,R1

3dy Nbg2f0

AJMP L1 ;电子园51单片机学习网^}%n%}`(w


L3: MOV A,R1

3ih TL~m ^Ust$mU(Z0

MOVC A,@A+DPTR电子园51单片机学习网.cb p1hN-e:N.ub:L-I


MOV R7,A

-jr7]`;pVgk0

INC R1

0re6V)bx I0

CJNE R1,#00H,L4电子园51单片机学习网z-A~.]_7M:t` h


MOV DPTR,#0400H

8?Hx.{)D4G-?0

L4: ACALL LONG ;电子园51单片机学习网;T7X,{w|X%E


MOV A,R1

9b ^ pG6RyXp0

CJNE R7,#0FH,L1电子园51单片机学习网SYO|0]#x4_


END0: MOV IE,#00H

@)Qa {X0H4v'd0

MOV TCON,#00H

N@n/c C.p0

MOV TMOD,#00H电子园51单片机学习网?2\,bLe8A;Q+r


DJNZ R5,LOOP电子园51单片机学习网,Bz/I&_0I d w(gO V


AJMP $电子园51单片机学习网m[eQ]b


ORG0160H

WEH2^m5rCn0Y%K0

TONE: MOV A,R6 ;取出音级字节

V bsRz&I2e;W/L2D0

RL A ;2,定时常数为双字节电子园51单片机学习网 h t5g/UOkJ.kn


MOV 42H,A ;暂存入42H单元

]}\l'mm%M#N0

ADD A,#05H ;距离数表有7个字节,使查表正确电子园51单片机学习网O0LEbf8P


MOVC A,@A+PC;取出TH0电子园51单片机学习网.`Uop`(YN5@


MOV R3,A

V?^C)e^ v,xzI(eF0

MOV A,42H

b(ad[A#Q0

INC A

n3@(Z*D"n0

MOVC A,@A+PC;取出TL0

"VjmSIZjqfI*`0

MOV R2,A ;

w4j%O"Or&t0

RET

!N*] D7I1H0

TAB1: DB 0F8H,8EH,0F8H,0F9H,0F9H,5EH

,["UP:u{RZ0

DB 0F9H,0BEH,0FAH,18H,0FAH,6DH

}:uEPUw0

DB 0FAH,0BEH,0FBH,09H,0FBH,51H

Zv6K*}w9uy0

DB 0FBH,95H,0FBH,0D4H,0FCH,11H

;[.WXJgN0

DB 0FCH,49H,0FCH,7FH,0FCH,0B2H

!P DJyC#e |"W0

DB 0FCH,0E1H,0FDH,0FH,0FDH,39H

a0P2dY'e4z1J0

DB 0FDH,61H,0FDH,87H,0FDH,0ABH

9i,Yg0Rm3ig&l0

DB 0FDH,0CDH,0FDH,0EDH,0FEH,0BH

kNr1z _0

DB 0FEH,27H,0FEH,42H,0FEH,5BH

bx@Xr5T[3i0

DB 0FEH,73H,0FEH,8AH,0FEH,9FH

"Rq q oi"x;U0

DB 0FEH,0B3H,0FEH,0C6H,0FEH,0D8H

FEIL6?;i"Z0

DB 0FEH,0E9H,0FEH,0F9H,0FFH,08H电子园51单片机学习网(iHJm|3t)JuF8o


DB 0FFH,16H,0FFH,24H,0FFH,30H

,b^1O2vX RVN.y0

DB 0FFH,3CH,0FFH,47H,0FFH,52H电子园51单片机学习网 QFj0]8P(kf,vS3I A


DB 0FFH,5CH,0FFH,66H,0FFH,6FH

{p~ R![s0

DB 0FFH,77H,0FFH,7FH,0FFH,86H电子园51单片机学习网/p.[4g"xppF#O6k g


ORG0200H ;音长子程序

.bO B ?$\3|I0

LONG: ADD A,#0FH ;使查表正确

e%j8X\+Am.g0

MOVC A,@A+PC;取出定时器T1应中断的次数

N\3\9r.P}(?b0

MOV R4,A ;T1应中断的次数存入R4

-Q"h/[4EVk8P0

MOV TH1,41H电子园51单片机学习网*H/ej#F A


MOV TL1,40H电子园51单片机学习网7H#i%Vt'q ^P;p


SETB TR1电子园51单片机学习网.|'_5D lO


SETB ET1电子园51单片机学习网A%d,Q0t5e3z


CJNE R4,#00H,$

bc@S7CK0

RET ;音长子程序结束

y_D#UhUu-u8J0

TAB2: DB 01,02,04,06 ;应中断的次数

c0N&F(P.B1K)[4V0

DB 08,10,12,14电子园51单片机学习网2s w^f W"b


DB 16,20,24,28电子园51单片机学习网Az2h`ZY.gD


DB 32,40,48,64

e-qx]EGI0

ORG0300H ;乐曲字节数据表电子园51单片机学习网qN*u*P0TxYwR


TAB: DB 00H,04H,00H,04H,08H,04H,0DH,08H,0DH,04H电子园51单片机学习网'h egK\"h


DB 0DH,08H,11H,04H,0FH,08H,0DH,04H

5K5Uih7Rg0

DB 0FH,08H,11H,02H,0FH,02H,0DH,08H,0DH,04H电子园51单片机学习网|7?t @&qq+v


DB 11H,08H,14H,04H,16H,0DH,16H,04H电子园51单片机学习网}^r QFRWca


DB 14H,08H,11H,04H,11H,08H,0DH,04H电子园51单片机学习网2]|(q[C^W)J


DB 0FH,08H,0DH,04H,0FH,08H,11H,02H,0FH,02H

}K3u(OIC5Li0

DB 0DH,08H,0AH,04H,0AH,08H,08H,04H电子园51单片机学习网 _*t'v"Q"k%yw


DB 0DH,0CH,00H,04H,16H,04H,14H,08H,11H,04H

l-Z|3^V3[si.y0

DB 11H,08H,0DH,04H,0FH,08H,0DH,04H

o eY_w?+Q$nAy ih0

DB 0FH,08H,16H,04H,14H,08H,11H,04H电子园51单片机学习网*wm.[/^,Ge6B


DB 11H,08H,14H,04H,16H,0DH,19H,04H

aE Le&m0

DB 14H,08H,11H,04H,11H,08H,0DH,04H电子园51单片机学习网+ruf/q7Ym ]U


DB 0FH,08H,0DH,04H,0FH,08H,11H,02H,0FH,02H电子园51单片机学习网'j1Tf]~'R"F


DB 0DH,08H,0AH,04H,0AH,08H,08H,04H电子园51单片机学习网#cJ!g%Q:jyU


DB 0DH,0CH,00H,04H,00H,04H

bG`jma7P j*hn0

DB 00H,0FH ;结束标记

"f+W EXa f0

END

;ji{|!lO B``:@En0

参考文献:电子园51单片机学习网/OXx1P6k&E


[1]朱福渠,周瑾.电子乐器及其电路原理[M].北京:科学普及出版社,1987.6-12

,{(o"B$n+Tm0

[2]周航慈.单片机应用程序设计技术(修订版)[M].北京:北京:北京航空航天大学出版社,2002.47电子园51单片机学习网"jd Z5sNl

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条