|
基于STC 89C52单片机的七彩迷你音乐盒。在单片机最小系统的基础上,对其他两个I/O口连接硬件电路。P1.0接一个七彩快闪LED灯。P1.5口接一个NPN型三极管的放大电路,再连接一个无源蜂鸣器(用来播放乐曲)。 Ted tmX$ 这样一个迷你音乐盒就完成了。硬件电路非常简单,其中单片机任意一个I/O口都可以作为乐曲的输出,信号经过NPN三极管放大驱动蜂鸣器发出电子乐曲。 !]9qQ7+R% 紧接着就是为单片机设计运行的程序了,这里我用汇编写了一段《生日快乐》的程序。大家可以仿照,我的思路修改乐曲。 DZ $O% DIY手记:用C52这么大块头的单片机,确实很浪费。因为一共有32个I/O引脚,设计音乐盒只用了其中的两个,非常的浪费。大家可以用其他的单片机代替,例如16引脚的单片机。价格相对会便宜一点。 OlptO60{ ] 单片机汇编源代码分享: ~]Av$S ;\f0II3 org 0000h +6~zMKp ajmp main !b+!] 2~g} org 000bh z_#HJ}R= jmp tim0 :o87<)
_F org 0030h tkff\W[JU main: ;主程序 kpy)kS setb p1.1 "HwlN_PA clr p1.4 Nx+5r p setb p3.0 i7rk%q mov tmod,#01h ;设定时方式 wzmQRn;s mov ie,#82h ;开中断 *5 \'$;Rg start0: @7;}6,) mov 30h,#00h ; naA8RD5/ next:mov a,30h }IdkXAB. mov dptr,#table ynf!1!4 movc a,@a+dptr ;查表取音调和节拍 (]VY==t~ mov r2,a G)f!AuN= jz end0 ;为零,不进行处理. ^rO!- anl a,#0fh uJ fXe mov r5,a ;将节拍存入R5 \IEuu^ mov a,r2 C[l5[DpH swap a pB]*cd B? anl a,#0fh l>hvWK[ ?I jnz sing ;根据音调决定是否演奏. U-$nwji clr tr0 KdzV^6K<c jmp d1 `Tk~?aY sing:dec a 'Q=(1a11 mov 22h,a ;将音调存入22H. Ls3r( Tf rl a DMSC(Sz mov dptr,#table1 /%F,
movc a,@a+dptr ;根据音调决定定时器初值. T.B7QAI. H mov th0,a ;放入TH0 <xrya_R? mov 21h,a gR_Exs'K mov a,22h L)S
V?FBx rl a K( ?p]wh inc a et(AO)uv6 movc a,@a+dptr ?k@;,l :s mov tl0,a ;放入TL0 (\wV)c9 mov 20h,a 3Tc90p l*t setb tr0 ;启动定时 1zCgPiAem d1: call delay <K>qK]|C inc 30h 4af^SZ)l jmp next v`Ja Bn end0:clr tr0 _Kh8
<$h jmp start0 v-"nyy-&Z tim0: ;定时器中断服务程序 /YvwQ push acc H
=&K_ push psw |@f\[v9` mov tl0,20h ;重赋初值. g:6`1C mov th0,21h o,?h}@ cpl p1.7 }D3hP|.X pop psw znIS2{p/` pop acc n;:C{5 retidelay:mov r7,#02h ;延时子程序 ~LP5hL d2: mov r4,#130 myd:"u,}9 d3: mov r3,#248 Um*&S.y djnz r3,$ (B?ZUXM, djnz r4,d3 *<h )q)HS djnz r7,d2 afu!.}4Ct djnz r5,delay 5aXE^.` ret 0< }BSv table1: ;决定音调的定时初值. EN8xn9M? dw 64260,64400,64524,64580 #>sIXY dw 64684,64777,64820,64898 i.KRw6 dw 64968,65030,65058,65110 _kBx2>qQ dw 65157,65178,65217 YTr+"\CkA table: ;决定音调和节拍的表格,不同的歌曲只是此表不同 .&8a ;Q?c ;1 @Q&k6.{4Z db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h %&s4YD/{ ;2 U8,pe;/ln` db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h ,e
GF~ ;3 58eO|c( db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h a(G}< ;4 7?);wh 7` db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00 :YLurng/] end |
|