找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4423|回復(fù): 7
收起左側(cè)

如何在單片機(jī)超聲波測(cè)距系統(tǒng)中加入蜂鳴器報(bào)警功能?

[復(fù)制鏈接]
ID:626477 發(fā)表于 2019-10-20 17:40 | 顯示全部樓層 |閱讀模式
C語(yǔ)言沒(méi)學(xué)好,不會(huì)把報(bào)警程序加進(jìn)去,各位大神幫我看看怎么改?實(shí)現(xiàn)的功能就是當(dāng)計(jì)算出的距離 S<100時(shí),蜂鳴器報(bào)警

單片機(jī)源程序如下:
#include<reg51.h>
#include<intrins.h>
#include"lcd.h"
sbit Trig = P2^1;
sbit Echo = P2^0;
unsigned char PuZh[]=" The Ultrasonic ";
unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
static unsigned char DisNum = 0; //顯示用指針  
       unsigned int  time=0;
   unsigned long S=0;
   bit      flag =0;
   unsigned char disbuff[4]   ={ 0,0,0,0,};
/*******************************************************************************
* 函 數(shù) 名         : Conut()
* 函數(shù)功能   : 主函數(shù)
* 輸    入         : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100;     //算出來(lái)是CM
if((S>=700)||flag==1) //超出測(cè)量范圍顯示“-”
{
  flag=0;

  DisplayOneChar(0, 1, ASCII[11]);
  DisplayOneChar(1, 1, ASCII[10]);//顯示點(diǎn)
  DisplayOneChar(2, 1, ASCII[11]);
  DisplayOneChar(3, 1, ASCII[11]);
  DisplayOneChar(4, 1, ASCII[12]);//顯示M
}
else
{
  disbuff[0]=S%1000/100;
  disbuff[1]=S%1000%100/10;
  disbuff[2]=S%1000%10 %10;
  DisplayOneChar(0, 1, ASCII[disbuff[0]]);
  DisplayOneChar(1, 1, ASCII[10]);//顯示點(diǎn)
  DisplayOneChar(2, 1, ASCII[disbuff[1]]);
  DisplayOneChar(3, 1, ASCII[disbuff[2]]);
  DisplayOneChar(4, 1, ASCII[12]);//顯示M
}
}
void zd0() interrupt 1  //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
  {
    flag=1; //中斷溢出標(biāo)志
  }
void  StartModule()          //啟動(dòng)模塊
  {
  Trig=1;                     //啟動(dòng)一次模塊
  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  _nop_();
  Trig=0;
  }
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void main(void)
{
TMOD=0x01;   //設(shè)T0為方式1,GATE=1;
TH0=0;
TL0=0;         
ET0=1;             //允許T0中斷
EA=1;   //開啟總中斷
LcdInit();
LcdShowStr(0,0,PuZh);
while(1)
{
StartModule();
     while(!Echo);//當(dāng)RX為零時(shí)等待
     TR0=1;    //開啟計(jì)數(shù)
     while(Echo);//當(dāng)RX為1計(jì)數(shù)并等待
     TR0=0;//關(guān)閉計(jì)數(shù)
         Conut();//計(jì)算
delayms(80);
}
}
補(bǔ)充:#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
extern S;
sbit beep =P1^5;
void Delay_100us(void)
{
uint i;
for(i=0;i<=9;i++)
{
_nop_();
}
}
void Main(void)
{
while(S<100)
{
beep =~beep;        //蜂鳴器線圈無(wú)電流
Delay_100us(); //延時(shí)100微秒
}
}


回復(fù)

使用道具 舉報(bào)

ID:626477 發(fā)表于 2019-10-21 16:35 | 顯示全部樓層
急需指導(dǎo)
回復(fù)

使用道具 舉報(bào)

ID:584556 發(fā)表于 2019-10-22 08:26 | 顯示全部樓層
如果你的超聲波測(cè)距沒(méi)有問(wèn)題,那么你只需要判斷你的距離,小于某值打開蜂鳴器就行了,非常簡(jiǎn)單
回復(fù)

使用道具 舉報(bào)

ID:626477 發(fā)表于 2019-10-24 15:42 | 顯示全部樓層
一泓秋 發(fā)表于 2019-10-22 08:26
如果你的超聲波測(cè)距沒(méi)有問(wèn)題,那么你只需要判斷你的距離,小于某值打開蜂鳴器就行了,非常簡(jiǎn)單

已解決,謝謝
回復(fù)

使用道具 舉報(bào)

ID:643576 發(fā)表于 2019-11-29 20:27 | 顯示全部樓層
你補(bǔ)充的是報(bào)警的程序嗎
回復(fù)

使用道具 舉報(bào)

ID:904819 發(fā)表于 2021-4-15 08:13 | 顯示全部樓層

樓主這個(gè)問(wèn)題解決了嗎,可以麻煩指導(dǎo)一下嗎
回復(fù)

使用道具 舉報(bào)

ID:904819 發(fā)表于 2021-4-15 09:43 來(lái)自手機(jī) | 顯示全部樓層
樓主可以指導(dǎo)一下我嗎,我也想插入一個(gè)蜂鳴器的程序
回復(fù)

使用道具 舉報(bào)

ID:906091 發(fā)表于 2021-4-15 10:33 | 顯示全部樓層
將相應(yīng)的程序插入位置,然后設(shè)置界限值,達(dá)到報(bào)警效果
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表