① 單片機蜂鳴器音階代碼
3.3 蜂鳴器播放歌曲原理 一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應幅 度的諧波頻率. 因此單片機奏樂只需弄清楚兩個概念即可, 也就是 「音 調」和「節拍」 ...
② 51單片機蜂鳴器程序是什麼
51單片機蜂鳴器程序為:
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
beep=~beep;
delay(1000);//控制音調頻率
beep=~beep;/控制聲音大小
delay(10);
}
}
(2)單片機蜂鳴器音樂代碼擴展閱讀:
BUZZER蜂鳴器的分類:
1、按其驅動方式的原理分,可分為:有源蜂鳴器(內含驅動線路,也叫自激式蜂鳴器)和無源蜂鳴器(外部驅動,也叫他激式蜂鳴器)。
2、按構造方式的不同,可分為:電磁式蜂鳴器和壓電式蜂鳴器。
3、按封裝的不同,可分為:DIP BUZZER(插針蜂鳴器)和SMD BUZZER(貼片式蜂鳴器)。
4、按電流的不同,可分為:直流蜂鳴器和交流蜂鳴器,其中,以直流最為常見壓電式蜂鳴器,用的是壓電材料,即當受到外力導致壓電材料發生形變時壓電材料會產生電荷。同樣,當通電時壓電材料會發生形變。
電磁式蜂鳴器,主要是利用通電導體會產生磁場的特性,用一個固定的永久磁鐵與通電導體產生磁力推動固定在線圈上的鼓膜。
由於兩種蜂鳴器發音原理不同,壓電式結構簡單耐用但音調單一音色差,適用於報警器等設備。而電磁式由於音色好,所以多用於語音、音樂等設備。
③ 51單片機蜂鳴器 獻給愛麗絲代碼
#include<reg52.h> sbit SPK=P1^2; //定義音樂輸出埠unsigned char t; // 休止符標志unsigned char w; // 節拍選擇 unsigned char Timer0_H,Timer0_L,Time; //致愛麗絲unsigned char code MUSIC[]={ 3,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 7,1,1, 2,2,1, 1,2,1, 6,1,2, 6,0,1, 1,1,1, 3,1,1, 6,1,1, 7,1,2, 5,0,1, 3,1,1, 5,1,1, 7,1,1, 1,2,2, 6,1,1, 3,1,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 7,1,1, 2,2,1, 1,2,1, 6,1,2, 6,0,1, 1,1,1, 3,1,1, 6,1,1, 7,1,2, 5,0,1, 3,1,1, 5,1,1, 7,1,1, 6,1,2, 6,0,1, 7,1,1, 1,2,1, 2,1,1, 3,1,2, 1,1,1, 5,1,1, 4,2,1, 3,2,1, 2,2,2, 7,0,1, 4,1,1, 3,2,1, 2,2,1, 1,2,2, 6,0,1, 3,1,1, 2,2,1, 1,2,1, 7,0,1, 3,1,1, 3,1,1, 3,2,1, 3,1,1, /* 3,2,1, 3,2,1, 3,3,1, 2,2,1, 3,2,1, 2,3,1, //高音 3,3,1, 2,2,1, 3,2,1, 2,3,1, 3,3,1, 2,3,1, 3,3,1, 2,3,1, 3,3,1, 7,2,1, 2,3,1, 1,3,1, */ 3,2,1, 3,2,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, //低音 3,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 7,1,1, 2,2,1, 1,2,1, 6,2,2, 6,1,1, 1,2,1, 3,2,1, 6,2,1, 7,2,2, 5,1,1, 3,2,1, 5,2,1, 7,2,1, 1,3,2, 6,1,1, 3,2,1, 3,3,1, 2,3,1, 3,3,1, 2,3,1, 3,3,1, 7,2,1, 2,3,1, 1,3,1, 6,2,2, 6,1,1, 1,2,1, 3,2,1, 6,2,1, 7,2,2, 5,2,1, 3,2,1, 1,3,1, 7,2,1, 6,2,4, 6,2,4, 11 }; // 音階頻率表 高八位code unsigned char FREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC, 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, //1,2,3,4,5,6,7,8,i 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, } ; // 音階頻率表 低八位code unsigned char FREQL[]={ 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B, 0x8F,0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, //1,2,3,4,5,6,7,8,i 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, }; /*------------------------------------------------ 節拍延時函數 各調1/4節拍時間: 調4/4 125ms 調2/4 250ms ------------------------------------------------*/void delay_ms(){ unsigned char i; for(i=0;i<230;i++);}void delay(unsigned char t){ unsigned char i; for(i=0;i<t;i++) { unsigned int k,j; j=500; for(k=0;k<j;k++) { delay_ms(); } } }/*------------------------------------------------ 定時器0中斷------------------------------------------------*/void TIM0_ISR() interrupt 1{ TR0=0; if(t!=0) { SPK=!SPK; } else { SPK=0; } TH0=Timer0_H; TL0=Timer0_L; TR0=1; }/*------------------------------------------------ 歌曲處理函數------------------------------------------------*/void Song(){ TH0=Timer0_H;//賦值定時器時間,決定頻率 TL0=Timer0_L; TR0=1; //打開定時器 delay(Time); //延時所需要的節拍 }/*------------------------------------------------ 主函數------------------------------------------------*/ void main(void) { unsigned int k,i; TMOD|=0x01; //置定時器0工作方式1 EA=1; //打開全局中斷 ET0=1; //打開定時0中斷 while(1) { i=0;// w=0; while(MUSIC[i]!=11) { //音樂數組長度 ,唱完從頭再來 k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振盪頻率所需數據 t=MUSIC[i]; Timer0_H=FREQH[k]; Timer0_L=FREQL[k]; Time=MUSIC[i+2]; //節拍時長 i=i+3;// w++; Song(); } } }
④ 單片機蜂鳴器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
⑤ 求stm32單片機的程序,用觸摸板控制蜂鳴器發出不同的歌曲。
摘要 程序中首先准備音頻數據表:
⑥ 用11.0592m晶振的51單片機的蜂鳴器音樂代碼生成軟體
音符頻率(Hz)
低1DO262
#1DO#277
低2RE294
#2RE#311
低3M330
低4FA349
#4FA#370
低5SO392
#5SO#415
低6LA440
#6466
低7SI494
中1DO523
#4FA#740
中5SO784
#5SO#831
中6LA880
#66LA#932
中7SI988
高1DO1046
#1DO#1109
高2RE1175
#2RE#1245
高3M1318
高4FA1397
#4FA#1480
高5SO1568
#5SO#1661
高6LA1760
#61865
高7SI1967
初值計算公式:65536-460800/Fr
⑦ 求單片機 音樂播放的c代碼
代碼的格式,是由編程者設計的,並沒有統一的規范。
下面的鏈接可供參考。
http://hi..com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/88bfff323ec42ef21b4cff09.html
⑧ 使用51單片機蜂鳴器播放音樂 求keil程序
//主程序查音符碼,將不同的初值裝入定時器,定時器每中斷一次,P3.7取反一次,形成不同頻率的方波
//11代表低音哆 21代表高音哆 1代表中音哆
//12代表低音來 22代表高音來 2代表中音來,是不是翻譯樂譜很方便
#include<reg52.h>
sbit SPK = P3^7; //P3.7外接揚聲器,可以改成你所說的P1^5
#define uint unsigned int;
#define uchar unsigned char;
uint x,y;
uint i,j,k;
//以下是根據歌譜轉來的音樂代碼 3代表中音咪 1個全音被分成4個1/4 音符
//小燕子第一句 3,5,21,6,5,5,5,5, 21是高音哆 ,後面4個5,是因為這個音節佔4拍
uchar code MUSIC[]={3,5,21,6,5,5,5,5, 3,5,6,21,5,5,5,5, 21,21,21,23,22,22,21,21, 22,21,6,21,5,5,5,5, 3,3,5,6,6,5,6, 21,21,22,5,6,6,6,6, 3,3,1,1,2,2,2,2,2,
2,2,2,3,5,5,5,5, 21,21,2,3,5,5,5,5, 2,1,16,1,15,15,15,15, 0,0,0,0,16,16,1,1, 15,15,16,16,1,1,1,1, 5,5,6,6,4,4,3,3, 2,2,2,2,2,2,5,5, 5,5,2,2,4,4,3,3, 2,2,1,2,4,4,4,4,
16,16,1,1,2,2,4,4, 2,1,16,1,15,15,15,15, 16,16,16,16,15,15,15,15, 15,15,15,15,15,15,15,15, 0,0,5,5,5,5,0,0, 5,5,5,5,4,4,4,4,
5,5,5,5,2,2,2,2, 2,2,5,5,4,4 ,4,4, 16,16,1,1,2,2,2,2, 4,4,2,2,2,2,4,4, 5,5,5,5,5,5,6,6, 21,21,21,21,6,6,21,21,
21,21,6,6,5,5,5,5, 5,5,6,6,5,5,4,4, 2,2,2,2,2,2,5,5, 5,5,2,2,4,4,3,3, 2,2,1,2,4,4,4,4, 16,16,1,1,2,2,4,4,
2,1,16,1,15,15,15,15, 16,16,16,16,15,15,15,15, 5,5,6,6,5,5,6,6, 5,5,4,4,5,5,5,5, 1,1,2,2,1,1,2,2, 15,15,16,16,1,1,1,1,
5,5,6,6,5,5,6,6, 21,21,6,6,5,5,5,5, 1,1,2,2,1,1,2,2, 15,15,16,16,1,1,1,1, 5,5,6,6,5,5,4,4, 5,5,5,5,1,1,2,2, 15,15,16,16,1,1,1,1,
5,5,6,6,5,5,5,5, 1,1,2,2,1,1,1,1, 5,5,6,6,5,5,5,5, 1,1,2,2,1,1,1,1, 5,5,5,5,1,1,1,1, 5,5,5,5,1,1,1,1, 5,5,5,5,1,1,5,5,
1,1,5,5,1,1,5,5, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 0,0,1,1,1,1,0,0, 5,5,5,5,4,4,4,4, 5,5,5,5,2,2,2,2, 2,2,5,5,4,4,4,4,
6,6,1,1,2,2,2,2, 4,4,2,2,2,2,4,4, 5,5,5,5,5,5,6,6, 21,21,21,21,6,6,21,21, 21,21,6,6,5,5,5,5, 5,5,6,6,5,5,4,4, 2,2,2,2,2,2,5,5,
5,5,2,2,4,4,3,3, 2,2,1,22,4,4,4,4, 16,16,1,1,2,2,4,4, 4,4,6,6,5,5,5,5, 5,5,5,5,5,5,5,5, 6,6,6,6,5,5,5,5};
uchar code table[] = { 0,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0,0,0, //定時半周期的初始值中音123 4 5 67高8位
//三個0是補位碼,為了使表格整齊,便於按規律查詢 首個0是休止符11個
0xf8,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0,0,0, //低音1 2 3 4 5 67高8位 10個
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff, //高音1 2 3 4 5 67高8位 7個
0,0x44,0xad,0x0a,0x34,0x82,0xc8,0x06,0,0,0, //中音123 4 5 67低8位 10個
0x89,0x59,0x13,0x68,0x04,0x90,0x0c,0 ,0,0, //低音1 2 3 4 5 6 7低8位10個
0x22,0x56,0x85,0x9a,0xc1,0xe4,0x03}; //高音1 2 3 4 5 6 7低8位 7個
void delay(i) //晶振12MHZ時延時1ms
{
for(j=i;j>0;j--)
for(k=121;k>0;k--);
}
void TIM0_ISR() interrupt 1
{
SPK=!SPK;//定時取反,形成方波
TH0=table[x]; //重新載入定時半周期的初始值
TL0=table[x+28];//為什麼加28 11+10+7=28
}
void main(void)
{
TMOD|=0x01;
EA=1;
ET0=1;
while(1)
{
y=0;
while(y<592)//此樂譜裡面有592個音符
{
x=MUSIC[y];//查樂譜表
TH0=table[x]; //查不同音節的定時器初值
TL0=table[x+28];
TR0=1; //打開定時器
if(y>72)//兩首曲子不同節奏,延時不同
{
delay(125); //延時125ms
}
else
{
delay(250); //延時250ms
}
y++;
TR0=0;
}
}
}
⑨ 51單片機蜂鳴器程序,音樂的隨時跳轉
這里修改:
sbitkey1=P1^0;
sbitkey2=P1^1;
voidPlay_Song(unsignedchari)
{
unsignedcharTemp1,Temp2;
unsignedintAddr;
Count=0;//中斷計數器清0
Addr=i*217;
while(1)
{
if(key2==0)break;//插入這一句
Temp1=SONG[Addr++];
if(Temp1==0xFF)//休止符
{
TR0=0;
Delay_xMs(100);
}
elseif(Temp1==0x00)//歌曲結束符
{
return;
}
else
{
Temp2=SONG[Addr++];
TR0=1;
while(1)
{
_Speak=~_Speak;
Delay_xMs(Temp1);
if(Temp2==Count)
{
Count=0;
break;
}
}
}
}
}
PlaySong2(................
{
....
whlie(1)
{
if(key1==0)break;//插入這一句
.....
}
}
voidmain()
{
Time0_Init();//定時器0中斷初始化
while(1)
{
Play_Song(0);//播放1
Play_Song2(0);//播放2
}
}
⑩ 用單片機控制蜂鳴器放音樂
看起來數組應該是音樂數據,其中包括四種數據,就是休止符(每個100毫秒)、歌曲結束符、音階(給出的是蜂鳴器的震盪周期)、一個音階持續的時間長度。如果你的晶振是12MHz,按照定時器中斷給Count加一來看,音階持續的時間應該是以10毫秒為單位。
Play_Song函數要求給出參數i,我的看法是這個i是指要播放第幾段樂曲,i*217表示每段樂曲都是217個位元組。本例中,數組只給出217個位元組,所以只有一段樂曲,播放時需要給出參數i=0.
if ( Temp1 == 0xFF ) //休止符
{
TR0 = 0;
Delay_xMs(100);
}
所以休止符每個固定是100毫秒。
如果讀到第一個不是休止符或者結束符的位元組,那就是音階,而下一個位元組就是這個音階的長度或者說節拍
while(1)
{
FMQ = ~FMQ;
Delay_xMs(Temp1);
if ( Temp2 == Count )
{
Count = 0;
break;
}
}
這一段是說,如果當前音階的時間(Temp2次定時器中斷,由Count計時)還沒完,就每隔Temp1毫秒震動一次蜂鳴器,就形成一個震動頻率,這段時間就發出一定音調的樂音。不過我也有疑惑,震盪周期如果以毫秒為單位恐怕只能發出次聲波,所以以上對有關Delay_xMs函數時間的估算都可能有問題,還得看Delay_xMs函數的具體定義才行。