欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

請問在超聲波測距部分加入藍牙傳輸模塊,修改程序后不能正常測距,程序該如何修改

查看數: 2614 | 評論數: 3 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2019-5-16 16:46

正文摘要:

請問在超聲波測距電路中加入藍牙傳輸模塊,在原本測距程序的基礎上修改程序后不能正常測距,這是什么原因,應該如何修改,謝謝各位大佬 下有測距原理圖 附上 修改的程序: #include "reg52.H"//器件配 ...

回復

ID:332702 發表于 2019-5-18 11:34
lfc315 發表于 2019-5-17 14:29
你的藍牙模塊在哪?

藍牙加在了TXD和RXD,這個圖是還沒有加的
ID:530977 發表于 2019-5-17 22:56
#include "stc15.h"       
#include <intrins.h>
sbit RX1=P2^0;          //小車左側超聲波HC-SR04接收端
sbit TX1=P2^1;                 //發送端  
sbit RX2=P2^2;                  
sbit TX2=P2^3;                  
sbit RX3=P2^4;                  
sbit TX3=P2^5;
//定義小車驅動模塊輸入IO口
unsigned char bluetoothdata;
sbit P3_1=P3^1;
sbit P3_0=P3^0;
sbit IN1=P1^3;
sbit IN2=P1^4;
sbit IN3=P1^5;
sbit IN4=P1^6;
sbit ENA=P1^2;
sbit ENB=P1^7;
unsigned int i,cycle=0,T=2048;
void delay_long(unsigned int time)
{
        unsigned int i;
        unsigned int j;
        for(i = 0 ; i < time ; i++)
        {
                for(j = 0; j < 500; j++);
        }
}
/**********z秒延時函數**********/
void delay(unsigned int z)
{
        unsigned int x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
/********微妙延時*********/
void delay_us(unsigned int aa)
{
        while(aa--);
}
void run()//前進
{
                IN1=1;//反轉
                IN2=0;
                IN3=0;//正轉
                IN4=1;
        for(i=0;i<200;i++)
                {
                        delay(10);//PWI占空比為50%,修改延時調整PI脈沖
                        ENA=~ENA;
                        ENB=~ENB;
                }
}
void Backoff()//后退
{
               
        IN1=0;//正轉
                IN2=1;
                IN3=1;//反轉
                IN4=0;
        for(i=0;i<200;i++)
                {
                        delay(8);//PWI占空比為50%,修改延時調整PI脈沖
                ENA=~ENA;
                ENB=~ENB;
                }
}
void rightrun()//左轉
{
                IN1=0;//制動
                IN2=0;
                IN3=0;//正轉
                IN4=1;
        for(i=0;i<200;i++)
                {
                        delay(8);//PWI占空比為50%,修改延時調整PI脈沖
                ENA=~ENA;
                ENB=~ENB;
                }
}
void leftrun()//右轉
{
                IN1=1;//反轉
                IN2=0;
                IN3=0;//制動
                IN4=0;
        for(i=0;i<200;i++)
                {
                        delay(8);//PWI占空比為50%,修改延時調整PI脈沖
                ENA=~ENA;
                ENB=~ENB;
                }
}
void stoprun()//停止
{
                IN1=0;//制動
                IN2=0;
                IN3=0;//正轉
                IN4=0;
                for(i=0;i<200;i++)
                {
                delay(10);//PWI占空比為50%,修改延時調整PI脈沖
                ENA=0;
                ENB=0;
                }
}
unsigned int  time=0;
unsigned long S1=0;
unsigned long S2=0;
unsigned long S3=0;
        void delay_1ms(unsigned char x)          //1ms延時函數,100ms以內可用
        {
        unsigned char i;
        while(x--)
        for(i=124;i>0;i--);
        }
/********************************************************/
void Automatic_following()
{
        TX1=1;                                 //開啟超聲波1探測
         delay_1ms(1);
         TX1=0;
     while(!RX1);                //當RX1為零時等待
         TR0=1;                            //開啟計數
         while(RX1);                //當RX1為1計數并等待
         TR0=0;                                //關閉計數
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;                          
         S1=(time*1.7)/100;    //算出來是CM       
         TX2=1;
         delay_1ms(1);
         TX2=0;
    while(!RX2);                //當RX2為零時等待
         TR0=1;                            //開啟計數
         while(RX2);                //當RX2為1計數并等待
         TR0=0;                                //關閉計數
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;                                                                         
         S2=(time*1.7)/100;     //算出來是CM                                       
         TX3=1;
         delay_1ms(1);
         TX3=0;         
         while(!RX3);                //當RX3為零時等待
                 TR0=1;                            //開啟計數
                 while(RX3);                //當RX3為1計數并等待
                 TR0=0;                                //關閉計數
                 time=TH0*256+TL0;
                 TH0=0;
                 TL0=0;                                         
                 S3=(time*1.7)/100;     //算出來是CM
                if(S1>15&&S1<120&&S1<S3)
//                if((S1>15&&S1<120&&S2>120&&S3>120)||(S1>15&&S1<120&&S2<120&&S2>15&&S3>120)||(S1<S2<S3))
                {
                        rightrun();//左轉
                }
          else if(S3>15&&S3<120&&S3<S1)
//                else if((S3>15&&S3<120&&S1>120&&S2>120)||(S3>15&&S3<120&&S1>120&&S2<120&&S2<15)||(S3<S2<S3))
                {
                   leftrun();        //右轉               
                }       
                else if((S2<120&&S2>15)||S1==S3&&S1>15&&S1<120)
//                else if((S2<120&&S2>15&&S1>120&&S3>120)||(S1<120&&S1>15&&S2<120&&S2>15&&S3<120&&S3>15&&S1==S3)||(S2<S1&&S2<S3))
                {
           run();
                }                         
                else if(S1<5||S2<5||S3<5)
                {
                Backoff();       
                }
                else
                 {       
                        stoprun();
                 }                  
}
void Uart1_Init()//串口1初始化9600波特率11.0592MHz
{
        PCON &= 0x7F;//設置波特率不加倍,即SMOD=0;
        SCON = 0x50; //設置8位UART,波特率可變,允許串行接收
        AUXR |= 0x40;//定時器1時鐘為1T
        AUXR &= 0xFE;//串口1選擇定時器1為波特率發生器,即S1ST2=0;
        TMOD &= 0x0F;//清除定時器1模式位
        TMOD |= 0x20;//設定定時器1為8位自動重裝方式工作方式2
        TL1 = 0xDC;  //設定定時初值
        TH1 = 0xDC;  //設定定時器重裝值
        ET1 = 0;     //禁止定時器1中斷
        TR1 = 1;     //啟動定時器1
        EA = 1;      //開總中斷
        ES = 1;      //開串口中斷
}
/********************************************************/
      void timer0() interrupt 1                  //T0中斷
  {
   
  }
void usart_receive(void) interrupt 4 //串口中斷程序
{

        if(RI == 1)//收到字符
        {
                RI = 0;//軟件清零
                bluetoothdata = SBUF;//讀取數據
        }

       if(TI == 1)//發送數據
        {
                TI = 0;//清零
        }

}
void  usart_service()
{
        switch(bluetoothdata)
        {
                case '1':run();break;
                case '2':leftrun();break;
                case '3':rightrun();break;
                case '4':Backoff();break;
                case '5':stoprun();break;
                case '6':Automatic_following();break;
        }
}
/*********************************************************
**********************************************************/

        void  main(void)
{
                P1M1=0x00;
                P1M0=0x00;
                P2M1=0x00;
                P2M0=0x00;
    TMOD=0x11;                   //設T0為方式1,GATE=1;
        TH0=0;
        TL0=0;         
        TH1=(65536-1000)/256;         //1ms定時
        TL1=(65536-1000)%256;
        ET0=1;             //允許T0中斷
        ET1=1;                           //允許T1中斷
        TR1=1;                           //開啟定時器
        EA=1;                           //開啟總中斷
        Uart1_Init();//串口1初始化9600波特率11.0592MHz
        P0=0x00;
                ENA=0;
                ENB=0;
        while(1)
        {
                usart_service();
        }
}
ID:10947 發表于 2019-5-17 14:29
你的藍牙模塊在哪?

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表