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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3659|回復: 4
打印 上一主題 下一主題
收起左側

RCW-0001型超聲波傳感器編程問題,紅色部分while(echo)那無法工作

[復制鏈接]
跳轉到指定樓層
樓主
RCW-0001型號的超聲波傳感器  寫的程序如下圖 主要問題是紅色部分while(echo)那無法工作 只要去掉就可以有數據傳回上位機
trigg是控制端 持續10毫秒可以產生測距波, echo為接收端根據其為高電平時間測距
  1. #include<reg52.h>
  2. #include<math.h>
  3. #define uchar unsigned char

  4. sbit trig=P0^5;
  5. sbit echo=P0^4;
  6. sbit d=P0^6;

  7. float a,b1,c1;
  8.        int b,c,i,j,k;        
  9.             char x[9];

  10. void main()
  11. {         

  12.             TMOD = 0x20;
  13.         SCON = 0x50;
  14.         TH1 = 0xFD;
  15.        TL1 = TH1;
  16.        PCON = 0x00;
  17.        EA = 1;
  18.        ES = 1;
  19.        TR1 = 1;
  20.            trig=0;
  21.            echo=1;
  22.            while(1)
  23.            {  
  24.                        
  25.                    TH0=0X00;TL0=0X00;
  26.                trig=1;
  27.                    k++;k++;k++;        k++; k++; k++;k++;k++;k++;
  28.                    trig=0;
  29.                    while(!echo);
  30.                    TR0=1;
  31.                   [color=#ff0000] while(echo);//無法運行 ,去掉可以運行[/color]
  32.                   
  33.                    a=TH0*256+TL0;
  34.                    a=a*12*17;           
  35.                    TR0=0;
  36.                    a=(a/11059.2)+0.7;        //修正誤差
  37.                     

  38.                    c1=modf(a,&b1);
  39.                    b=(int)(b1);
  40.                    c=(int)(1000*c1);
  41.                   
  42.                    x[0]=0x30+b/100;
  43.                    x[1]=0x30+b/10-10*(b/100);
  44.                    x[2]=0x30+b-10*(b/10);
  45.                    x[3]=0x2e;
  46.                    x[4]=0x30+c/100;
  47.                    x[6]=0x30+c/10-10*(c/100);
  48.                    x[7]=0x30+c-10*(c/10);
  49.                    x[8]='\0';
  50.                    for(i=0;i<9;i++)
  51.                       {   if((x[i]==0x30)&&(i<2))
  52.                               {    if(!(x[0]==0x30))
  53.                                                     {          SBUF=x[i];
  54.                                               while(!TI);
  55.                                               TI=0;
  56.                                                              }
  57.                                                    else
  58.                                                     {    SBUF=0x20;
  59.                                              while(!TI);
  60.                                              TI=0;
  61.                                                                 }
  62.                                           }
  63.                                    else {  SBUF=x[i];
  64.                                    while(!TI);
  65.                                     TI=0;
  66.                                                 }
  67.                             }
  68.                    for(i=0;i<110;i++)
  69.                        for(j=0;j<114;j++);
  70.                
  71.                 }
  72. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:318095 發表于 2018-6-3 10:57 | 只看該作者
這是改的程序分成模塊
#include<reg52.h>
#include<math.h>
#define uchar unsigned char

sbit trig=P0^5;
sbit echo=P0^4;
sbit d=P0^6;

float a,b1,c1;
       int b,c,i,j,k;       
            char x[9];
float ceju()
{                  
          SBUF=0X31; while(!TI);TI=0;
         
             
           TH0=0X00;TL0=0X00;
               trig=1;
                   k++;k++;k++;        k++; k++; k++;k++;k++;k++;k++;k++;k++;k++;k++;k++;
                   trig=0;  SBUF=0X32;while(!TI);TI=0;
                   while(!echo);
                   TR0=1;  SBUF=0X33; while(!TI);TI=0;
                    
                   //while(echo);
                        SBUF=0X34;  while(!TI);TI=0;
                   a=TH0*256+TL0;
                   a=a*12*17;          
                    TR0=0;
                   a=(a/11059.2)+0.7;        //修正誤差
                    SBUF=0X36;while(!TI);TI=0;
           return a;
}
void delay(b)
{
   
  for(i=1;i<b;i++)
    for(j=1;j<500;j++) ;
}
void songxian(float a)
{                    
           c1=modf(a,&b1);
                   b=(int)(b1);
                   c=(int)(1000*c1);
                  
                   x[0]=0x30+b/100;         
                   x[1]=0x30+b/10-10*(b/100);         
                   x[2]=0x30+b-10*(b/10);           
                   x[3]=0x2e;         
                   x[4]=0x30+c/100;         
                   x[6]=0x30+c/10-10*(c/100);
                   x[7]=0x30+c-10*(c/10);  
                   x[8]='\0';                
                   for(i=0;i<9;i++)
                      {   if((x[i]==0x30)&&(i<2))
                              {    if(!(x[0]==0x30))
                                                    {          SBUF=x[i];
                                              while(!TI);
                                              TI=0;
                                                             }
                                                   else
                                                    {    SBUF=0x20;
                                             while(!TI);
                                             TI=0;
                                                                }
                                          }
                                   else {  SBUF=x[i];
                                   while(!TI);
                                    TI=0;
                                                }
                            }
                   for(i=0;i<110;i++)
                       for(j=0;j<114;j++);
}
void main()
{         

            TMOD = 0x20;
        SCON = 0x50;
        TH1 = 0xFD;
       TL1 = TH1;
       PCON = 0x00;
       EA = 1;
       ES = 1;
       TR1 = 1;
           trig=0;
           echo=1;
           while(1)
           {  
                       SBUF=0X30; while(!TI);TI=0;
                       a=ceju();
                        d=0;
                        songxian(a);
                                    delay(5000);
                   /*TH0=0X00;TL0=0X00;
               trig=1;
                   k++;k++;k++;        k++; k++; k++;k++;k++;k++;
                   trig=0;
                   while(!echo);
                   TR0=1;
                   while(echo);
                  
                   a=TH0*256+TL0;
                   a=a*12*17;          
                   TR0=0;
                   a=(a/11059.2)+0.7;        //修正誤差
                    

                   c1=modf(a,&b1);
                   b=(int)(b1);
                   c=(int)(1000*c1);
                  
                   x[0]=0x30+b/100;
                   x[1]=0x30+b/10-10*(b/100);
                   x[2]=0x30+b-10*(b/10);
                   x[3]=0x2e;
                   x[4]=0x30+c/100;
                   x[6]=0x30+c/10-10*(c/100);
                   x[7]=0x30+c-10*(c/10);
                   x[8]='\0';
                   for(i=0;i<9;i++)
                      {   if((x[i]==0x30)&&(i<2))
                              {    if(!(x[0]==0x30))
                                                    {          SBUF=x[i];
                                              while(!TI);
                                              TI=0;
                                                             }
                                                   else
                                                    {    SBUF=0x20;
                                             while(!TI);
                                             TI=0;
                                                                }
                                          }
                                   else {  SBUF=x[i];
                                   while(!TI);
                                    TI=0;
                                                }
                            }
                   for(i=0;i<110;i++)
                       for(j=0;j<114;j++); */
               
                }
}
回復

使用道具 舉報

板凳
ID:277550 發表于 2018-6-3 12:04 | 只看該作者
在超聲波前面2、30cm地方,放置反射物,再試試吧

超聲波的原理就是先發射一段超聲波,然后等待返波。。。。。走掉就不等待返回,測量根本不對了。






評分

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

查看全部評分

回復

使用道具 舉報

地板
ID:343909 發表于 2018-6-3 12:06 | 只看該作者
回復

使用道具 舉報

5#
ID:318095 發表于 2018-6-4 10:45 | 只看該作者
devcang 發表于 2018-6-3 12:04
在超聲波前面2、30cm地方,放置反射物,再試試吧

超聲波的原理就是先發射一段超聲波,然后等待返波。。 ...

程序是對的  還了板之后可以用了  謝謝 回復
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91社区在线观看播放 | 欧美亚洲成人网 | 在线免费观看成人 | 亚洲一区二区三区视频 | 一区二区三区四区在线视频 | 欧美日韩a| 久久综合狠狠综合久久综合88 | 久久久久国产一区二区三区四区 | 欧美视频网 | 久久中文网| 韩国久久| 欧美一页 | 久视频在线观看 | 电影91久久久 | 在线一区二区三区 | 一区二区片| 99这里只有精品视频 | av喷水| 国产大片黄色 | 午夜av在线 | 成人3d动漫一区二区三区91 | 成人欧美一区二区三区白人 | 色综合欧美 | 亚洲精品短视频 | 91在线观看免费 | 亚洲成人av在线播放 | 国产xxxx在线 | 成人欧美一区二区三区色青冈 | 国产精品一区二区免费 | 成人免费黄视频 | 一区二区蜜桃 | 免费视频色| 久久天堂 | 天天草av | 欧洲精品一区 | 欧美精品乱码99久久影院 | 国产综合视频 | 久久国产高清 | 51ⅴ精品国产91久久久久久 | 国产久 | 亚洲欧美日韩在线一区二区 |