久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7775|回復: 26
收起左側

這是單片機超聲波測距,我想讓它超過一定距離使蜂鳴器響,可蜂鳴器一直不響求詳細解答

  [復制鏈接]
ID:301339 發表于 2018-5-5 11:45 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

         
sbit Lcd1602_RS = P2^6;
sbit Lcd1602_RW = P2^5;
sbit Lcd1602_EN = P2^7;
       
sbit Trig = P2^1;                                                      
sbit Echo = P2^0;
sbit beep = P2^3;

unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};                  
unsigned int  time=0;
unsigned long S=0;
bit      flag =0;
uchar disdat[4] ={0,0,0,0,};

void delayms(uint ms)
{
    uchar i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                  
                }
        }
}


void Lcd1602_Write_com(uchar cmd)
{
        Lcd1602_RS=0;
        P0=cmd;
        delayms(1);
        Lcd1602_EN =1;
    delayms(1);
        Lcd1602_EN =0;
    delayms(1);
}

void Lcd1602_Write_Data(uchar shu)
{
        Lcd1602_RS=1;
        P0=shu;
        delayms(1);
        Lcd1602_EN =1;
    delayms(1);
        Lcd1602_EN =0;
        delayms(1);
}

void write_1602(uchar add,uchar sj)
{
        Lcd1602_Write_com(0x80+0x40+add);
        Lcd1602_Write_Data(sj) ;
}               

void zifuchuan(uchar *ch)         
{
    while(*ch!=0)   
    Lcd1602_Write_Data(*ch++);
        delayms(5);
}                                                                                                                                                                                                                    //仔細看一下那個程序

void feng()
{
       
   if((S>=50)||flag==1)
        {
               
                beep = ~beep;           
        }
        else
        {
                 
                beep = 1;                //取消報警
        }       
}

void LcdInit()                                               
{
         Lcd1602_EN =0;
         Lcd1602_RW =0;
         Lcd1602_Write_com(0x38);  
     Lcd1602_Write_com(0x0c);  
         Lcd1602_Write_com(0x06);  
         Lcd1602_Write_com(0x80);  
         Lcd1602_Write_com(0x01);  
         zifuchuan("cejujuli") ;
}
  void Conut(void)
{
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         S=(time*1.7)/100;
         disdat[0]=S%1000/100;                          
         disdat[1]=S%1000%100/10;                  
         disdat[2]=S%1000%10%10;                  
         write_1602(1,disdat[0]+0x30);                                         
         write_1602(2,disdat[1]+0x30);               
         write_1602(3,disdat[2]+0x30);
         write_1602(5,'c');
     write_1602(6,'m');
         
         

         }                                  


void zd0() interrupt 1                  
  {
    flag=1;                                                       
  }

void  StartModule()                         
  {
          Trig=1;                                            
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
  }




void main(void)
{

         delayms(5);
     LcdInit();
         TMOD=0x01;                  
         TH0=0;
         TL0=0;         
         ET0=1;            
         EA=1;       
         beep = 0;                    
         delayms(150);
         
        while(1)
{
         StartModule();
     while(!Echo);               
         TR0=1;                            
     while(Echo);                       
         TR0=0 ;
         if((S>=50)||flag==1)
{               
         flag = 0;
                   feng ();    //報警函數
                        if(beep == 1);
                          Conut();               
     delayms(5);
       
        }
                       
}
  }

評分

參與人數 1黑幣 +10 收起 理由
cciejs12345 + 10

查看全部評分

回復

使用道具 舉報

ID:241128 發表于 2018-5-5 15:38 | 顯示全部樓層
S=(time*1.7)/100; 里面的time 不知道會不會計算有問題使S得出結果一直小于50,還有你蜂鳴器函數的這句if((S>=50)||flag==1)這個判斷flag==1是不是已經沒有意義了,只要判斷S的值就可以了。你在程序運行蜂鳴器函數前flag的值永遠為0,。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:301339 發表于 2018-5-6 10:22 | 顯示全部樓層
fzhlpp 發表于 2018-5-5 15:38
S=(time*1.7)/100; 里面的time 不知道會不會計算有問題使S得出結果一直小于50,還有你蜂鳴器函數的這句if( ...

你說的這個問題對我來說沒影響而且S的算法是正確的就是正常測距就是超過50cm就會響至于中斷等于1就是超過一定時間沒波返回會中斷,我這個蜂鳴器模塊不是很清楚一是不響我想問一下哪里有問題,求解答謝謝

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:269211 發表于 2018-5-6 17:26 | 顯示全部樓層
你只要判斷S就行了,上面子函數feng(),好像沒什么意義的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:241128 發表于 2018-5-7 09:10 | 顯示全部樓層
523633035 發表于 2018-5-6 10:22
你說的這個問題對我來說沒影響而且S的算法是正確的就是正常測距就是超過50cm就會響至于中斷等于1就是超過 ...

建議單獨測試你的蜂鳴器,就是去掉判斷直接讓蜂鳴器在主循環里工作以檢查你的蜂鳴器模塊是否正常。如果這樣都不叫,說明蜂鳴器模塊是壞的。你的S算法是正確的有什么依據嗎?大于50你有方法判斷確認的是吧,如果是的話那只有硬件問題了。程序目前我看對蜂鳴器鳴叫沒有問題。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:301339 發表于 2018-5-7 15:21 | 顯示全部樓層
fzhlpp 發表于 2018-5-7 09:10
建議單獨測試你的蜂鳴器,就是去掉判斷直接讓蜂鳴器在主循環里工作以檢查你的蜂鳴器模塊是否正常。如果這 ...

很簡單就是距離公式經過化簡單位轉換得到的,我通過實物測出來沒有錯誤,不過我蜂鳴器不知怎么用那個模塊好像有問題,我就是再能測距的基礎上加了一個限制超過這個限制蜂鳴器就會響

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:301339 發表于 2018-5-7 15:22 | 顯示全部樓層
chaoself 發表于 2018-5-6 17:26
你只要判斷S就行了,上面子函數feng(),好像沒什么意義的

大佬能不能細說一下如何才能使它有意義,蜂鳴器模塊哪一部分有問題求解答謝謝,我的問題是單片機超過了設置的距離不會響應該是這個模塊用錯誤

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:192357 發表于 2018-5-7 20:16 | 顯示全部樓層
先不說程序是否正確,蜂鳴器是不是有源蜂鳴器,如果IO口單獨控制蜂鳴器,給個高電平看看蜂鳴器響不響,如果不響。可能是單片機的驅動電流不夠,加一個三極管驅動電路就能解決;也可能蜂鳴器壞了,那就更好解決了。
回復

使用道具 舉報

ID:241128 發表于 2018-5-8 12:14 | 顯示全部樓層
樓主還沒搞定啊,樓上這位說的也可以考慮一下,你先不管程序,把蜂鳴器直接用硬件方法讓它叫起來,測試你的蜂鳴器是怎么樣才能叫的然后用軟件去實現你的硬件功能。做這樣一個功能產品樓主對硬件應該不至于搞不定蜂鳴器的。蜂鳴器有源無源也是一個問題,別說你的是無源的哦。先用硬件讓他叫吧....
回復

使用道具 舉報

ID:301339 發表于 2018-5-9 17:42 | 顯示全部樓層
fzhlpp 發表于 2018-5-8 12:14
樓主還沒搞定啊,樓上這位說的也可以考慮一下,你先不管程序,把蜂鳴器直接用硬件方法讓它叫起來,測試你的 ...

我的是無源的我大體看了一下該模塊編程,蜂鳴器模塊沒有問題,我自己再看看
回復

使用道具 舉報

ID:326244 發表于 2018-5-9 20:09 | 顯示全部樓層

你只要判斷S就行了,上面子函數feng(),好像沒什么意義的
回復

使用道具 舉報

ID:241128 發表于 2018-5-10 08:37 | 顯示全部樓層
無源的那你的程序就驅動不了,你的程序只有一次IO口變化,無源的蜂鳴器是不會鳴叫的,要不斷變化IO口電平才能使無源蜂鳴器發出聲。
比如這樣:
void main()
{        
        while(1)
        {        
                beep=~beep;
                delay(10); //延時大約100us   通過修改此延時時間達到不同的發聲效果        
        }
}
這段代碼來自這里網友red_R的回復:http://www.zg4o1577.cn/bbs/dpj-112490-1.html
回復

使用道具 舉報

ID:301339 發表于 2018-5-13 17:37 | 顯示全部樓層
fzhlpp 發表于 2018-5-10 08:37
無源的那你的程序就驅動不了,你的程序只有一次IO口變化,無源的蜂鳴器是不會鳴叫的,要不斷變化IO口電平才 ...

謝謝你啊,我終于知道我哪錯了,我定義錯蜂鳴器引腳了真蠢
回復

使用道具 舉報

ID:306018 發表于 2018-5-17 09:24 | 顯示全部樓層
樓主能不能幫個忙,我也是做這個,我在程序上碰到一些問題。qq1522305747
回復

使用道具 舉報

ID:332006 發表于 2018-5-17 11:48 來自手機 | 顯示全部樓層
你確定你的蜂鳴器是有源的,其次在檢查接三極管沒
回復

使用道具 舉報

ID:332006 發表于 2018-5-17 11:48 來自手機 | 顯示全部樓層
你單獨測一下你的蜂鳴器先
回復

使用道具 舉報

ID:241128 發表于 2018-5-17 12:46 | 顯示全部樓層
523633035 發表于 2018-5-13 17:37
謝謝你啊,我終于知道我哪錯了,我定義錯蜂鳴器引腳了真蠢

恭喜恭喜!
如果你只修改定義引腳就正常了,那說明你的蜂鳴器是有源的。
回復

使用道具 舉報

ID:333473 發表于 2018-5-19 10:17 | 顯示全部樓層
先不說程序,首先你的蜂鳴器是哪種蜂鳴器?有源無源?
回復

使用道具 舉報

ID:333535 發表于 2018-5-19 11:14 | 顯示全部樓層
首先你的蜂鳴器是有源無源蜂鳴器.有源的,只要加電就響,無源的,要脈沖驅動,一般用1K赫茲,還要注意驅動電流夠不夠,不夠要加驅動電路。
回復

使用道具 舉報

ID:301339 發表于 2018-5-20 09:05 | 顯示全部樓層
fzhlpp 發表于 2018-5-17 12:46
恭喜恭喜!
如果你只修改定義引腳就正常了,那說明你的蜂鳴器是有源的。

不是我改了引腳,在蜂鳴器模塊上弄了一個While循環,使輸入電平不斷取反,并每次對它進行延時使它形成具有一定頻率的脈沖信號,我這個是最初版本好像沒改
回復

使用道具 舉報

ID:301339 發表于 2018-5-20 09:06 | 顯示全部樓層
lin81156418 發表于 2018-5-19 11:14
首先你的蜂鳴器是有源無源蜂鳴器.有源的,只要加電就響,無源的,要脈沖驅動,一般用1K赫茲,還要注意驅動 ...

嗯對是這樣的,無源的稍微麻煩一點點
回復

使用道具 舉報

ID:301339 發表于 2018-5-20 09:09 | 顯示全部樓層
fzhlpp 發表于 2018-5-10 08:37
無源的那你的程序就驅動不了,你的程序只有一次IO口變化,無源的蜂鳴器是不會鳴叫的,要不斷變化IO口電平才 ...

對必須給它輸入一個有一定頻率的電平,我用的這個然后隨便改了改不知哪錯了到最后發現引腳定義錯了,還是很謝謝你能夠認真看出來而不是糾結我的S測距公式
回復

使用道具 舉報

ID:301339 發表于 2018-5-20 09:13 | 顯示全部樓層
燦燕520 發表于 2018-5-17 11:48
你單獨測一下你的蜂鳴器先

恩沒問題我已經解決了謝謝
回復

使用道具 舉報

ID:301339 發表于 2018-5-20 09:14 | 顯示全部樓層
Tarantino丶 發表于 2018-5-19 10:17
先不說程序,首先你的蜂鳴器是哪種蜂鳴器?有源無源?

無源的
回復

使用道具 舉報

ID:301339 發表于 2018-5-25 17:09 | 顯示全部樓層
fzhlpp 發表于 2018-5-5 15:38
S=(time*1.7)/100; 里面的time 不知道會不會計算有問題使S得出結果一直小于50,還有你蜂鳴器函數的這句if( ...

我想問一下再給程序中定時器/計數器T0到底是執行的定時功能還是計數功能。當發射超聲波時開始計數接收到超聲波后停止計數,要按這樣說的話應該是定時功能吧。可是當ECHo端接收到一個信號后它會輸出一個持續的高電平,可這時候定時器/計數器T0已經停止計數了,但ECHo端輸出了一個持續的高電平就是超聲波測傳播時間,是不是該程序沒有用到該高電平,如果用到的話應該就是計數功能了吧,能不能解釋一下。
回復

使用道具 舉報

ID:63146 發表于 2018-5-25 19:29 | 顯示全部樓層
                        if(RX_BUF[0]==CMD[0]&&RX_BUF[1]==CMD[1]&&RX_BUF[2]==CMD[2]&&RX_BUF[3]==CMD[3])
                        {
                                //打開接收成功指示
                                //無線答應信號溫度       
                                tmpchange();
                                T_=tmp();
                                TX_BUF[0]=0xAA;
                                //T溫度
                                TX_BUF[1]=T_&0x00ff;
                                //RH濕度
                                TX_BUF[2]=(T_>>8)&0x00ff;
                                TX_BUF[3]=0xdd;
                                delay_ms(100);
                                RXLED_Y=1;                        //關閉接受射指示燈
                                TXLED_R=0;                        //打開發射指示燈
                                TX_Mode(TX_BUF);        // 把nRF24L01設置為發送模式并發送數據
                                Check_ACK(1);        // 等待發送完畢,清除TX FIFO
                                delay_ms(100);       
                                //發送成功指示
                                TXLED_R=1;                        //關閉發射指示燈
                                RX_Mode();                           // 設置為接收模式               
                        }
回復

使用道具 舉報

ID:526791 發表于 2019-5-4 09:45 | 顯示全部樓層
523633035 發表于 2018-5-20 09:05
不是我改了引腳,在蜂鳴器模塊上弄了一個While循環,使輸入電平不斷取反,并每次對它進行延時使它形成具 ...

有沒有完整的修改過的程序啊,我還是沒看懂,我也在做這個實驗
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩精品视频 | 国产精品99久久久久 | 婷婷色国产偷v国产偷v小说 | 亚洲一区二区精品视频 | 欧美一区免费 | 日韩欧美操 | 在线观看成人小视频 | 亚洲天堂男人的天堂 | 午夜爱爱毛片xxxx视频免费看 | 日韩中文字幕在线观看 | 久久在线 | 狠狠亚洲| 亚洲影音先锋 | 成人免费视频网站在线看 | 久久国产成人 | 国产欧美一区二区在线观看 | 国产目拍亚洲精品99久久精品 | 欧美国产视频 | 男人av在线播放 | 亚洲精品68久久久一区 | 国产精产国品一二三产区视频 | 日韩毛片免费看 | 成人免费在线观看 | 欧美黄色一区 | 激情网五月天 | 国产黄色大片 | 一区在线免费视频 | 中文字幕在线观看一区 | 亚洲91视频 | 午夜影院在线观看免费 | 久久久久中文字幕 | 欧美在线视频一区二区 | 国产成人精品一区二区三区视频 | 免费成人高清在线视频 | 国产日产精品一区二区三区四区 | 国产区精品在线观看 | 欧美一区二区三区四区五区无卡码 | 亚洲男人的天堂网站 | 日韩精品一区二区三区 | 综合久| 午夜精品一区二区三区免费视频 |