OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5358|回复: 8

程序求助,这个程序是使单片机测距,距离小于15cm时蜂鸣器报警,然而我的蜂鸣器一直不报警,程序可以下载

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-29
在线时间
4 小时
发表于 2017-7-29 23:14:18 | 显示全部楼层 |阅读模式
程序如下:
/***********************************************************************************************************/
//HC-SR04 3?éù2¨2a?à?£?é DEMO 3ìDò
//?§??£o11?£0592
//3ìDò   QQ£o  517535000
//taobaoμê?ì£ohttp://shop58246706.taobao.com
//?ó??£o?£?éTRIG?ó P1.2  ECH0 ?óP1.1
//′??ú2¨ì??ê9600
/***********************************************************************************************************/   
#include <reg51.h>
#include   <intrins.h>
    #include   <STDIO.H>
sbit Beep =  P1^5 ;
sbit  RX = P1^1;
sbit  TX = P1^2;
    #define uchar unsigned  char
    #define uint  unsigned   int  

unsigned int  time=0;
unsigned int  timer=0;
float         S=0;
    bit           flag =0;

/********************************************************/
    void Conut(void)
{
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;
  S=(time*1.87)/100;   

   
}

void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
  while(--i)
  {
   j=10;
   while(--j);
  }
}

}
     void zd0() interrupt 1    //T0?D??ó?à′??êy?÷ò?3?,3?1y2a?à·??§
  {
    flag=1;        //?D??ò?3?±ê??
  }
/********************************************************/
   void  StartModule()            //T1?D??ó?à′é¨?èêy??1üoí??800MS???ˉ?£?é
  {
   TX=1;                    //800MS  ???ˉò?′??£?é
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   TX=0;

if (S<15)
   {
   
  Beep= '1';
    delayms(3000);
}
else
{
  Beep= '0';
  delayms(3000);
  
}

  }
/********************************************************/
void main(void)
{  
    TMOD=0x21;     //éèT0?a·?ê?1£?GATE=1£?
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;  
ET0=1;             //?êDíT0?D??
TR1=1;      //?a???¨ê±?÷
TI=1;
EA=1;      //?a??×ü?D??

while(1)
{
  StartModule();
  while(!RX);  //μ±RX?aá?ê±μè′y
  TR0=1;       //?a????êy
  while(RX);   //μ±RX?a1??êy2¢μè′y
  TR0=0;    //1?±???êy
     Conut();   //????
  delayms(100);  //100MS
}

}            

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-29
在线时间
4 小时
 楼主| 发表于 2017-7-29 23:20:13 | 显示全部楼层
原来两个分开的程序分别是蜂鸣器报警和测距串口显示都没问题
蜂鸣器:
#include <reg51.h>
sbit Beep =  P1^5 ;
void delay(unsigned int i) ;
void main()
{
         Beep= 1;
         delay(5);
         Beep= 0;
         delay(5);
}

void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}



串口超声波测距:
/***********************************************************************************************************/
//HC-SR04 &sup3;&not;&Eacute;ù&sup2;¨&sup2;&acirc;&frac34;à&Auml;&pound;&iquest;é DEMO &sup3;&Igrave;&ETH;ò
//&frac34;§&Otilde;&ntilde;&pound;&ordm;11&iexcl;&pound;0592
//&sup3;&Igrave;&ETH;ò          QQ&pound;&ordm;  517535000
//taobao&micro;ê&AElig;&Igrave;&pound;&ordm;http://shop58246706.taobao.com
//&frac12;&Oacute;&Iuml;&szlig;&pound;&ordm;&Auml;&pound;&iquest;éTRIG&frac12;&Oacute; P1.2  ECH0 &frac12;&Oacute1.1
//&acute;&reg;&iquest;&Uacute;&sup2;¨&Igrave;&Oslash;&Acirc;&Ecirc;9600
/***********************************************************************************************************/          
        #include   <AT89X51.H>
        #include   <intrins.h>
    #include   <STDIO.H>

    #define uchar unsigned  char
    #define uint  unsigned   int  
        #define  RX  P1_1
    #define  TX  P1_2
  

        unsigned int  time=0;
        unsigned int  timer=0;
        float         S=0;
    bit           flag =0;
       

/********************************************************/
    void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         S=(time*1.87)/100;     //&Euml;&atilde;&sup3;&ouml;&Agrave;&acute;&Ecirc;&Ccedil;CM
         if(flag==1)                    //&sup3;&not;&sup3;&ouml;&sup2;&acirc;&Aacute;&iquest;
         {
          flag=0;
          printf("-----\n");
         }

          printf("S=%f\n",S);
        }
/********************************************************/
void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
/********************************************************/
     void zd0() interrupt 1                  //T0&Ouml;&ETH;&para;&Iuml;&Oacute;&Atilde;&Agrave;&acute;&frac14;&AElig;&Ecirc;&yacute;&AElig;÷&Ograve;&ccedil;&sup3;&ouml;,&sup3;&not;&sup1;&yacute;&sup2;&acirc;&frac34;à·&para;&Icirc;§
  {
    flag=1;                                                         //&Ouml;&ETH;&para;&Iuml;&Ograve;&ccedil;&sup3;&ouml;±ê&Ouml;&frac34;
  }
/********************************************************/
   void  StartModule()                          //T1&Ouml;&ETH;&para;&Iuml;&Oacute;&Atilde;&Agrave;&acute;&Eacute;¨&Atilde;è&Ecirc;&yacute;&Acirc;&euml;&sup1;&Uuml;&ordm;&Iacute;&frac14;&AElig;800MS&AElig;&ocirc;&para;&macr;&Auml;&pound;&iquest;é
  {
          TX=1;                                         //800MS  &AElig;&ocirc;&para;&macr;&Ograve;&raquo;&acute;&Icirc;&Auml;&pound;&iquest;é
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          TX=0;
  }
/********************************************************/
void main(void)
{  
    TMOD=0x21;                   //&Eacute;èT0&Icirc;&ordf;·&frac12;&Ecirc;&frac12;1&pound;&not;GATE=1&pound;&raquo;
        SCON=0x50;
        TH1=0xFD;
        TL1=0xFD;
        TH0=0;
        TL0=0;
        TR0=1;  
        ET0=1;             //&Ocirc;&Ecirc;&ETH;íT0&Ouml;&ETH;&para;&Iuml;
        TR1=1;                           //&iquest;&ordf;&AElig;&ocirc;&para;¨&Ecirc;±&AElig;÷
        TI=1;

        EA=1;                           //&iquest;&ordf;&AElig;&ocirc;×&Uuml;&Ouml;&ETH;&para;&Iuml;


        while(1)
        {
         StartModule();
         while(!RX);                //&micro;±RX&Icirc;&ordf;&Aacute;&atilde;&Ecirc;±&micro;&Egrave;&acute;&yacute;
         TR0=1;                            //&iquest;&ordf;&AElig;&ocirc;&frac14;&AElig;&Ecirc;&yacute;
         while(RX);                        //&micro;±RX&Icirc;&ordf;1&frac14;&AElig;&Ecirc;&yacute;&sup2;&cent;&micro;&Egrave;&acute;&yacute;
         TR0=0;                                //&sup1;&Oslash;±&Otilde;&frac14;&AElig;&Ecirc;&yacute;
     Conut();                        //&frac14;&AElig;&Euml;&atilde;
         delayms(100);                //100MS

        }

}              
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-29
在线时间
4 小时
 楼主| 发表于 2017-8-12 23:19:23 | 显示全部楼层
有人吗
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2011-10-1
在线时间
13 小时
发表于 2017-8-15 19:24:31 | 显示全部楼层
fuestck 发表于 2017-7-29 23:20
原来两个分开的程序分别是蜂鸣器报警和测距串口显示都没问题
蜂鸣器:
#include

程序问题
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-29
在线时间
4 小时
 楼主| 发表于 2017-8-20 18:36:49 | 显示全部楼层
我又把程序改了一下 不过蜂鸣器响声很小
/***********************************************************************************************************/
//HC-SR04 超声波测距模块 DEMO 程序
//晶振:11。0592
//程序          QQ:  517535000
//taobao店铺:http://shop58246706.taobao.com
//接线:模块TRIG接 P1.2  ECH0 接P1.1
//串口波特率9600
/***********************************************************************************************************/          
         
        #include   <intrins.h>
    #include   <STDIO.H>
         #include <reg51.h>       

    #define uchar unsigned  char
    #define uint  unsigned   int  
        sbit  RX=P1^1;
    sbit  TX=P1^2;
          sbit Beep=P1^5;
        void delay(unsigned int i) ;
       
        unsigned int  time=0;
        unsigned int  timer=0;
        float         S=0;
    bit           flag =0;
       






/********************************************************/
    void Conut(void)

        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         S=(time*1.87)/100;     //算出来是CM
         if(flag==1)                    //超出测量
         {
          flag=0;
          printf("-----\n");
         }

          printf("S=%f\n",S);
           {
       
}
         
         
    if(S<15)         
   
         Beep=1;          
        delay(5);
         Beep=0;          
        delay(5);
       
        }

/********************************************************/
void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}   


/********************************************************/
     void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  {
    flag=1;                                                         //中断溢出标志
  }
/********************************************************/
   void  StartModule()                          //T1中断用来扫描数码管和计800MS启动模块
  {
          TX=1;                                         //800MS  启动一次模块
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          TX=0;
  
         
  
  }



/********************************************************/
void main(void)
{  
    TMOD=0x21;                   //设T0为方式1,GATE=1;
        SCON=0x50;
        TH1=0xFD;
        TL1=0xFD;
        TH0=0;
        TL0=0;
        TR0=1;  
        ET0=1;             //允许T0中断
        TR1=1;                           //开启定时器
        TI=1;

        EA=1;                           //开启总中断


        while(1)
        {
         StartModule();
         while(!RX);                //当RX为零时等待
         TR0=1;                            //开启计数
         while(RX);                        //当RX为1计数并等待
         TR0=0;                                //关闭计数
     Conut();                        //计算

       
        delay(100);        //100MS

        }



}         
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-29
在线时间
4 小时
 楼主| 发表于 2017-8-21 20:45:33 | 显示全部楼层
有人帮忙吗
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-8-24
在线时间
6 小时
发表于 2017-8-24 10:45:11 | 显示全部楼层
   if(S<15)         
   
         Beep=1;         
        delay(5);
         Beep=0;         
        delay(5);
        
        }你有想过这样子写蜂鸣器怎么响吗,,,流水灯闪灭还需要加个死循环的的呀。。你这响一声就没。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-9-11
在线时间
4 小时
发表于 2019-9-17 16:46:06 | 显示全部楼层
现在解决了吗
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

高级会员

Rank: 4

积分
534
金钱
534
注册时间
2020-11-26
在线时间
69 小时
发表于 2020-11-27 09:09:35 | 显示全部楼层
我的也是雷达不起作用,蜂鸣器声音小
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 06:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表