1. 用單片機控制蜂鳴器放音樂
看起來數組應該是音樂數據,其中包括四種數據,就是休止符(每個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函數的具體定義才行。
2. 單片機蜂鳴器工作原理是什麼哪位高手可以指教一下
蜂鳴器工作發聲原理:
蜂鳴器的發聲原理由振動裝置和諧振裝置組成,而蜂鳴器又分為無源他激型與有源自激型。
無源他激型蜂鳴器的工作發聲原理是:方波信號輸入諧振裝置轉換為聲音信號輸出。
有源自激型蜂鳴器的工作發聲原理是:直流電源輸入經過振盪系統的放大取樣電路在諧振裝置作用下產生聲音信號。
電路原理:PORTC.3/T0 作為I/O 口通過三極體Q2 來驅動蜂鳴器LS1,而PORTC.2/PWM0 則作為PWM 輸出口通過三極體Q1 來驅動蜂鳴器LS2。另外在PORTA.3 和PORTA.2 分別接了兩個按鍵,一個是PWM 按鍵,是用來控制PWM 輸出口驅動蜂鳴器使用的;另一個是PORT 按鍵,是用來控制I/O 口驅動蜂鳴器使用的。連接按鍵的I/O 口開內部上拉電阻。
(2)蜂鳴器單片機擴展閱讀:
蜂鳴器的應用領域
蜂鳴器廣泛應用領域:計算機行業(主板蜂鳴器,機箱蜂鳴器,電腦蜂鳴器)列印機(控制板蜂鳴器)、復印機、報警器行業(報警蜂鳴器,警報蜂鳴器)、電子玩具(音樂蜂鳴器)、農業、汽車電子設備行業(車載蜂鳴器,倒車蜂鳴器,汽車蜂鳴器,摩托車蜂鳴器)電話機(環保蜂鳴器)、定時器,空調,醫療設備等電聲行業。
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);
}
}
(3)蜂鳴器單片機擴展閱讀:
BUZZER蜂鳴器的分類:
1、按其驅動方式的原理分,可分為:有源蜂鳴器(內含驅動線路,也叫自激式蜂鳴器)和無源蜂鳴器(外部驅動,也叫他激式蜂鳴器)。
2、按構造方式的不同,可分為:電磁式蜂鳴器和壓電式蜂鳴器。
3、按封裝的不同,可分為:DIP BUZZER(插針蜂鳴器)和SMD BUZZER(貼片式蜂鳴器)。
4、按電流的不同,可分為:直流蜂鳴器和交流蜂鳴器,其中,以直流最為常見壓電式蜂鳴器,用的是壓電材料,即當受到外力導致壓電材料發生形變時壓電材料會產生電荷。同樣,當通電時壓電材料會發生形變。
電磁式蜂鳴器,主要是利用通電導體會產生磁場的特性,用一個固定的永久磁鐵與通電導體產生磁力推動固定在線圈上的鼓膜。
由於兩種蜂鳴器發音原理不同,壓電式結構簡單耐用但音調單一音色差,適用於報警器等設備。而電磁式由於音色好,所以多用於語音、音樂等設備。
4. 單片機 蜂鳴器
9013飽和了嗎。R4 8.2K電阻應該去掉,或改8.2K阻值為150K.。
5. 51單片機蜂鳴器程序
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
ucharpwm,ctl=5;
sbitfmq=P1^0;
bitflag;
voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
voidt0isr()interrupt1
{
pwm++;
if(pwm<=ctl)P0=0xff;
elseP0=0x00;
if(pwm==100)
{
pwm=0;
ctl++;
}
if(ctl==100)flag=1;
}
main()
{
uchari,led;
TMOD=0x02;
TH0=236;
TL0=236;
ET0=1;
EA=1;
while(1)
{
led=0xfe;
for(i=0;i<8;i++)
{
P0=led;
led=led<<1;
delay(200);
}
led=0xff;
delay(200);
led=0x7f;
for(i=0;i<8;i++)
{
P0=led;
led=led>>1;
delay(200);
}
TR0=1;
flag=1;
while(flag);
TR0=0;
}
}
6. 關於單片機的蜂鳴器
蜂鳴器有直流定壓式的,給電就響。如果是這種蜂鳴器,你給的開關頻率快,使蜂鳴器不能正常發聲。
作電子琴的話不能用這種發聲器。應該用揚聲器,音箱上用的,只是功率小些0.8-3W的。
7. 單片機蜂鳴器
1、單片機與蜂鳴器連接圖已附.
2、通常P1、P2、P3口都可以用來作為控制,P0口也可以,但因其內部無上拉電阻,所以外接時,應接一1K的上拉電阻,其他一樣。有源蜂鳴器驅動電路設計,無須外加驅動電路。
3、C語言編程為:
#include<reg51.h>//頭文件
sbitd1=P1^2;//位定義,把P1口的P1.2位設為驅動口,當然其它口也可。
voidmain()//主函數
{
d1=0//單片機默認狀態為1,不用初始化了,此處直接賦值0則可驅動
};
此為最最簡單的電路程序設計。下載後,蜂鳴器一會一直處於鳴叫狀態。
你可以加一個延時函數,再把d1口置高,可讓它,叫一下關閉。也可以加個while(1)大循環,讓它「滴、滴」不停地叫。還可以設置一個按鍵,按一個亮一下。
隨程序的變化,現象也會各不同。
8. 求51單片機蜂鳴器程序
#include<reg51.h>
sbit buzzer = P1^0 ;聲明區
void delay(int) ;
void pulse_BZ(int,int,int);聲明函數void main(void)
{
while(1)
{
pulse_BZ(500,1,1); 調用發聲
delay(1000); 延時1000 X 0.5ms
pulse_BZ(500,1,1);
delay(1000);
pulse_BZ(500,1,1);
delay(1000);
pulse_BZ(200,1,1);
delay(1000);
pulse_BZ(200,1,1);
delay(1000);
}
}void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<60;j++);
}void pulse_BZ(int count;int TH;int TL)
{
int i;
for(i=o;i<count;i++) //循環count次,時間count x 1ms
{
buzzer=1; //此程序段產生1HZ 信號
delay(TH);
buzzer=0;
delay(TL);
}
}
9. STC51單片機C語言開啟蜂鳴器
#include<reg52.h>
sbitbeep=P0^4;
voidmain()
{
beep=0;
while(1);
}
試試這個怎樣,單片機在執行完程序之後會回到初始狀態,然後再重新執行程序,所以蜂鳴器就會反復的開和關,聽起來聲音會小很多;加個while(1)死循環,讓程序一直保持在beep=0的狀態。
10. 怎麼使用單片機控制蜂鳴器發聲
蜂鳴器有兩種,一種是無源的,另一種為有源的,確認的方法為:1)看封裝,如果引腳端為PCB板的,一般為無源的,引腳端為樹脂灌封的,一般為有源的。2)加電實驗,用5V電壓點擊接觸引腳時,只有「噠噠」聲的為無源的,發出一個單音響的為有源的。
兩種蜂鳴器用單片機的控制方法是一樣的,對於無源的,要求單片機送出一組斷續的音頻信號,使蜂鳴器按要求發聲,對於有源蜂鳴器,要求單片機送出一組斷續的電脈沖信號,用於分斷蜂鳴器的通斷狀態,而使有源蜂鳴器發出「嘀...嘀」,「嘀...嘀...嘀」等希望的聲音。
無源蜂鳴器舉例:
/**********************************************************************/
//聲響驅動程序 BELL--整點報時(鬧鍾音兩短一長)
/**********************************************************************/
void Beep(void)
{
uint a;//定義變數用於發聲的長度設置
uchar b;
for(b=2;b>0;b--){
for(a=200;a>0;a--){//第一個聲音的長度
beep = ~beep;//取反揚聲器驅動口,以產生音頻
Delay_1us(500);//音調設置延時
}
DelayM(1000);
}
for(a=1000;a>0;a--){//第一個聲音的長度
beep = ~beep;//取反揚聲器驅動口,以產生音頻
Delay_1us(500);//音調設置延時
}
beep = 1;//音樂結束後揚聲器關閉
}
有源蜂鳴器舉例:
void main(void)
{
NB=0;//有源蜂鳴器初始不送電
while(1)
{
NB=0;//有源蜂鳴器斷電
delay(300);//停一段時間
NB=1;//有源蜂鳴器送電
delay(1000);//響一段時間
}
}