欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2571|回復: 7
收起左側

如何將無源蜂鳴器加入單片機流水燈程序中?

[復制鏈接]
ID:817205 發表于 2020-9-20 09:32 | 顯示全部樓層 |閱讀模式
各位大佬好,這幾天剛開始學習單片機。學完流水燈后,有一個蜂鳴器的學習。但是用的蜂鳴器是有源的。而我自己買的開發板的無源的,導致一開始都不會響。后來查閱資料后,才知道無源的需要一定的變化周期才行,于是,我就寫了一個單獨的蜂鳴器單片機程序:
#include<reg52.h>
#define u16  unsigned int        
sbit beep=P1^5;
void delay(u16);
void delay(u16 i)
{
        while(i--);
}
void main()
{
        
        while(1)
        {
        beep=~beep;
        delay(60);
        }
}
現在是會響了,但是我要如何把這個加入到我的流水燈程序中呢。下面是我流水燈的程序:

#include<reg52.h>
#include <intrins.h>
#define uint  unsigned int
#define uchar unsigned char
uchar temp;
void delay(uint);  
void main()
{
        temp=0xfe;
        P2=temp;
        while(1)
        {
        temp=_crol_(temp,1);
        delay(180);
        P2=temp;
        }
}
void delay(uint z)
{
        uint X,Y;
         for (X=200;X>0;X--)
        {         for (Y=z;Y>0;Y--)
             {
                 };
         };
}

我自己也試著加了,但是蜂鳴器要么沒聲音了,要么就響一下,要么就是很輕,還請各位大佬指點指點啊


回復

使用道具 舉報

ID:213173 發表于 2020-9-20 14:28 | 顯示全部樓層
寫一個蜂鳴器函數加進去
#include<reg52.h>
#include <intrins.h>
#define uint  unsigned int
#define uchar unsigned char
sbit beep=P1^5;
uchar temp;
void delay(uint);  
void buzzer(uint);

void main()
{
        temp=0xfe;
        P2=temp;
        buzzer(1000);
        delay(760);
        while(1)
        {
                temp=_crol_(temp,1);
                P2=temp;
                buzzer(1000);//0.24s
                delay(760);  //0.76s
        }
}
void delay(uint z)
{
        uint X,Y;
        for(X=z;X>0;X--)
                for(Y=123;Y>0;Y--);
}
void buzzer(uint x)//0.24ms半周期蜂鳴器子程序
{
        uchar t;
        while(x--)
        {       
                beep=~beep;                                        //蜂鳴器諧振頻率2048Hz
                for(t=0;t<28;t++);                //0.24ms半周期=2083Hz
        }                                                       
        beep=1;//高電平停止       
}
回復

使用道具 舉報

ID:155507 發表于 2020-9-20 17:08 | 顯示全部樓層
給你改了一下試試。

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint  unsigned int
  4. #define uchar unsigned char
  5. #define u16  unsigned int        
  6. sbit beep=P1^5;
  7. uchar temp;
  8. void delay(uint);  

  9. void main()
  10. {
  11.         uint  Count=0;
  12.         temp=0xfe;
  13.         P2=temp;
  14.         while(1)
  15.         {       
  16.                 if(Count >= 180)
  17.                 {
  18.                         Count=0;
  19.                         temp=_crol_(temp,1);
  20.                 }
  21.                 P2=temp;
  22.                 Count++;
  23.                 beep=~beep;
  24.                 delay(1);
  25.         }
  26. }
  27. void delay(uint z)
  28. {
  29.         uint X, Y;
  30.         for (X=200;X>0;X--)
  31.         {
  32.                 for (Y=z;Y>0;Y--)
  33.                 {
  34.                 };
  35.         };
  36. }
復制代碼
回復

使用道具 舉報

ID:817205 發表于 2020-9-21 08:33 | 顯示全部樓層
wulin 發表于 2020-9-20 14:28
寫一個蜂鳴器函數加進去
#include
#include

可以了,謝謝大佬。原來是有一個專門的函數呀。太謝謝了。
回復

使用道具 舉報

ID:817205 發表于 2020-9-21 08:35 | 顯示全部樓層
angmall 發表于 2020-9-20 17:08
給你改了一下試試。

試了,可以同時進行了。太謝謝了。
回復

使用道具 舉報

ID:817205 發表于 2020-9-21 09:15 | 顯示全部樓層
wulin 發表于 2020-9-20 14:28
寫一個蜂鳴器函數加進去
#include
#include

大佬,能給說說這一段里的時間是通過什么確定的嗎?為什么要叫0.24ms半周期。這一塊還不是很懂。
void buzzer(uint x)//0.24ms半周期蜂鳴器子程序
{
        uchar t;
        while(x--)
        {      
                beep=~beep;                                        //蜂鳴器諧振頻率2048Hz
                for(t=0;t<28;t++);                //0.24ms半周期=2083Hz
        }                                                      
        beep=1;//高電平停止      
}
回復

使用道具 舉報

ID:213173 發表于 2020-9-21 11:50 | 顯示全部樓層
51小菜鳥啊 發表于 2020-9-21 09:15
大佬,能給說說這一段里的時間是通過什么確定的嗎?為什么要叫0.24ms半周期。這一塊還不是很懂。
void b ...

這個程序就相當于常用的延時函數,只不過在while循環過程中把蜂鳴器端口不斷翻轉并延時一點時間。至于為什么取0.24ms半周期是因為常見電磁式蜂鳴器規格書的諧振頻率2048Hz,在這個頻率附近可以獲得較佳音質和最大聲壓(最響)。計算方式1/2048/2=0.000244140625秒。實際應用不需要多么精確。參數x原則必須是偶數,響多長時間由參數x*0.24ms確定,為防止意外還是在最后寫beep=1;//高電平停止保險些。
回復

使用道具 舉報

ID:817205 發表于 2020-9-21 16:20 | 顯示全部樓層
wulin 發表于 2020-9-21 11:50
這個程序就相當于常用的延時函數,只不過在while循環過程中把蜂鳴器端口不斷翻轉并延時一點時間。至于為 ...

恩,多謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表