导航:首页 > 操作系统 > 单片机6首歌曲

单片机6首歌曲

发布时间:2023-03-05 02:07:50

‘壹’ 单片机设计音乐播放器程序和仿真图(用汇编语言)急求~谢谢!!!

NUMEQU30H
UPEQUP3.6
DNEQUP3.7
ORG0000H
AJMPSTART;Fosc=12MHz
ORG000BH;T0中断入口地址
AJMPINT_T0
ORG001BH;T1中断入口地址
AJMPINT_T1

START:
MOVSP,#60H
MOVTMOD,#11H
MOVIE,#8AH
MOVIP,#08H ;T1中断优先于T0中断
MOV TH1,#3CH
MOV TL1,#0BH ;以上为系统初始化,T=60ms

W1: MOV P2,#01110001B;等待提示"F" ,01110001
LCALL GETKEY
CJNEA,#0FFH,W1
MOVA,B
CJNEA,#0AH,W2
LCALLKEY_A;输入键是'A',转KEY_A
SJMP W1

W2: CJNE A,#0BH,W3
LCALLKEY_B;输入键是'B',转KEY_B

W3: CJNE A,#0CH,W4
LCALLKEY_C;输入键是'C',转KEY_C
W4: CJNE A,#0DH,W5
LCALLKEY_D
SJMP W1;输入键是'D',转KEY_D
W5: CJNEA,#0EH,W6 ;下一首
INCNUM
MOVA,NUM
CJNEA,#4,W51
W51:
JCW52
MOVNUM,#0
W52:
MOVA,NUM
SJMPD0
W6: CJNEA,#0FH,W7 ;上一首
MOVA,NUM
JNZW61
MOVNUM,#4
W61:
DECNUM
MOVA,NUM
SJMPD0
W7:
SJMP W1
KEY_A:;从1~4按顺序播放
LCALL MUSIC1;乐曲《我和你》
LCALL MUSIC2;乐曲《万水千山总是情》
LCALL MUSIC3;乐曲《送别》
LCALL MUSIC4;乐曲《北京欢迎您》
RET
KEY_B:;从1~4循环播放
T11: LCALL KEY_A
SJMP T11
RET
KEY_C:;循环播放某一乐曲
T3: LCALL GETWORD
CJNE A,#0FFH,T3
MOV A,B
D0:
JNZD1
SJMP E0
D1: DECA
JNZD2
SJMP E1
D2: DECA
JNZE3
SJMP E2
E0: LCALL MUSIC1;乐曲《我和你》
SJMP E0
E1: LCALL MUSIC2;乐曲《万水千山总是情》
SJMP E1
E2: LCALL MUSIC3;乐曲《送别》
SJMP E2
E3: LCALL MUSIC4;乐曲《北京欢迎您》
SJMP E3
RET
KEY_D:;从某一乐曲开始播放,播放完后停止
T2: LCALL GETWORD
CJNE A,#0FFH,T2
MOV A,B
CJNE A,#00H,B1
SJMP C0
B1: CJNE A,#01H,B2
SJMP C1
B2: CJNE A,#02H,C3
SJMP C2
C0: LCALL MUSIC1;乐曲《我和你》
C1: LCALL MUSIC2;乐曲《万水千山总是情》
C2: LCALL MUSIC3;乐曲《送别》
C3: LCALL MUSIC4;乐曲《北京欢迎您》
RET
MUSIC1:;第一首《我和你》
MOVP2,#00000110B ;显示1,00000110
MOVR5,#11111001B
MOV52H,#HIGHTABLE10
MOV53H,#LOWTABLE10
MOVNUM,#0
LCALLmusic
RET
MUSIC2: ;第二首《万水千山总是情》
MOV P2,#01011011B ;显示2,01011011
MOV R5,#10100100B
MOV52H,#HIGHTABLE20
MOV53H,#LOWTABLE20
MOVNUM,#1
LCALL music
RET
MUSIC3: ;第三首《送别》
MOV P2,#01001111B ;显示3,01001111
MOV R5,#10110000B
MOV52H,#HIGHTABLE30
MOV53H,#LOWTABLE30
MOVNUM,#2
LCALL music
RET
MUSIC4: ;第四首《北京欢迎您》
MOV P2,#01100110B ;显示4,01100110
MOV R5,#10011001B
MOV52H,#HIGHTABLE40
MOV53H,#LOWTABLE40
MOVNUM,#3
LCALL music
RET
music: MOVR3,#00H ;音乐解码器
NEXT20:
MOVA,P3
ORLA,#0C0H
MOVP3,A
MOVA,P3
CPLA
ANLA,#0C0H
JZNEXT21
POPACC
POPACC
LJMPW1
RET
NEXT21:
MOVA,R3
MOV DPH,52H
MOV DPL,53H
MOVC A,@A+DPTR
MOV R2,A
JZ STOP
ANL A,#0FH
MOV R1,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
JMP W11
;----------------------------------------------------------
SING:
DEC A
MOV22H,A
RL A
MOVDPTR,#TABLE00
MOVC A,@A+DPTR
MOV TH0,A
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
SETB TR0
SETB TR1
W11:
LCALL DELAY3
INC R3
LJMP NEXT20
;-----------------------------------------------------------
STOP:
CLR TR0
CLR TR1
RET
;***************************************************
;定时器0中断子程序
;***************************************************
INT_T0:
CLR TR0
MOV TL0,20H
MOV TH0,21H
CPL P3.0
SETB TR0
RETI
;***************************************************
;定时器1中断子程序
;***************************************************
INT_T1:
CLRTR1
CLRTR0
LCALL KEY_E
MOVTH1,#3CH
MOVTL1,#0BH
DJNZ 60H,OUT
MOV 60H,#20
OUT:
SETB TR1
RETI
KEY_E:
JB P3.1,L2 ;中断键盘检测
LCALL DELAY2 ;消除抖动
JB P3.1,L2 ;如果是高电平就跳到L2
JNBP3.1,$ ;如果仍然是低电平就执行中断程序
MOV P2,#0111100B ;让LED显示E,01111001
L3: JB P3.1,$ ;检测低电平,直到低电平时才跳出该指令
LCALL DELAY2
JB P3.1,L3
JNBP3.1,$ ;如果再来一个高电平才跳出中断
MOV P2,R5
L2: SETBTR0
RET
GETKEY: ;读ABCD键盘子程序
SA: JB P1.0,SB ;读A,是高电平表示没有按键,跳转到SB
LCALL DELAY2
JB P1.0,SA
JNB P1.0,$
MOV P2,#01110111B ;显示A,01110111
MOV R5,#10001000B
MOV A,#0FFH
MOV B,#0AH
RET
SB: JB P1.1,C11 ;读B,是高电平表示没有按键按下,跳转到C11
LCALL DELAY2
JB P1.1,SB
JNB P1.1,$
MOV P2,#01111100B ;显示B,01111100
MOV R5,#10000011B
MOV A,#0FFH
MOV B,#0BH
RET
C11:JB P1.2,ED1 ;读C
LCALL DELAY2
JB P1.2,C11
JNBP1.2,$
MOV P2,#00111001B ;显示C,00111001
MOV R5,#11000110B
MOV A,#0FFH
MOV B,#0CH
RET
ED1:
JB P1.3,L0 ;读D
LCALL DELAY2
JB P1.3,ED1
JNBP1.3,$
MOV P2,#01011110B ;显示D,01011110
MOV R5,#10100001B
MOV A,#0FFH
MOV B,#0DH
L0: JBUP,L01
LCALLDELAY2
JBUP,L01
JNBUP,$
MOVA,#0FFH
MOVB,#0EH
RET
L01:
JBDN,L02
LCALLDELAY2
JBDN,L02
JNBDN,$
MOVA,#0FFH
MOVB,#0FH
L02:
RET
GETWORD:;读音乐序号子程序
S1: JB P1.4,S2 ;读1键
LCALL DELAY2
JB P1.4,S1
JNB P1.4,$
MOV P2,#00000110B ;显示1
MOV R5,#11111001B
MOV A,#0FFH
MOV B,#00H
RET
S2: JB P1.5,S3 ;读2键
LCALL DELAY2
JB P1.5,S2
JNB P1.5,$
MOV P2,#01011011B ;显示2
MOV R5,#10100100B
MOV A,#0FFH
MOV B,#01H
RET
S3: JB P1.6,S4 ;读3键
LCALL DELAY2
JB P1.6,S3
JNB P1.6,$
MOV P2,#01001111B ;显示3
MOV R5,#10110000B
MOV A,#0FFH
MOV B,#02H
RET
S4: JB P1.7,L1 ;读4键
LCALL DELAY2
JB P1.7,S1
JNB P1.7,$
MOV P2,#01100110B ;显示4
MOV R5,#10011001B
MOV A,#0FFH
MOV B,#03H
L1: RET
DELAY:;延时子程序
PUSH0;保存现场
PUSH1
MOV0,#0H
DELAY1:MOV1,#0H
DJNZ1,$
DJNZ0,DELAY1
POP1;恢复现场
POP0
RET
DELAY2: MOV 41H,#100 ;延时子程序2
F1: MOV 42H,#250
DJNZ 42H,$
DJNZ 41H,F1
RET
DELAY3: ;延时子程序3
MOV R7,#2
W22: MOV R4,#125
W33: MOV R0,248
DJNZ R0,$
DJNZ R4,W33
DJNZ R7,W22
DJNZ R1,DELAY3
RET
TABLE00: ;频率表
DW64260,64400,64524,64580;简码值低音5,低音6,低音7,1
DW64684,64777,64820,64898;简码值2,3,4,5
DW64968,65030,65058,65110;简码值6,7,高音1,高音
DW65157,65178,65217;简码值高音3,高音4,高音5
;--------------------------------------------------------------------
;第一首《我和你》
;--------------------------------------------------------------------
TABLE10:DB64H,82H,42H,48H
DB54H,64H,18H
DB44H,54H,64H,84H
DB5CH
DB64H,84H,44H,04H,42H
DB54H,64H,28H
DB54H,14H,54H,64H
DB4CH
DB98H,88H
DB98H,48H
DB64H,24H,64H,84H
DB5CH
DB64H,82H,42H,48H
DB54H,64H,28H
DB54H,14H,54H,34H
DB4CH
DB00H
;--------------------------------------------------------------------
;第二首《万水千山总是情》
;--------------------------------------------------------------------
TABLE20: DB64H,74H,84H,04H,82H,94H,84H,6CH
DB54H,44H,04H,62H,54H,44H,2CH
DB24H,18H,44H,54H,64H,84H,94H,64H,5CH
DB64H,74H,84H,04H,82H,94H,84H,6CH
DB54H,44H,04H,62H,54H,44H,2CH
DB24H,18H,44H,64H,54H,04H,42H,24H,44H,4CH
DB64H,84H,9CH,0A4H,94H,74H,84H,04H,92H,8CH,64H,88H
DB64H,84H,9CH,0A4H,0A4H,94H,84H,64H,5CH
DB64H,74H,84H,04H,82H,94H,84H,6CH
DB54H,44H,04H,62H,54H,44H,2CH
DB24H,18H,44H,64H,54H,42H,24,44H,4CH
DB00H
;--------------------------------------------------------------------
;第三首《送别》
;--------------------------------------------------------------------
TABLE30:DB84H,62H,82H,0B8H
DB94H,0B2H,92H,88H
DB84H,42H,52H,64H,52H,44H
DB5CH
DB84H,62H,82H,0B4H,04H,82H
DB94H,0B4H,88H
DB84H,52H,62H,74H,04H,32H
DB4CH
DB94H,0B4H,0B8H
DB0A4H,92H,0A2H,0B8H
DB92H,0A2H,0B2H,92H,92H,82H,62H,42H
DB5CH
DB84H,62H,82H,0B4H,04H,0A2H
DB94H,0B4H,88H
DB84H,52H,62H,74H,04H,32H
DB4CH
DB00H
;--------------------------------------------------------------------
;第四首《北京欢迎您》
;--------------------------------------------------------------------
TABLE40:DB62H,82H,62H,52H,12H
DB62H,52H,12H,64H
DB62H,52H,22H,42H
DB62H,54H
DB52H,42H,22H,42H
DB52H,62H,82H,52H
DB62H,92H,82H,12H
DB52H,44H
DB52H,42H,22H,42H
DB52H,62H,82H,52H
DB62H,92H,82H,82H
DB68H
DB52H,62H,52H,42H
DB82H,92H,64H
DB22H,62H,64H
DB54H,64H
DB64H,84H
DB0B2H,82H,94H
DB02H,92H,82H,62H
DB62H,82H,88H
DB00H
END

‘贰’ 单片机 音乐程序编写 歌曲《小星星》

只有音乐发声汇编程序,没有加入LED灯,供参考。数据代码已改为小星星发声
;**********************************************
ORG
0000H
SJMP
MAIN
ORG
0BH
AJMP
TIME0
;*************主程序************************
MAIN:
MOV
SP,#60
MOV
TMOD,#01H
;T0定时工作方式
MOV
IE,#82H
;CPU
中断允许,T0中断允许
START0:
MOV
30H,#00H
;TABLE
相对地址指针
NEXT:
MOV
A,30H

MOV
DPTR,#TABLE
;到TABLE处取
简谱码
节拍

MOVC
A,@A+DPTR
MOV
R2,A
;取到的简谱码
节拍码
暂存于R2中
JZ
ENDF
;取到
00
结束
ANL
A,#0FH
;否,取低四位
节拍

MOV
R5,A
;将节拍码存于R5中
MOV
A,R2
;简谱码
节拍

给A
SWAP
A
;高4位

低4位
交换
ANL
A,#0FH
;取简谱

JNZ
SING
;取到的简谱
码不是0,则去发声
CLR
TR0
;取到0
则不发声
SJMP
DLY1
;节拍延时子程序(
随节拍码变化,延时时间不同)
;---------------发声-----------------------
SING:
DEC
A
;取到的简谱码减1
;(简谱码计数值16位数据存储首地址从TABLE1
《相对地址》0处开始放起,所以要减1)
MOV
22H,A
;存入(22H)中
RL
A
;乘2
因为取的数据占两字节(16位)
;所以指针增加量要乘2
MOV
DPTR,#TABLE1
;...........简谱码转换为相应定时器16位计数值.............
MOVC
A,@A+DPTR
;到TABLE1取相应的高字节计数值
MOV
TH0,A
;高字节计数值存入TH0和(21H)中
MOV
21H,A
MOV
A,22H
;减1的简谱码给A
RL
A
;乘2
因为取的数据占两字节(16位)
;所以指针增加量要乘2
INC
A
;A
增加
取下一个字节计数值
;...........简谱码转换为相应定时器16位计数值.............
MOVC
A,@A+DPTR
;到TABLE1取相应的低字节计数值
MOV
TL0,A
;低字节计数值存入TL0和(20H)中
MOV
20H,A
SETB
TR0
;启动T0定时器让喇叭发出不同频率声音
;---------------节拍延时-------------------
DLY1:
ACALL
DELAY
;基本单位时间为1/4拍
187ms
INC
30H
;取下一个简谱码
节拍

SJMP
NEXT
;---------------歌放完结束---------------
ENDF:
CLR
TR0
;关闭T0定时器
AJMP
START0
;反复循环
;****T0中断子程序(用来驱动喇叭发出不同频率声音)**************
TIME0:
PUSH
ACC
PUSH
PSW
MOV
TL0,20H
;重装计数值
MOV
TH0,21H
CPL
P3.7
;驱动发声
POP
PSW
POP
ACC
RETI
;******************节拍延时187ms****************************
DELAY:
MOV
R7,#187
;187ms延时子程序
DLY2:
MOV
R4,#02
DLY3:
MOV
R3,#248
DJNZ
R3,$
DJNZ
R4,DLY3
DJNZ
R7,DLY2
DJNZ
R5,DELAY
RET
;*******音符T值表(用来让定时器发出不同的频率)**DW
表示一个
计数值
占两个字节存储单元***************
TABLE1:
DW
64260,64400,64524,64580,64684
;低音SO
低音LA
低音SI
/中音DO
中音RE
DW
64777,64820,64898,64968,65030
;中音MI
中音FA
中音SO
中音LA
中音SI
DW
65058,65110,65157,65178,65217
;高音DO
高音RE
高音MI
高音FA
高音SO
;*********简谱码
节拍码(高4位简谱码
,低4位节拍码)*************
TABLE:
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h

;
6
6
5
-
DB
74H,74H,63H,63H;
4
4
3
3
DB
52H,52H,48h
;
2
2
1-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h;
3
3
2-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h
;
3
3
2-
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h;
6
6
5
-


DB
74H,74H,63H,63H;
4
4
3
3
DB
52H,52H,48h;
2
2
1-
END
加入了LED灯,水平有限,效果有点不太好
;**********************************************
ORG
0000H
SJMP
MAIN
ORG
0BH
AJMP
TIME0
;*************主程序************************
MAIN:
MOV
SP,#60
MOV
TMOD,#01H
;TO定时工作方式
MOV
IE,#82H
;CPU
中断允许,TO中断允许
START0:
MOV
30H,#00H
;TABLE
相对地址指针
NEXT:
MOV
A,30H

MOV
DPTR,#TABLE
;到TABLE处取
简谱码
节拍

MOVC
A,@A+DPTR
MOV
R2,A
;取到的简谱码
节拍码
暂存于R2中
JZ
ENDF
;取到
00
结束
ANL
A,#0FH
;否,取低四位
节拍

MOV
R5,A
;将节拍码存于R5中
MOV
A,R2
;简谱码
节拍

给A
SWAP
A
;高4位

低4位
交换
ANL
A,#0FH
;取简谱

JNZ
SING
;取到的简谱
码不是0,则去发声
CLR
TR0
;取到0
则不发声
SJMP
DLY1
;节拍延时子程序(
随节拍码变化,延时时间不同)
;---------------发声-----------------------
SING:
DEC
A
;取到的简谱码减1
;(简谱码计数值16位数据存储首地址从TABLE1
《相对地址》0处开始放起,所以要减1)
MOV
22H,A
;存入(22H)中
RL
A
;乘2
因为取的数据占两字节(16位)
;所以指针增加量要乘2
MOV
DPTR,#TABLE1
;...........简谱码转换为相应定时器16位计数值.............
MOVC
A,@A+DPTR
;到TABLE1取相应的高字节计数值
MOV
TH0,A
;高字节计数值存入TH0和(21H)中
MOV
21H,A
MOV
A,22H
;减1的简谱码给A
RL
A
;乘2
因为取的数据占两字节(16位)
;所以指针增加量要乘2
INC
A
;A
增加
取下一个字节计数值
;...........简谱码转换为相应定时器16位计数值.............
MOVC
A,@A+DPTR
;到TABLE1取相应的低字节计数值
MOV
TL0,A
;低字节计数值存入TL0和(20H)中
MOV
20H,A
SETB
TR0
;启动T0定时器让喇叭发出不同频率声音
;---------------节拍延时-------------------
DLY1:
ACALL
DELAY
;基本单位时间为1/4拍
187ms
INC
30H
;取下一个简谱码
节拍

CPL
P1.0
LED灯
闪烁
CPL
P1.1

CPL
P1.2
CPL
P1.3
CPL
P1.4
CPL
P1.5
CPL
P1.6
CPL
P1.7
SJMP
NEXT
;---------------歌放完结束---------------
ENDF:
CLR
TR0
;关闭T0定时器
AJMP
START0
;反复循环
;****T0中断子程序(用来驱动喇叭发出不同频率声音)**************
TIME0:
PUSH
ACC
PUSH
PSW
MOV
TL0,20H
;重装计数值
MOV
TH0,21H
CPL
P3.7
;驱动发声
POP
PSW
POP
ACC
RETI
;******************节拍延时187ms****************************
DELAY:
MOV
R7,#187
;187ms延时子程序
DLY2:
MOV
R4,#02
DLY3:
MOV
R3,#248
DJNZ
R3,$
DJNZ
R4,DLY3
DJNZ
R7,DLY2
DJNZ
R5,DELAY
RET
;*******音符T值表(用来让定时器发出不同的频率)**DW
表示一个
计数值
占两个字节存储单元***************
TABLE1:
DW
64260,64400,64524,64580,64684
;低音SO
低音LA
低音SI
/中音DO
中音RE
DW
64777,64820,64898,64968,65030
;中音MI
中音FA
中音SO
中音LA
中音SI
DW
65058,65110,65157,65178,65217
;高音DO
高音RE
高音MI
高音FA
高音SO
;*********简谱码
节拍码(高位简谱码
,低位节拍码)*************
TABLE:
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h
;
6
6
5
--表示有节拍
DB
74H,74H,63H,63H
;
4
4
3
3
DB
52H,52H,48h
;
2
2
1-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h
;
3
3
2-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h
;
3
3
2-
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h
;
6
6
5
-


DB
74H,74H,63H,63H
;
4
4
3
3
DB
52H,52H,48h
;
2
2
1-
END

‘叁’ 利用单片机播放音乐存放几首歌

利用单片机播放音乐存放三首歌。可以播放储存的三首歌曲,分别为《挥着翅膀的女孩》、《同一首歌》、《两只蝴蝶》,其他歌曲可以通过参考资料中的软件编码后写入单片机中,按键共有两个,一个是复位按键,按下后直接从第一首歌开始播放。另一个是暂停键,按下后暂停,指示灯点亮。

‘肆’ 单片机做的音乐盒有没有可以修改音乐的C语言程序啊

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Count;

sbit Speak =P1^2; //蜂鸣器器控制脚
/*以下数组是音符编码*/
unsigned char code SONG[] ={ //祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
//路边的野华不要采
0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,

};

/********************************************************************
* 名称 : Time0_Init()
* 功能 : 定时器的初始化,定时时间可用光盘中软件计算,11.0592MZ晶振,10ms
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0xDC;
TL0 = 0x00;
}

/********************************************************************
* 名称 : Time0_Int()
* 功能 : 定时器中断,中断中实现 Count 加一
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Int() interrupt 1
{
TH0 = 0xDC;
TL0 = 0x00;
Count++; //长度加1
}

/********************************************************************
* 名称 : Delay_xMs()
* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.
* 输入 : x
* 输出 : 无
***********************************************************************/
void Delay_xMs(uint x)
{
uint i,j;
for(i=0; i<x; i++)
{
for(j=0; j<3; j++);
}
}

/********************************************************************
* 名称 : Play_Song()
* 功能 : 播放蜂鸣器控制程序
* 输入 : i (选择播放哪首歌曲,0为“祝你平安”,1为“路边的野花你不要采”
* 输出 : 无
***********************************************************************/
void Play_Song(uchar i)
{
uchar Temp1,Temp2;
uint Addr;
Count = 0; //中断计数器清0
Addr = i * 217;
while(1)
{
Temp1 = SONG[Addr++];
if (Temp1 == 0xFF) //休止符
{
TR0 = 0;
Delay_xMs(100);
}
else if (Temp1 == 0x00) //歌曲结束符
{
return;
}
else
{
Temp2 = SONG[Addr++];
TR0 = 1;
while(1)
{
Speak = ~Speak;
Delay_xMs(Temp1);
if(Temp2 == Count)
{
Count = 0;
break;
}
}
}
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
Time0_Init(); //定时器0中断初始化
while(1)
{
Play_Song(0); //Play_Song(0)为祝你平安 Play_Song(1)为路边的野花你不要裁
}
}
看看

‘伍’ 单片机歌曲代码

#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
uchar * TABLE ;
code uint TABLE1 [15]={64260,64400,64524,64580,
64684,64777,64820,64898,
64968,65030,65058,65110,
65157,65178,65217};
code uchar SONG [ ]={
//1. 迟来的爱
};
code uchar SONG1 [ ]={
//2.两只蝴蝶
};
code uchar SONG3 [ ]={
//4.一个师傅三个徒弟
};

uchar hjsz;
uchar ljsz;
uchar jpm;
uchar yfm;
uchar t0 =0;
uint i=0;
sbit Speaker =P1^0;
uint k;
void Delay1()
{
for ( k=0;k<20000;k++);
}
void Lignt( )
{ uchar t;
for(t=0;t<10;t++)
{
P2=0xff;
Delay1();
P2=0x00;
Delay1();
}
}
void Lignt1( )
{
P2=0xaa;
Delay1();
P2=0x55;
Delay1();
}
void Delay(uchar t0)//延时
{
while(t0--) //决定节拍
Lignt1();
}
void Delay2(uchar w0)//延时
{
while(w0--) //决定节拍
Lignt();
}
void T0Int() interrupt 1//TIMER0
{
TL0 = ljsz;
TH0 = hjsz;
Speaker=!Speaker;
}
void ExtInt0() interrupt 0//INT0
{
if(t0>10)
t0=0;
i=0; // 全局变量,指向歌谱的第1个
switch(t0++)
{
case 0 : TABLE=SONG;break; //选择第1首
case 1 : TABLE=SONG1;break;//选择第2首
case 2 : TABLE=SONG2;break;//选择第3首
case 3 : TABLE=SONG3;break;//选择第4首
case 4 : TABLE=SONG4;break;//选择第5首
case 5 : TABLE=SONG5;break;//选择第6首
case 6 : TABLE=SONG6;break;//选择第7首
case 7 : TABLE=SONG7;break;//选择第8首
case 8 : TABLE=SONG8;break;//选择第9首
case 9 : TABLE=SONG9;break;//选择第10首
}
}
void songsing()//发音程序
{
i=0;
while(TABLE[i])
{
jpm=TABLE[i]&0x0f; //节拍值
yfm=(TABLE[i]>>0x04)&0x0f;//简谱值
if(yfm) //简谱为1,取计数值
{
yfm=yfm-1;
hjsz=(uchar)(TABLE1[yfm]>>0x08);//取计数值高字节
TH0 = hjsz;
ljsz=(uchar)(TABLE1[yfm]); //取计数值低字节
TL0 = ljsz;
TR0 = 1; //启动TIMER0
}
else TR0 = 0; //简谱为0,不发音
Delay(jpm); //节拍延时
i++;
}
}
void main(void)
{
TMOD =0X01;//设TIMER0在MODE1
TCON =0X01;//外部中断INT0,下降沿触发
IE =0x83;//开中断(INT0,TIMER0)
IP =0x00;//设置中断优先级
TABLE=SONG0;
while(1)
{
Lignt( );
songsing();//调用发音程序
TR0 = 0;//停止TIMER0
Delay2(1);
TABLE=SONG0;// 更改歌曲0
songsing();
}
}

‘陆’ 谁能给我几首51单片机流行歌曲 的源代码!

<!--[if !supportLists]-->2. <!--[endif]-->程序代码:(以下代码奏出八月桂花香这首曲子) ORG 0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0, #0DBH MOV TL0, #0FFH ;11.0592M晶振,形成10毫秒中断 RETISTART: MOV SP, #50H MOV TH0, #0DBH MOV TL0, #0FFH MOV TMOD, #01H MOV IE, #82HMUSIC0: NOP MOV DPTR, #DAT ;表头地址送DPTR MOV 20H, #00H ;中断计数器清0MUSIC1: NOP CLR A ;A清零 MOVC A, @A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A, #0FFH, MUSIC5 ;如果不是休止符,往下执行,;以R6作为音符频率控制,唱R7节拍那么久。 LJMP MUSIC3MUSIC5: NOP MOV R6, A ;R6=18H音符的频率 INC DPTR ;DPTR加1 MOV A, #0 MOVC A, @A+DPTR ;取节拍代码送R7 MOV R7,A ;R7=30H音符发音的时间 SETB TR0 ;启动计数MUSIC2: NOP CPL P3.2 ;P3.2是音乐输出引脚 MOV A, R6 MOV R3, A ;R3=R6=18H LCALL DEL MOV A, R7 CJNE A, 20H, MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环 MOV 20H, #00H ;等于,则取下一代码 INC DPTR LJMP MUSIC1MUSIC3: NOP ;休止100毫秒 CLR TR0 MOV R2, #0DH ;R2=13MUSIC4: NOP MOV R3, #0FFH ;R3=255 LCALL DEL DJNZ R2, MUSIC4 INC DPTR LJMP MUSIC1END0: NOP MOV R2, #0FFH ;歌曲结束,延时1秒后继续MUSIC6: MOV R3, #00H LCALL DEL DJNZ R2, MUSIC6 LJMP MUSIC0DEL: NOPDEL3: MOV R4, #02H DEL4: NOP DJNZ R4, DEL4 NOP DJNZ R3, DEL3 RET NOPDAT:DB 18H, 30H, 1CH, 10H, 20H, 40H, 1CH, 10HDB 18H, 10H, 20H, 10H, 1CH, 10H, 18H, 40HDB 1CH, 20H, 20H, 20H, 1CH, 20H, 18H, 20HDB 20H, 80H, 0FFH, 20H,30H, 1CH, 10H, 18HDB 20H, 15H, 20H, 1CH, 20H, 20H, 20H, 26HDB 40H, 20H, 20H, 2BH, 20H, 26H, 20H, 20HDB 20H, 30H, 80H, 0FFH,20H, 20H, 1CH, 10HDB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20HDB 30H, 20H, 2BH, 40H, 20H, 20H, 1CH, 10HDB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20HDB 30H, 20H, 2BH, 40H, 20H, 30H, 1CH, 10HDB 18H, 20H, 15H, 20H, 1CH, 20H, 20H, 20HDB 26H, 40H, 20H, 20H, 2BH, 20H, 26H, 20HDB 20H, 20H, 30H, 80H, 20H, 30H, 1CH, 10HDB 20H, 10H, 1CH, 10H, 20H, 20H, 26H, 20HDB 2BH, 20H, 30H, 20H, 2BH, 40H, 20H, 15HDB 1FH, 05H, 20H, 10H, 1CH, 10H, 20H, 20HDB 26H, 20H, 2BH, 20H, 30H, 20H, 2BH, 40HDB 20H, 30H, 1CH, 10H, 18H, 20H, 15H, 20HDB 1CH, 20H, 20H, 20H, 26H, 40H, 20H, 20HDB 2BH, 20H, 26H, 20H, 20H, 20H, 30H, 30HDB 20H, 30H, 1CH, 10H, 18H, 40H, 1CH, 20HDB 20H, 20H, 26H, 40H, 13H, 60H, 18H, 20HDB 15H, 40H, 13H, 40H, 18H, 80H, 00HEND

‘柒’ 能提供几首单片机的歌曲代码用蜂鸣器唱的

#include <reg52.h>
#include <intrins.h>
//本例采用89C52, 晶振为11.0592MHZ
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;
//所以拿出谱子, 试探编吧!

sbit out=P2^3;
unsigned char n=0; //n为节拍常数变量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
0x20, 0x40, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x10,
0x1C, 0x10, 0x18 , 0x40,
0x1C, 0x20, 0x20 , 0x20,
0x1C, 0x20, 0x18 , 0x20,
0x20, 0x80, 0xFF , 0x20,
0x30, 0x1C, 0x10 , 0x18,
0x20, 0x15, 0x20 , 0x1C,
0x20, 0x20, 0x20 , 0x26,
0x40, 0x20, 0x20 , 0x2B,
0x20, 0x26, 0x20 , 0x20,
0x20, 0x30, 0x80 , 0xFF,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x80,
0x20, 0x30, 0x1C , 0x10,
0x20, 0x10, 0x1C , 0x10,
0x20, 0x20, 0x26 , 0x20,
0x2B, 0x20, 0x30 , 0x20,
0x2B, 0x40, 0x20 , 0x15,
0x1F, 0x05, 0x20 , 0x10,
0x1C, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x30,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x40, 0x1C , 0x20,
0x20, 0x20, 0x26 , 0x40,
0x13, 0x60, 0x18 , 0x20,
0x15, 0x40, 0x13 , 0x40,
0x18, 0x80, 0x00
};

void int0() interrupt 1 //采用中断0 控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}

void delay (unsigned char m) //控制频率延时
{
unsigned i=3*m;
while(--i);
}

void delayms(unsigned char a) //豪秒延时子程序
{
while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
}

void main()
{ unsigned char p,m; //m为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00) { i=0, delayms(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符
else {m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数
TR0=1; //开定时器1
while(n!=0) out=~out,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0; //关定时器1
}
}

阅读全文

与单片机6首歌曲相关的资料

热点内容
安卓怎么换相机 浏览:931
华为相片文件夹怎么删除重复照片 浏览:312
plc编程视频教程大全 浏览:938
直播用哪个app播放背景音乐 浏览:850
点歌机系统app在哪里下载 浏览:609
javadate类型转换string 浏览:694
RPG游戏解压后乱码 浏览:988
无线通信的几个密钥算法 浏览:644
王者荣耀app数据修复在哪里 浏览:429
基于单片机饮水机温度控制系统的设计 浏览:455
c中委托被编译后的结构 浏览:152
飞燕app怎么注销账号 浏览:895
cad命令缩小 浏览:154
linux发展史 浏览:629
服务器选用什么CPU比较好 浏览:334
明星怎么宣传安卓 浏览:953
8255芯片编程 浏览:65
java文件bat运行 浏览:747
java常见笔试 浏览:529
360程序员模式 浏览:363