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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何在單片機超聲波測距系統中加入蜂鳴器報警功能?

[復制鏈接]
ID:626477 發表于 2019-10-20 17:40 | 顯示全部樓層 |閱讀模式
C語言沒學好,不會把報警程序加進去,各位大神幫我看看怎么改?實現的功能就是當計算出的距離 S<100時,蜂鳴器報警

單片機源程序如下:
#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,};
/*******************************************************************************
* 函 數 名         : Conut()
* 函數功能   : 主函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100;     //算出來是CM
if((S>=700)||flag==1) //超出測量范圍顯示“-”
{
  flag=0;

  DisplayOneChar(0, 1, ASCII[11]);
  DisplayOneChar(1, 1, ASCII[10]);//顯示點
  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]);//顯示點
  DisplayOneChar(2, 1, ASCII[disbuff[1]]);
  DisplayOneChar(3, 1, ASCII[disbuff[2]]);
  DisplayOneChar(4, 1, ASCII[12]);//顯示M
}
}
void zd0() interrupt 1  //T0中斷用來計數器溢出,超過測距范圍
  {
    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 delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void main(void)
{
TMOD=0x01;   //設T0為方式1,GATE=1;
TH0=0;
TL0=0;         
ET0=1;             //允許T0中斷
EA=1;   //開啟總中斷
LcdInit();
LcdShowStr(0,0,PuZh);
while(1)
{
StartModule();
     while(!Echo);//當RX為零時等待
     TR0=1;    //開啟計數
     while(Echo);//當RX為1計數并等待
     TR0=0;//關閉計數
         Conut();//計算
delayms(80);
}
}
補充:#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;        //蜂鳴器線圈無電流
Delay_100us(); //延時100微秒
}
}


回復

使用道具 舉報

ID:906091 發表于 2021-4-15 10:33 | 顯示全部樓層
將相應的程序插入位置,然后設置界限值,達到報警效果
回復

使用道具 舉報

ID:904819 發表于 2021-4-15 09:43 來自觸屏版 | 顯示全部樓層
樓主可以指導一下我嗎,我也想插入一個蜂鳴器的程序
回復

使用道具 舉報

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

樓主這個問題解決了嗎,可以麻煩指導一下嗎
回復

使用道具 舉報

ID:643576 發表于 2019-11-29 20:27 | 顯示全部樓層
你補充的是報警的程序嗎
回復

使用道具 舉報

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

已解決,謝謝
回復

使用道具 舉報

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

使用道具 舉報

ID:626477 發表于 2019-10-21 16:35 | 顯示全部樓層
急需指導
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本高清不卡视频 | 在线视频91 | 日本久久综合 | 欧美日韩在线一区二区 | 九九热免费在线观看 | 欧美中文字幕在线观看 | 福利色导航| 欧美激情在线播放 | 韩日一区| 一区二区在线视频 | 超碰在线免费公开 | 男女国产视频 | 亚洲精品乱码 | 亚洲精品国产成人 | 国产91精品久久久久久久网曝门 | 色综合视频| 99re国产视频 | 国产精品美女久久久久久久网站 | 久久精品国产久精国产 | 男人的天堂avav | 亚洲国产一区二区在线 | 9191在线观看 | 精品国产91亚洲一区二区三区www | 中文字幕在线三区 | 国产成人一区 | av片网站 | 国产精品久久久久久久久久免费看 | 粉嫩在线 | 九九久久久 | 国产精品永久久久久 | 天天操夜夜操 | 精品国产一区二区国模嫣然 | 91大神新作在线观看 | 91色在线| 日韩中文字幕一区二区 | 成年人视频在线免费观看 | 成人av一区二区三区 | 美女操网站 | 中文字幕日本一区二区 | 欧美一级视频 | 性xxxxx|