51微控制器驅動無源蜂鳴器
在學習過程中遇到如下例題:8個發光管由上至下間隔1s流動,其中每個管亮500ms,滅500ms,亮時蜂鳴器響,滅時關閉蜂鳴器,一直重複下去。
流水燈的程式相對我個人來說比較簡單,但是蜂鳴器有些難度,正常給I/0口一個訊號,蜂鳴器既然不響,後經查證是無源蜂鳴器;
無源的蜂鳴器,就要通過IO口輸出振盪訊號來驅動蜂鳴器
蜂鳴器簡介:蜂鳴器根據結構不同分為壓電式蜂鳴器和電磁式蜂鳴器;而兩種蜂鳴器又分為有源蜂鳴器和無源蜂鳴器,這裡的源特指振盪源;有源蜂鳴器直接加電就可以響起,無源蜂鳴器需要我們給提供振盪源。理想的振盪源為一定頻率的方波。
由於系統採用了無源蜂鳴器,所以需要我們通過程式設計來控制I/0口的翻轉來產生一定頻率的方波訊號。本文采用預設頻率
本程式只是通過簡單延時達到驅動蜂鳴器的效果。
#include <reg52.h>
sbit buzzer = P1^5;
void delayms(unsigned int xms) //延時函式 ,延時xms
{
unsigned int i , j;
for(i = 0; i < xms; i++)
for(j = 0; j < 110; j++);
}
void fengming() //蜂鳴函式,脈寬t
= 1ms 週期T = 2ms 頻率f
= 0.5khz 實際發現延時1ms的時候效果最好
{
buzzer = 0; //給P1.5口送低電平
delayms(1); //延時1ms
buzzer = 1; //給P1.5口送高電平
delayms(1); //延時1ms
}
void main()
{
while(1)
{
fengming();
}
}