Ⅰ 單片機蜂鳴器c語言《蘭花草》音樂代碼
程序名: MCS51U實驗板配套程序-歌曲:蘭花草
;電路介紹:蜂鳴器接P2.0;實驗前要連接J12
;***********************************************************************
OUT BIT P2.0
ORG 0
AJMP START
ORG 0BH
AJMP TIM0
START: MOV TMOD,#1
MOV IE,#10000010B
START0: MOV 30H,#0
NEXT: MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R2,A
JZ END0
ANL A,#0FH
MOV R5,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
AJMP D1
SING: DEC A
MOV 22H,A
RL A
MOV DPTR,#TABLE1
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
D1: CALL DELAY
INC 30H
AJMP NEXT
END0: CLR TR0
AJMP START0
TIM0: PUSH ACC
PUSH PSW
MOV TL0,20H
MOV TH0,21H
CPL OUT
POP PSW
POP ACC
RETI
DELAY: MOV R7,#2
D2: MOV R4,#125
D3: MOV R3,#248
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY
RET
;====================================
TABLE1: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 64934
TABLE: ;1
DB 42H,82H,82H,82H,84H,02H,72H
DB 62H,72H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H
;2
DB 12H,0A2H,0D2H,92H,88H
DB 82H,0B2H,0B2H,0A2H,84H,02H,72H
DB 62H,72H,62H,52H,44H,02H,12H
;3
DB 12H,62H,62H,52H,44H,02H,82H
DB 72H,62H,52H,32H,48H
DB 00H
END
Ⅱ 利用單片機播放音樂存放幾首歌
利用單片機播放音樂存放三首歌。可以播放儲存的三首歌曲,分別為《揮著翅膀的女孩》、《同一首歌》、《兩只蝴蝶》,其他歌曲可以通過參考資料中的軟體編碼後寫入單片機中,按鍵共有兩個,一個是復位按鍵,按下後直接從第一首歌開始播放。另一個是暫停鍵,按下後暫停,指示燈點亮。
Ⅲ 單片機蜂鳴器c語言《蘭花草》音樂代碼
程序名: MCS51U實驗板配套程序-歌曲:蘭花草
;電路介紹:蜂鳴器接P2.0;實驗前要連接J12
;***********************************************************************
OUT BIT P2.0
ORG 0
AJMP START
ORG 0BH
AJMP TIM0
START: MOV TMOD,#1
MOV IE,#10000010B
START0: MOV 30H,#0
NEXT: MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R2,A
JZ END0
ANL A,#0FH
MOV R5,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
AJMP D1
SING: DEC A
MOV 22H,A
RL A
MOV DPTR,#TABLE1
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
D1: CALL DELAY
INC 30H
AJMP NEXT
END0: CLR TR0
AJMP START0
TIM0: PUSH ACC
PUSH PSW
MOV TL0,20H
MOV TH0,21H
CPL OUT
POP PSW
POP ACC
RETI
DELAY: MOV R7,#2
D2: MOV R4,#125
D3: MOV R3,#248
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY
RET
;====================================
TABLE1: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 64934
TABLE: ;1
DB 42H,82H,82H,82H,84H,02H,72H
DB 62H,72H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H
;2
DB 12H,0A2H,0D2H,92H,88H
DB 82H,0B2H,0B2H,0A2H,84H,02H,72H
DB 62H,72H,62H,52H,44H,02H,12H
;3
DB 12H,62H,62H,52H,44H,02H,82H
DB 72H,62H,52H,32H,48H
DB 00H
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
Ⅳ 單片機歌曲代碼
#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();
}
}
Ⅵ 求單片機 音樂播放的c代碼
代碼的格式,是由編程者設計的,並沒有統一的規范。
下面的鏈接可供參考。
http://hi..com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/88bfff323ec42ef21b4cff09.html
Ⅶ 怎麼用單片機編寫音樂程序
單片機比如51系列都有定時器,因此可以利用它來控制揚聲器按一定頻率發聲,以下就是一個常式,用按鍵的按下和抬起來模擬電子琴的控製程序。
T0H EQU 30H
T0L EQU 31H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
SETB ET0
SETB EA
LOOP:
MOV DPTR,#FREQ
MOV A,P2 ;控制高中低音區
MOV R1,#0
ANL A,#03H
JB ACC.0,LOOP01
MOV R1,#14
SJMP LOOP0
LOOP01:
JB ACC.1,LOOP0
MOV R1,#28
LOOP0:
JB P0.0,LOOP1 ;控制音頻1234567
MOV A,R1
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP1:
JB P0.1,LOOP2
MOV A,R1
ADD A,#2
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#2
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP2:
JB P0.2,LOOP3
MOV A,R1
ADD A,#4
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#4
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP3:
JB P0.3,LOOP4
MOV A,R1
ADD A,#6
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#6
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP4:
JB P0.4,LOOP5
MOV A,R1
ADD A,#8
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#8
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP5:
JB P0.5,LOOP6
MOV A,R1
ADD A,#10
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#10
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP6:
JB P0.6,LOOP7
MOV A,R1
ADD A,#12
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#12
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP7:
CLR TR0
LJMP LOOP
;-----------------------------
T0ISR:
CLR TR0
MOV TH0,T0H
MOV TL0,T0L
SETB TR0
CPL P3.0
RETI
;-----------------------------
FREQ:
DB 0F2H,03DH ;低音1
DB 0F3H,0BDH ;低音2
DB 0F5H,014H ;低音3
DB 0F5H,0B1H ;低音4
DB 0F6H,0D0H ;低音5
DB 0F7H,0D1H ;低音6
DB 0F8H,0B5H ;低音7
DB 0F9H,01EH ;中音1
DB 0F9H,0DEH ;中音2
DB 0FAH,08AH ;中音3
DB 0FAH,0D8H ;中音4
DB 0FBH,068H ;中音5
DB 0FBH,0E8H ;中音6
DB 0FCH,05AH ;中音7
DB 0FCH,08FH ;高音1
DB 0FCH,0EFH ;高音2
DB 0FDH,045H ;高音3
DB 0FDH,06CH ;高音4
DB 0FDH,0B4H ;高音5
DB 0FDH,0F4H ;高音6
DB 0FEH,029H ;高音7
;-----------------------------
END