❶ 51單片機蜂鳴器唱歌程序
[2]單片機音樂盒花樣流水燈設計
功能描述:
1、按鍵切換音樂
2、彩燈可以跟隨音調亮滅
3、按鍵切換彩燈顯示花樣
4、支持功能定製
☆已作出的實物優酷視頻演示地址:
http://v.youku.com/v_show/id_XMTUxMDU3MzcyOA==.html
❷ 編寫單片機音樂。
就用單片機和蜂鳴器應該就可以。你控制蜂鳴器的頻率改變,這樣蜂鳴器發聲的「音調」就會不一樣,然後再自己慢慢調那些頻率,就可以構成一個單片機控制的音樂了。
至於音樂裡面的12345671怎麼發聲,請參考以下資料(採用51單片機):
為了輸出准確的音階頻率,我們需要用定時器輸出來控制蜂鳴器的驅動,這里用的 T0。
我們再每一次定時器中斷溢出時取反 P17 引腳,以形成頻率驅動蜂鳴器,定時器 0 工
作在 16 位方式,需要在中斷里重新置入初始值。這個值就決定了 P17輸出的頻率。我們在
程序里先做好了一張表,預先寫好了每個音階的頻率需要設置的初始值。到時調入對應的值
進去 T0,不斷溢出時就 P17 可以輸出對應的頻率。
在這個程序里,我們自動地輸出 8 個音符,每個音符保持 1 秒鍾左右。
―――――――――――――――――――――――
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一個 52 標准內核的頭文件
char code dx516[3] _at_ 0x003b;//這是為了模擬設置的
sbit BEEP=P1^7; //喇叭輸出腳
uchar th0_f; //在中斷中裝載的 T0 的值高 8 位
uchar tl0_f; //在中斷中裝載的 T0 的值低 8 位
//T0 的值,及輸出頻率對照表
uchar code freq[36*2]={
0xA9,0xEF,//00220HZ ,1 //0
0x93,0xF0,//00233HZ ,1#
0x73,0xF1,//00247HZ ,2
0x49,0xF2,//00262HZ ,2#
0x07,0xF3,//00277HZ ,3
0xC8,0xF3,//00294HZ ,4
0x73,0xF4,//00311HZ ,4#
0x1E,0xF5,//00330HZ ,5
0xB6,0xF5,//00349HZ ,5#
0x4C,0xF6,//00370HZ ,6
0xD7,0xF6,//00392HZ ,6#
0x5A,0xF7,//00415HZ ,7
0xD8,0xF7,//00440HZ 1 //12
0x4D,0xF8,//00466HZ 1# //13
0xBD,0xF8,//00494HZ 2 //14
0x24,0xF9,//00523HZ 2# //15
0x87,0xF9,//00554HZ 3 //16
0xE4,0xF9,//00587HZ 4 //17
0x3D,0xFA,//00622HZ 4# //18
0x90,0xFA,//00659HZ 5 //19
0xDE,0xFA,//00698HZ 5# //20
0x29,0xFB,//00740HZ 6 //21
0x6F,0xFB,//00784HZ 6# //22
0xB1,0xFB,//00831HZ 7 //23
0xEF,0xFB,//00880HZ `1
0x2A,0xFC,//00932HZ `1#
0x62,0xFC,//00988HZ `2
0x95,0xFC,//01046HZ `2#
0xC7,0xFC,//01109HZ `3
0xF6,0xFC,//01175HZ `4
0x22,0xFD,//01244HZ `4#
0x4B,0xFD,//01318HZ `5
0x73,0xFD,//01397HZ `5#
0x98,0xFD,//01480HZ `6
0xBB,0xFD,//01568HZ `6#
0xDC,0xFD,//01661HZ `7 //35
};
//定時中斷 0,用於產生唱歌頻率
timer0() interrupt 1
{
TL0=tl0_f;TH0=th0_f; //調入預定時值
BEEP=~BEEP; //取反音樂輸出 IO
P2=~P2;
}
//音階聲音自動輸出試驗
void main(void) // 主程序
{
ulong n;
uchar i;
uchar code jie8[8]={12,14,16,17,19,21,23,24};//1234567`1 八個音符在頻率表中的位置
TMOD = 0x01; //使用定時器 0 的 16 位工作模式
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
for(i=0;i<8;i++) //循環播放 8 個音符
{
tl0_f=freq[jie8[i]*2]; //置一個音符的值
th0_f=freq[jie8[i]*2+1];
for(n=0;n<50000;n++); //延時 1 秒左右
}
}
}
―――――――――――――――――――――――――――――――
請編譯,運行。可以聽到 8 個音符不斷循環輸出。
❸ 關於單片機蜂鳴器唱歌的問題,怎樣讓音樂播放一次後停下來
參考我這個例子:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar i=0;
sbit SPK = P3^4;
sbit K1 = P1^0;
uchar code HI_LIST[]=
{
0,266,229,232,233,236,238,240,241,242,244,245,246,247,248
};
uchar code LO_LIST[]=
{
0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
};
void T0_INT() interrupt 1
{
TL0 = LO_LIST[i];
TH0 = HI_LIST[i];
SPK = !SPK;
}
void DelayMS(uint ms)
{
uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
void main()
{
IE = 0x82;
TMOD = 0x00;
while(1)
{
while(K1==1);
while(K1==0);
for(i=1;i<15;i++)
{
TR0 = 1;
DelayMS(500);
TR0 = 0;
DelayMS(50);
}
}
}
❹ 讓單片機唱歌的c語言程序是怎麼弄的
其實原理很簡單,就是控制單片機的某個引腳,輸出一定頻率的方波信號,而輸出方波信號的方法,是最基礎的,最簡單的編程了,用定時器定時,根據信號頻率算出信號周期,然後計算出定時的時間。那單片機演奏歌曲的程序,也是同樣的原理,只是事先根據歌曲的簡譜查出每個音階的信號頻率,再根據各音階頻率計算出定時器的初值。演奏時,按簡譜的各音階順序輸出不同的頻率的信號就行了。
下表是音階與頻率對應關系表,給出常用音階對應的定時常數。
❺ 怎麼利用單片機控制蜂鳴器唱歌呢.求幫助,新手
使用單片機的定時器控制蜂鳴器的頻率就可以發出不同的音調了,不同的音調組合就可以唱歌了,網上找下程序參考一下吧,新手自己做難道有點大
❻ 單片機唱歌代碼怎麼編比如,do,re,mi ,fa,so ,la,xi,
每個音符都對應不同的頻率,你去查一下那個表,然後用PWM或者IO口電平翻轉都可以輸出信號使蜂鳴器「唱歌」。
❼ 單片機蜂鳴器唱歌
你看一下音樂存放的數組SONG的話
會發現SONG數組中存放的規律是
頻率,音長,頻率,音長……
所以第一個
Temp1
=
SONG[Addr++];
讀出的是頻率
接著Temp2
=
SONG[Addr++];讀出的是音長,音長即1拍、1/2拍、1/4拍等
❽ 51單片機唱歌怎麼實現啊
單片機可以演奏從低音、中音、高音和超高音,四個八度共28個音符。
演奏樂曲時,就根據音符的不同數值,從半周期數據表中找到定時時間初始值,送入定時器即可控制發音的音調。
比如把表中的0xF2和0x42送到定時器,定時器按照這個初始值來產生中斷,輸出的方波,人們聽起來,這就是低音1。
樂曲的數據,也要寫個數據表,程序中以 code unsigned char sszymmh[] 命名。
這個表中每三個數字,說明了一個音符,它們分別代表:
第一個數字是音符的數值1234567之一,代表多來咪發...;
第二個數字是0123之一,代表低音、中音、高音、超高音;
第三個數字是時間長度,以半拍為單位。
樂曲數據表的結尾是三個0。
❾ 單片機中能唱歌的蜂鳴器是有源還是無源的
無源的,單片機是通過調節頻率和脈寬控制蜂鳴器發出不同的聲調。