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

標題: 單片機新手疑惑,我的蜂鳴器怎么不響啊? [打印本頁]

作者: cheng51    時間: 2019-2-2 12:07
標題: 單片機新手疑惑,我的蜂鳴器怎么不響啊?
放假焊了一個倒計時器。設想,倒計時時間結束后蜂鳴器鳴響。但是實際上蜂鳴器壓根沒動靜。但是單獨使用時蜂鳴器聲音很大。困惑了一天了。
使用的STC11F02E和74HC595搭建的。數碼管是0.36共陰,晶振使用12MHz的,電容是22PF的,蜂鳴器是5V無源的。

電路原理圖如下:


制作出來的實物圖如下:


放一下單片機代碼。
#include <stc11f02e.h>
#include <intrins.h>

sbit BEE = P3^7;
sbit ADDR3 = P1^0;
sbit ADDR2 = P1^1;
sbit ADDR1 = P1^2;
sbit ADDR4 = P1^3;

sbit KEY0 = P3^2;
sbit KEY1 = P3^3;

sbit P_HC595_SER = P1^4;        //串行數據輸入
sbit OE = P1^5;                    //輸出允許控制
sbit P_HC595_RCLK = P1^6;        //三態輸出鎖存器的時鐘輸入
sbit P_HC595_SRCLK = P1^7;        //移位寄存器的時鐘輸入

unsigned char code t_display[] = {0x05,0x7d,0x46,0x54,0x3c,0x94,0x84,0x5d,0x04,0x14};
unsigned char LED4[4];
unsigned char display_index = 0;    //位選指示標志

unsigned int Time_User;    //預設時間
unsigned char cnt = 0;    //1s指示標志
bit B_P;            //蜂鳴器指示

void Init_System();        //初始化函數
void Send_595(unsigned char dat);   
void DisplayScan(void);
void Delay_1ms(void);
void Delay_10ms(void);
void Buzzer(void);        //蜂鳴器函數

void main(void)
{
    Init_System();
    while(1)
    {   
        while(B_P==1)
        {
            Buzzer();
        }
        
        LED4[0] = ~(t_display[Time_User/60/10]);   
        LED4[1] = ~(t_display[Time_User/60%10]&0xfb);
        LED4[2] = ~(t_display[Time_User%60/10]);
        LED4[3] = ~(t_display[Time_User%60%10]);
        
        DisplayScan();

    }
   
}

void Init_System()
{
    TMOD = 0x01;
    TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    ET0 = 1;
    TR0 = 0;
        
    EX0 = 1;
    IT0 = 1;
    EX1 = 1;
    IT1 = 1;
   
    EA = 1;
    OE = 0;
    B_P=0;
   
    Time_User=180;
   
}

void Send_595(unsigned char dat)
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        if(dat & 0x80)      P_HC595_SER = 1;
        else                P_HC595_SER = 0;
        P_HC595_SRCLK = 1;
        P_HC595_SRCLK = 0;
        dat = dat<<1;
    }
}

void DisplayScan(void)
{
    switch(display_index)
    {
        case(0):ADDR1=0;ADDR2=1;ADDR3=1;ADDR4=1;Send_595(LED4[0]);display_index++;break;
        case(1):ADDR1=1;ADDR2=0;ADDR3=1;ADDR4=1;Send_595(LED4[1]);display_index++;break;
        case(2):ADDR1=1;ADDR2=1;ADDR3=0;ADDR4=1;Send_595(LED4[2]);display_index++;break;
        case(3):ADDR1=1;ADDR2=1;ADDR3=1;ADDR4=0;Send_595(LED4[3]);display_index=0;break;
        default:break;
    }
    P_HC595_RCLK=0;
    _nop_();
    _nop_();
    P_HC595_RCLK=1;
    Delay_1ms();
}
   
void timer0(void) interrupt 1
{
    TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    cnt++;
    if(cnt==20)
    {
        cnt = 0;
        Time_User--;
    }
    if(Time_User==0)
    {
        B_P=1;
        TR0=0;
    }
}

void exint0(void) interrupt 0
{
    if(KEY0==0)
    {
        Delay_10ms();
        if(KEY0==0)
        {
            if(Time_User==0)    TR0=0;
            else   
            {
                TR0=!TR0;
            }
            B_P=0;
        }
        while(!KEY0);
    }
}

void exint1(void) interrupt 2
{
    if(KEY1==0)
    {
        Delay_10ms();
        if(KEY1==0)
        {
            TR0=0;
            Time_User+=15;
            if(Time_User==3600)    Time_User=0;
            B_P=0;
        }
        while(!KEY1);
    }
}

void Delay_1ms(void)
{
    unsigned char i,j;
    _nop_();
    _nop_();
    i = 12;
    j = 168;
    do
    {
        while(--j);
    }while(--i);
}

void Delay_10ms(void)
{
    unsigned char i,j;
   
    _nop_();
    _nop_();
    i=117;
    j=183;
    do
    {
        while(--j);
    }while(--i);
}

void buzzer(void)
{
        BEE = 0;
        Delay_1ms();
        BEE = 1;
        Delay_1ms();
}

放一下圖片


index2.jpg (155.2 KB, 下載次數: 40)

這是背面

這是背面

作者: suuy79    時間: 2019-2-2 16:40
1、首先說蜂鳴器:
你說的單獨試蜂鳴器聲音很大,估計你買的蜂鳴器是有源的。
2、其次,有木有可能沒有按“開始按鈕(KEY0)”?
作者: wulin    時間: 2019-2-2 16:48
你的無源蜂鳴器函數不對,只振蕩一個周期1ms哪能聽到響?
給你一個簡單的無源蜂鳴器函數(12MHz 1T),如果用定時器做振蕩源更好些。
0.24ms半周期蜂鳴器程序
void buzzer(unsigned int x)                //2x為1個振蕩周期
{                                                                 //x=1000可以鳴響0.24S
        unsigned char t;
        while(x--)
        {       
                BEE=~BEE;                                //蜂鳴器諧振頻率2048Hz
                for(t=0;t<210;t++);                //0.24ms半周期=2083Hz
        }                                                       
        BEE=1;       
}
作者: taotie    時間: 2019-2-2 18:04
pnp管與npn管電壓極性有區別~~

b3b7d0a20cf431ad762dda5d4236acaf2fdd98d3.png (27.57 KB, 下載次數: 41)

b3b7d0a20cf431ad762dda5d4236acaf2fdd98d3.png

作者: taotie    時間: 2019-2-2 18:11
換個npn管試一試~~
作者: y_z_q3963    時間: 2019-2-2 20:00
蜂鳴器子程序里的延時太短了吧,無源蜂鳴器按這個延時出來的聲音頻率太高,不在聽覺范圍內所以聽不到。
作者: cheng51    時間: 2019-2-2 23:27
suuy79 發表于 2019-2-2 16:40
1、首先說蜂鳴器:
你說的單獨試蜂鳴器聲音很大,估計你買的蜂鳴器是有源的。
2、其次,有木有可能沒有按 ...

我表達失誤了,是只循環蜂鳴器函數時聲音很大。蜂鳴器確實是無源的,有源的尺寸比這個大一圈。按鍵的話我不知道怎么修改。
作者: cheng51    時間: 2019-2-2 23:32
taotie 發表于 2019-2-2 18:11
換個npn管試一試~~

注釋掉其他的內容,只循環蜂鳴器函數,蜂鳴器可以發聲,應該不是三極管的問題。謝謝了。
作者: cheng51    時間: 2019-2-2 23:36
y_z_q3963 發表于 2019-2-2 20:00
蜂鳴器子程序里的延時太短了吧,無源蜂鳴器按這個延時出來的聲音頻率太高,不在聽覺范圍內所以聽不到。

嘗試增加了時長還是聽不到。但是只運行蜂鳴器函數可以聽到聲音。費解。
作者: cheng51    時間: 2019-2-2 23:43
wulin 發表于 2019-2-2 16:48
你的無源蜂鳴器函數不對,只振蕩一個周期1ms哪能聽到響?
給你一個簡單的無源蜂鳴器函數(12MHz 1T),如果 ...

謝謝老師了。我臨時有事不能繼續完成這個小制作,我回頭試試。
作者: iofree    時間: 2019-2-3 18:02
蜂鳴器函數延時太短了,再增加一個循環函數試試
作者: cheng51    時間: 2019-2-6 15:14
本帖最后由 cheng51 于 2019-2-6 17:22 編輯

解決了。是蜂鳴器運行時干擾或者是負載太大,導致單片機直接復位,原來的代碼問題不大。在正負極間裝了一個104獨石電容和10uf的點解電容后就好了。謝謝大家了。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1