单片机驱动蜂鸣器(有源和无源)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                单片机驱动蜂鸣器(有源和无源)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                有源的驅動可直接通過GPIO輸出高低電平驅動:
#include "reg52.h" #define uchar unsigned char sbit beep = P2^0; //定義蜂鳴器的引腳void Delay_10us(unsigned int t) {while(t--); }void main() {while(1){//--------------有源-----------------------beep = ~beep; //高低電平切換Delay_10us(50000); //延時約500ms}}無源需要進行占空比計算輸出周期性電平來對無源蜂鳴器進行驅動
 占空比計算時間:占空比=輸出高電平的時間/周期
 而占空比通常為小數,如0.21,但是程序中時常會用整數作為占空比參數
 來計算輸出高電平的時間,所以通常有輸出高電平時間=占空比周期=占空比程序函數參數/100周期。
 所以可以設計這樣的函數:
由于蜂鳴器是低電平觸發,所以電平對應的輸出相反。
完整的程序為:
#include "reg52.h" #define uchar unsigned char sbit beep = P2^0; //定義蜂鳴器的引腳void Delay_10us(unsigned int time) {while(time--); }//輸入參數:頻數frequency,占空比duty 周期=頻數*每次延時時間 void Pwm(unsigned char frequency, unsigned char duty) {unsigned char low = frequency * duty / 100; //低電平延時次數unsigned char high = frequency - low; //高電平延時次數beep = 0; //蜂鳴器IO電平置低Delay_10us(low); //低電平延時時間beep = 1; //蜂鳴器IO電平置高Delay_10us(high);//高電平延時時間 }void main() {while(1){//--------------有源----------------------- // beep = ~beep; //高低電平切換 // Delay_10us(50000); //延時約500ms//--------------無源-----------------------Pwm(2000, 10); //周期100*10us,占空比50%——頻率:1KHz} }總結
以上是生活随笔為你收集整理的单片机驱动蜂鸣器(有源和无源)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: win10如何打开计算机窗口,Win10
- 下一篇: [CSCCTF 2019 Qual]Fl
