熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2019-5-16 16:46
正文摘要:請(qǐng)問(wèn)在超聲波測(cè)距電路中加入藍(lán)牙傳輸模塊,在原本測(cè)距程序的基礎(chǔ)上修改程序后不能正常測(cè)距,這是什么原因,應(yīng)該如何修改,謝謝各位大佬 下有測(cè)距原理圖 附上 修改的程序: #include "reg52.H"//器件配 ... |
lfc315 發(fā)表于 2019-5-17 14:29 藍(lán)牙加在了TXD和RXD,這個(gè)圖是還沒(méi)有加的 |
#include "stc15.h" #include <intrins.h> sbit RX1=P2^0; //小車(chē)左側(cè)超聲波HC-SR04接收端 sbit TX1=P2^1; //發(fā)送端 sbit RX2=P2^2; sbit TX2=P2^3; sbit RX3=P2^4; sbit TX3=P2^5; //定義小車(chē)驅(qū)動(dòng)模塊輸入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秒延時(shí)函數(shù)**********/ void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /********微妙延時(shí)*********/ void delay_us(unsigned int aa) { while(aa--); } void run()//前進(jìn) { IN1=1;//反轉(zhuǎn) IN2=0; IN3=0;//正轉(zhuǎn) IN4=1; for(i=0;i<200;i++) { delay(10);//PWI占空比為50%,修改延時(shí)調(diào)整PI脈沖 ENA=~ENA; ENB=~ENB; } } void Backoff()//后退 { IN1=0;//正轉(zhuǎn) IN2=1; IN3=1;//反轉(zhuǎn) IN4=0; for(i=0;i<200;i++) { delay(8);//PWI占空比為50%,修改延時(shí)調(diào)整PI脈沖 ENA=~ENA; ENB=~ENB; } } void rightrun()//左轉(zhuǎn) { IN1=0;//制動(dòng) IN2=0; IN3=0;//正轉(zhuǎn) IN4=1; for(i=0;i<200;i++) { delay(8);//PWI占空比為50%,修改延時(shí)調(diào)整PI脈沖 ENA=~ENA; ENB=~ENB; } } void leftrun()//右轉(zhuǎn) { IN1=1;//反轉(zhuǎn) IN2=0; IN3=0;//制動(dòng) IN4=0; for(i=0;i<200;i++) { delay(8);//PWI占空比為50%,修改延時(shí)調(diào)整PI脈沖 ENA=~ENA; ENB=~ENB; } } void stoprun()//停止 { IN1=0;//制動(dòng) IN2=0; IN3=0;//正轉(zhuǎn) IN4=0; for(i=0;i<200;i++) { delay(10);//PWI占空比為50%,修改延時(shí)調(diào)整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延時(shí)函數(shù),100ms以?xún)?nèi)可用 { unsigned char i; while(x--) for(i=124;i>0;i--); } /********************************************************/ void Automatic_following() { TX1=1; //開(kāi)啟超聲波1探測(cè) delay_1ms(1); TX1=0; while(!RX1); //當(dāng)RX1為零時(shí)等待 TR0=1; //開(kāi)啟計(jì)數(shù) while(RX1); //當(dāng)RX1為1計(jì)數(shù)并等待 TR0=0; //關(guān)閉計(jì)數(shù) time=TH0*256+TL0; TH0=0; TL0=0; S1=(time*1.7)/100; //算出來(lái)是CM TX2=1; delay_1ms(1); TX2=0; while(!RX2); //當(dāng)RX2為零時(shí)等待 TR0=1; //開(kāi)啟計(jì)數(shù) while(RX2); //當(dāng)RX2為1計(jì)數(shù)并等待 TR0=0; //關(guān)閉計(jì)數(shù) time=TH0*256+TL0; TH0=0; TL0=0; S2=(time*1.7)/100; //算出來(lái)是CM TX3=1; delay_1ms(1); TX3=0; while(!RX3); //當(dāng)RX3為零時(shí)等待 TR0=1; //開(kāi)啟計(jì)數(shù) while(RX3); //當(dāng)RX3為1計(jì)數(shù)并等待 TR0=0; //關(guān)閉計(jì)數(shù) time=TH0*256+TL0; TH0=0; TL0=0; S3=(time*1.7)/100; //算出來(lái)是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();//左轉(zhuǎn) } 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(); //右轉(zhuǎn) } 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;//設(shè)置波特率不加倍,即SMOD=0; SCON = 0x50; //設(shè)置8位UART,波特率可變,允許串行接收 AUXR |= 0x40;//定時(shí)器1時(shí)鐘為1T AUXR &= 0xFE;//串口1選擇定時(shí)器1為波特率發(fā)生器,即S1ST2=0; TMOD &= 0x0F;//清除定時(shí)器1模式位 TMOD |= 0x20;//設(shè)定定時(shí)器1為8位自動(dòng)重裝方式工作方式2 TL1 = 0xDC; //設(shè)定定時(shí)初值 TH1 = 0xDC; //設(shè)定定時(shí)器重裝值 ET1 = 0; //禁止定時(shí)器1中斷 TR1 = 1; //啟動(dòng)定時(shí)器1 EA = 1; //開(kāi)總中斷 ES = 1; //開(kāi)串口中斷 } /********************************************************/ void timer0() interrupt 1 //T0中斷 { } void usart_receive(void) interrupt 4 //串口中斷程序 { if(RI == 1)//收到字符 { RI = 0;//軟件清零 bluetoothdata = SBUF;//讀取數(shù)據(jù) } if(TI == 1)//發(fā)送數(shù)據(jù) { 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; //設(shè)T0為方式1,GATE=1; TH0=0; TL0=0; TH1=(65536-1000)/256; //1ms定時(shí) TL1=(65536-1000)%256; ET0=1; //允許T0中斷 ET1=1; //允許T1中斷 TR1=1; //開(kāi)啟定時(shí)器 EA=1; //開(kāi)啟總中斷 Uart1_Init();//串口1初始化9600波特率11.0592MHz P0=0x00; ENA=0; ENB=0; while(1) { usart_service(); } } |
你的藍(lán)牙模塊在哪? |
Powered by 單片機(jī)教程網(wǎng)