前言
上一節,我們完成了按鍵操作,本節我們學習使用蜂鳴器,首先我們介紹下蜂鳴器,然後完成實驗:上電後默認驅動頻率為5KHZ,通過KEY1控制驅動頻率為1KHZ ,蜂鳴器,KEY2控制驅動頻率為 2KHZ,可以聽到不同的效果。
一、基礎知識
1.蜂鳴器簡介
蜂鳴器是一種一體化結構的電子訊響器,採用直流電壓供電,廣泛應用於計算機、印表機、複印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。
蜂鳴器按照原理來分可以分為有源蜂鳴器和無源蜂鳴器,有源蜂鳴器和無源蜂鳴器並不是說蜂鳴器內部是否含有電源,這裡的有源和無源是指內部是否含有RC震蕩電路。想要無源蜂鳴器發聲,需提供一定頻率的脈衝信號; 想要有源蜂鳴器發聲, 只需提供電源即可。蜂鳴器頻率一般在1.5-5KHz 之間,有源蜂鳴器的實物如下圖所示:
2.硬體設計
打開硬體設計電路,蜂鳴器相關電路如下
注意:不可以用單片機I/O口直接驅動蜂鳴器發聲,因為I/O口驅動負載能力有限,通常蜂鳴器正常工作,需要通過30mA左右電流,因此我們使用三極體放大電路解決這個問題,採用放大電路後, 51 單片機的 IO 口只需要提供不到 1mA 的電流就可控制蜂鳴器。
二、實例
1.創建工程
將上一節工程複製出來,並修改名字為03-beep
2.修改程序
include <intrins.h>
sbit Buzzer=P3^7; //定義P3.7為喇叭驅動端
sbit key1 = P2^4;
sbit key2 = P2^5;
void Delay500us() //500us延遲函數,用於產生1KHZ信號
{
unsigned char i;
nop();
i = 227;
while (--i);
}
void Delay250us() //250us延遲函數,用於產生2KHZ信號
{
unsigned char i;
nop();
i = 112;
while (--i);
}
void delay_ms(int ms)
{
int val = 110;
for (;ms >0; ms--)
{
while(val--);
}
}
void Delay100us() //@11.0592MHz
{
unsigned char i;
nop();
i = 43;
while (--i);
}
main() //主函數
{
while(1)
{
if (key1 == 0 || key2 == 0)
{
delay_ms(10);
if (key1 == 0)
Delay500us(); // 1KHZ
else if(key2 == 0)
Delay250us(); // 2KHZ
}else
{
Delay100us(); // 5KHZ
}
Buzzer=~Buzzer; //喇叭驅動位取反
}
}
程序中檢測KEY1和KEY2的狀態,當按下KEY1時候,修改蜂鳴器驅動頻率為1KHZ,KEY2按鍵按下時候,蜂鳴器驅動頻率為2KHZ,可以聽到不同的聲音效果。
注意:軟體精確延時時間可以利用STC-ISP工具實現。
一葉孤沙出品:一沙一世界,一葉一菩提