導航:首頁 > 操作系統 > 單片機歌曲

單片機歌曲

發布時間:2022-01-15 23:00:48

『壹』 單片機控制音樂

按鍵很短,但是,播放音樂很長時間的

怎麼能在播放音樂時,再相應按鍵?

定義一個變數,用按鍵去改變這個變數的數值,
當=1時,播放第一首,
=2 時,放第二首,
=3 時,放第三首,
......

= 8 時,播放8首,再=0;
循環

『貳』 求幾首單片機經典歌曲樂譜,及蜂鳴器驅動原理和 C語言程序。

建議用小喇叭,效果比蜂鳴器好很多,驅動就是正負極啊,一接就好了,當時做這個不是難點。C語言程序網上可以搜到的,這里歌曲樂譜都是一些數組組成,你換歌相當於換數組里的數,所以意思就是程序模板是不變的。定時器可能會用到,你說的中斷切換歌曲也是可以實現的。

『叄』 跪求單片機歌曲編寫好的程序,

NUM EQU 30H
UP EQU P3.6
DN EQU P3.7
ORG 0000H
AJMP START ;Fosc=12MHz
ORG 000BH ;T0 中斷入口地址
AJMP INT_T0
ORG 001BH ;T1 中斷入口地址
AJMP INT_T1
START:
MOV SP, #60H
MOV TMOD, #11H
MOV IE, #8AH
MOV IP, #08H ;T1中斷優先於T0中斷
MOV TH1, #3CH
MOV TL1, #0BH ;以上為系統初始化,T=60ms
W1: MOV P2, #01110001B ;等待提示"F" ,01110001
LCALL GETKEY
CJNE A, #0FFH, W1
MOV A, B
CJNE A, #0AH, W2
LCALL KEY_A ;輸入鍵是'A',轉KEY_A
SJMP W1
W2: CJNE A, #0BH, W3
LCALL KEY_B ;輸入鍵是'B',轉KEY_B
W3: CJNE A, #0CH, W4
LCALL KEY_C ;輸入鍵是'C',轉KEY_C
W4: CJNE A, #0DH, W5
LCALL KEY_D
SJMP W1 ;輸入鍵是'D',轉KEY_D
W5: CJNE A,#0EH,W6 ;下一首
INC NUM
MOV A,NUM
CJNE A,#4,W51
W51:
JC W52
MOV NUM,#0
W52:
MOV A,NUM
SJMP D0
W6: CJNE A,#0FH,W7 ;上一首
MOV A,NUM
JNZ W61
MOV NUM,#4
W61:
DEC NUM
MOV A,NUM
SJMP D0
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:
JNZ D1
SJMP E0
D1: DEC A
JNZ D2
SJMP E1
D2: DEC A
JNZ E3
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: ;第一首《我和你》
MOV P2, #00000110B ;顯示1,00000110
MOV R5, #11111001B
MOV 52H, #HIGH TABLE10
MOV 53H, #LOW TABLE10
MOV NUM,#0
LCALL music
RET
MUSIC2: ;第二首《萬水千山總是情》
MOV P2, #01011011B ;顯示2,01011011
MOV R5, #10100100B
MOV 52H, #HIGH TABLE20
MOV 53H, #LOW TABLE20
MOV NUM,#1
LCALL music
RET
MUSIC3: ;第三首《送別》
MOV P2, #01001111B ;顯示3,01001111
MOV R5, #10110000B
MOV 52H, #HIGH TABLE30
MOV 53H, #LOW TABLE30
MOV NUM,#2
LCALL music
RET
MUSIC4: ;第四首《北京歡迎您》
MOV P2, #01100110B ;顯示4,01100110
MOV R5, #10011001B
MOV 52H, #HIGH TABLE40
MOV 53H, #LOW TABLE40
MOV NUM,#3
LCALL music
RET
music: MOV R3,#00H ;音樂解碼器
NEXT20:
MOV A,P3
ORL A,#0C0H
MOV P3,A
MOV A,P3
CPL A
ANL A,#0C0H
JZ NEXT21
POP ACC
POP ACC
LJMP W1
RET
NEXT21:
MOV A, 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
MOV 22H, A
RL A
MOV DPTR, #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:
CLR TR1
CLR TR0
LCALL KEY_E
MOV TH1, #3CH
MOV TL1, #0BH
DJNZ 60H, OUT
MOV 60H, #20
OUT:
SETB TR1
RETI
KEY_E:
JB P3.1, L2 ;中斷鍵盤檢測
LCALL DELAY2 ;消除抖動
JB P3.1, L2 ;如果是高電平就跳到L2
JNB P3.1, $ ;如果仍然是低電平就執行中斷程序
MOV P2, #0111100B ;讓LED顯示E,01111001
L3: JB P3.1, $ ;檢測低電平,直到低電平時才跳出該指令
LCALL DELAY2
JB P3.1, L3
JNB P3.1, $ ;如果再來一個高電平才跳出中斷
MOV P2,R5
L2: SETB TR0
RET
GETKEY: ;讀A B C D鍵盤子程序
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
JNB P1.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
JNB P1.3, $
MOV P2, #01011110B ;顯示D,01011110
MOV R5, #10100001B
MOV A, #0FFH
MOV B, #0DH
L0: JB UP,L01
LCALL DELAY2
JB UP,L01
JNB UP,$
MOV A,#0FFH
MOV B,#0EH
RET
L01:
JB DN,L02
LCALL DELAY2
JB DN,L02
JNB DN,$
MOV A,#0FFH
MOV B,#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: ;延時子程序
PUSH 0 ;保存現場
PUSH 1
MOV 0, #0H
DELAY1: MOV 1, #0H
DJNZ 1, $
DJNZ 0, DELAY1
POP 1 ;恢復現場
POP 0
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: ;頻率表
DW 64260,64400,64524,64580 ;簡碼值 低音5, 低音6, 低音7,1
DW 64684,64777,64820,64898 ; 簡碼值 2,3,4,5
DW 64968,65030,65058,65110 ; 簡碼值 6,7,高音1,高音
DW 65157,65178,65217 ;簡碼值 高音3,高音4,高音5
;--------------------------------------------------------------------
;第一首《我和你》
;--------------------------------------------------------------------
TABLE10: DB 64H,82H,42H,48H
DB 54H,64H,18H
DB 44H,54H,64H,84H
DB 5CH
DB 64H,84H,44H,04H,42H
DB 54H,64H,28H
DB 54H,14H,54H,64H
DB 4CH
DB 98H,88H
DB 98H,48H
DB 64H,24H,64H,84H
DB 5CH
DB 64H,82H,42H,48H
DB 54H,64H, 28H
DB 54H,14H,54H,34H
DB 4CH
DB 00H
;--------------------------------------------------------------------
;第二首《萬水千山總是情》
;--------------------------------------------------------------------
TABLE20: DB 64H,74H,84H,04H,82H,94H,84H,6CH
DB 54H,44H,04H,62H,54H,44H,2CH
DB 24H,18H, 44H,54H,64H,84H,94H,64H,5CH
DB 64H,74H,84H,04H,82H,94H,84H,6CH
DB 54H,44H,04H,62H,54H,44H,2CH
DB 24H,18H, 44H,64H,54H,04H,42H,24H,44H,4CH
DB 64H,84H,9CH,0A4H,94H,74H,84H,04H,92H,8CH,64H,88H
DB 64H,84H,9CH,0A4H,0A4H,94H,84H,64H,5CH
DB 64H,74H, 84H,04H,82H,94H,84H,6CH
DB 54H,44H,04H,62H,54H,44H,2CH
DB 24H,18H,44H,64H,54H,42H,24,44H,4CH
DB 00H
;--------------------------------------------------------------------
;第三首《送別》
;--------------------------------------------------------------------
TABLE30: DB 84H,62H,82H,0B8H
DB 94H,0B2H,92H,88H
DB 84H,42H,52H,64H,52H,44H
DB 5CH
DB 84H,62H,82H,0B4H,04H,82H
DB 94H,0B4H, 88H
DB 84H,52H,62H,74H,04H,32H
DB 4CH
DB 94H,0B4H,0B8H
DB 0A4H,92H,0A2H,0B8H
DB 92H,0A2H,0B2H,92H,92H,82H,62H,42H
DB 5CH
DB 84H,62H,82H,0B4H,04H,0A2H
DB 94H,0B4H,88H
DB 84H,52H,62H,74H,04H,32H
DB 4CH
DB 00H
;--------------------------------------------------------------------
;第四首《北京歡迎您》
;--------------------------------------------------------------------
TABLE40: DB 62H,82H,62H,52H,12H
DB 62H,52H,12H,64H
DB 62H,52H,22H,42H
DB 62H,54H
DB 52H,42H,22H,42H
DB 52H,62H,82H,52H
DB 62H,92H,82H,12H
DB 52H,44H
DB 52H,42H,22H,42H
DB 52H,62H,82H,52H
DB 62H,92H,82H,82H
DB 68H
DB 52H,62H,52H,42H
DB 82H,92H,64H
DB 22H,62H,64H
DB 54H,64H
DB 64H,84H
DB 0B2H,82H,94H
DB 02H,92H,82H,62H
DB 62H, 82H,88H
DB 00H
END

『肆』 求單片機 音樂播放的c代碼

代碼的格式,是由編程者設計的,並沒有統一的規范。
下面的鏈接可供參考。
http://hi..com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/88bfff323ec42ef21b4cff09.html

『伍』 單片機歌曲代碼

#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();
}
}

『陸』 歌曲怎麼放在單片機裡面

你們那些東西不叫音樂,叫聲音...
不過樓主要的也就是不同的聲音組合起來放在單片機里的.單片機里真正的音樂是要用一定格式存放的,比如MIDI,有嚴格的協議的.

『柒』 能提供幾首單片機的歌曲代碼用蜂鳴器唱的

#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
}
}

『捌』 單片機 音樂程序編寫 歌曲《小星星》

只有音樂發聲匯編程序,沒有加入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


『玖』 誰能給我幾首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

閱讀全文

與單片機歌曲相關的資料

熱點內容
linux自啟動配置文件 瀏覽:927
生存為什麼不能使用命令方塊 瀏覽:204
java與sqlserver資料庫連接 瀏覽:21
鐵路解壓視頻全過程 瀏覽:442
主備核心交換機如何連接伺服器 瀏覽:704
白金卡哪個app最靠譜 瀏覽:666
本田汽車空調壓縮機保險絲 瀏覽:155
康佳led47r5500pdf通病 瀏覽:821
cad圓相切命令 瀏覽:69
bmp文件夾打開 瀏覽:502
u盤裝系統文件下載到哪個文件夾 瀏覽:21
es系統封裝教程程序員大本營 瀏覽:523
程序員聚餐喝什麼酒好 瀏覽:608
編譯程序生成安裝文件 瀏覽:955
linux查看usb設備 瀏覽:284
安卓怎麼禁止app充值 瀏覽:559
動盪對加密貨幣的影響 瀏覽:358
國家反詐app哪裡看注冊時間 瀏覽:563
打孔式文件夾怎麼裝視頻 瀏覽:29
php怎麼學比較好 瀏覽:381