单片机,用一个蜂鸣器可以演奏出音乐吗?

能编写音乐吗

当然可以了,以下是兰花草的音乐播放程序,你可听听看。
我用Proteus仿真过了,可行。你也可以试试看。
SPK EQU P1.2 ;位定义
ORG 0
LJMP START
ORG 0030H ;伪指令,指定程序从0030H开始存放
START:
MOV R3,#00H ;R3清零(作为查表偏移)
NEXT: MOV A,R3
MOV DPTR,#TABLE ;查表
MOVC A,@A+DPTR
JZ START ;如果A是0就重来
MOV R7,A ;R7是查表的来的代码字节
INC R3 ;读下一个代码字节
MOV A,R3
MOVC A,@A+DPTR
MOV R2,A
ACALL SONG
INC R3
SJMP NEXT;歌曲播放子程序
SONG:
MOV A,R2 ;取出节拍
RL A ;左移节拍
JNZ KEEP ;如果节拍为0就让它等于1
MOV A,#01H
KEEP:
MOV R2,A
REPEAT:
ACALL EIGHTH
DJNZ R2,REPEAT
RET;产生1/8拍延时子程序
EIGHTH: MOV A,R7 ;查表取出廷时参数,保存到R4
MOV DPTR,#DELAY_T
MOVC A,@A+DPTR
MOV R4,A
MOV A,R7 ;查表取出1/8拍周期数,保存到R5
MOV DPTR,#S_PARA
MOVC A,@A+DPTR
MOV R5,A
NEXTCYC:
ACALL SOUND
DJNZ R5,NEXTCYC
RET
;=== 发声子程序 ===
SOUND: SETB SPK
ACALL SDELAY
CLR SPK
ACALL SDELAY
RET;延时子程序
SDELAY: MOV A,R4 ; 廷时值在R4内
MOV R0,A
XL2: MOV R1,#03H
DL1: NOP
DJNZ R1,DL1
DJNZ R0,XL2
RET
;1/8拍周期表
S_PARA:DS 1DH
DB 15H,16H,00
DB 19H,00H,1CH,00H,1FH,21H,00H,25H
DB 00H,29H,2CH,00H,31H,34H,37H,00H
DB 3EH,41H,00H,49H,00H,52H,57H,00H
DB 62H
;延时参数表
DELAY_T:DS 1DH
DB 7EH,77H,00H
DB 6AH,00H,5EH,00H,54H,4FH,00H,46H
DB 00H,3FH,3BH,00H,35H,32H,2FH,00H
DB 2AH,27H,00H,23H,00H,1FH,1DH,0C0H
DB 1AH
;歌曲表
TABLE:DW 2202H,2902H,2902H,2902H,2906H,2702H ;我从山中来
DW 2502H,2702H,2502H,2402H,2208H ;带着兰花草
DW 2E02H,2E02H,2E02H,2E02H,2E06H,2C02H ;种在小园中
DW 2902H,2C02H,2D02H,2A02H,2908H ;祈祷花开早
DW 2902H,2E02H,2E02H,2C02H,2906H,2702H ;一日看三回
DW 2502H,2702H,2502H,2402H,2206H,1D02H ;看得花时过
DW 1D02H,2502H,2502H,2402H,2206H,2902H ;兰花却依然
DW 2702H,2502H,2402H,2002H,2208H ;苞也无一个
DW 0000H
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-09
可以,当要用音乐蜂鸣器,一般需要用2个端口驱动,只要按照一定控制好蜂鸣器的驱动频率就可以演奏出你想要的音乐本回答被提问者采纳
第2个回答  2010-07-09
当然可以演奏音乐,可以当电子琴用,但一般来说同一时间单片机只能发出一个频率的声音,当然速度特快的可以另论.
第3个回答  2010-07-11
完全可以。效果差点而已。蜂鸣器口上半贴个纸条可以有效提高效果。
第4个回答  2010-07-09
可以播放录制好的音乐。
理论上可以。你说的编写 是当电子琴一样演奏吗? 还是直接编写好啊。理论上都是可以的,不过硬件的简单化,会增加程序的难度。
相似回答