久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
想在避障模塊多完善一些 就是讓小車停止一會兒然后向后轉(zhuǎn)再向左轉(zhuǎn),怎么改寫比較好?
[打印本頁]
作者:
a664254710
時間:
2017-9-2 23:35
標(biāo)題:
想在避障模塊多完善一些 就是讓小車停止一會兒然后向后轉(zhuǎn)再向左轉(zhuǎn),怎么改寫比較好?
#include <reg52.h>
#include " LCD1602.h "
sbit zuo = P1^0;
sbit you = P1^1;
sbit zhong = P1^2;
sbit IN1 = P2^1; //P2.0到P2.3是電機驅(qū)動輸出控制端
sbit IN2 = P2^2;
sbit IN3 = P2^3;
sbit IN4 = P2^4;
sbit Trig = P2^0; //產(chǎn)生脈沖引腳
sbit Echo = P3^3; //回波引腳
uint distance[4]; //測距接收緩沖區(qū)
unsigned char code ASCII[16] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
unsigned char disbuff[4]= { 0,0,0,0,};
uint distance1;
bit succeed_flag; //測量成功標(biāo)志
void chaoshengbo();
void delay_20us();
void delay_ms(uint x);
void delay(uint t);
void Tracking();
void shunback();
//延時程序1
void delay(uint t)
{
uchar j;
while(t--)
{for(j=5;j>0;j--);}
}
//微妙延時程序
void delay_us(uint x)
{
do {
x--;
}
while(x>1);
}
//毫秒延時
void delay_ms(uint x)
{
while(x!=0)
{
delay_us(500);
x--;
}
}
//20微妙延時
void delay_20us()
{
uchar bt ;
for(bt=0;bt<100;bt++);
}
void Init()
{
Trig=0;
TMOD = 0x11; //T/C1采用16位定時器/計數(shù)器
ET1 = 1; //定時器1開中斷
ET0 = 1;
TH0 = 0x00;
TL0 = 0x00;
TH1 = 0xff;
TL1 = 0xce;
TR1=1;
TR0 = 1; //定時計數(shù)器啟動計數(shù)
EX0 = 1; //外部中斷0關(guān)中斷
PT1 = 1;
EA = 1; //CPU開中斷
}
//超聲波測距
void chaoshengbo()
{
uint distance_data,S;
Trig=1;
delay_20us();
Trig=0; //產(chǎn)生一個20us的脈沖,在Trig引腳
while(!Echo); //等待Echo回波引腳變高電平
TR0=1; //啟動定時器1
while(Echo);
TR0=0;
delay_ms(7);
distance_data=TH0*256+TL0;
TH0=0;
TL0=0;
S=(distance_data*1.7)/100;
if(succeed_flag==1)
{
distance1=S;
}
disbuff[0]=((S/100)%10);
disbuff[1]=((S/10)%10);
disbuff[2]=(S%10);
DisplayOneChar(9, 0, ASCII[disbuff[0]]);
DisplayOneChar(10, 0, ASCII[10]); //顯示點
DisplayOneChar(11, 0, ASCII[disbuff[1]]);
DisplayOneChar(12, 0, ASCII[disbuff[2]]);
DisplayOneChar(13, 0, ASCII[12]); //顯示M
}
//左轉(zhuǎn)
void comeleft()
{
IN1=0;
IN2=1;
IN3=1;
IN4=1;
}
//右轉(zhuǎn)
void comeright ()
{
IN1=1;
IN2=1;
IN3=1;
IN4=0;
}
//前進加速;
void comeon()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void backward()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//紅外尋跡
void Tracking()
{
if(zuo==1&&zhong==1&&you==1) //0是接受到黑線,1是白線
{
comeon();
}
else if(zuo==1&&zhong==0&&you==1)
{
comeon();
}
else if(zuo==0&&zhong==1&&you==1)
{
comeleft();
}
else if(zuo==0&&zhong==0&&you==1)
{
comeleft();
}
else if(zuo==1&&zhong==1&&you==0)
{
comeright();
}
else if(zuo==1&&zhong==0&&you==0)
{
comeright();
}
else
{
stop();
}
}
//避障
void shunback()
{
chaoshengbo();
delay_ms(50);
Tracking();// 避障運行
if(distance1<8) //當(dāng)超聲波測距距離小于8則
{
stop(); //小車停止運動
delay_ms(50);
// backward();
// delay_ms(100);
// comeleft();
// delay_ms(60);
TR1=1;
delay_ms(50);
TR1=0;
}
else
{
Tracking();
} //否則小車直走
}
//主函數(shù)
void main(void)
{
Init(); //初始化
LCMInit(); //LCM初始化
TMOD=0x01;
TH0=0; //定時器1清零
TL0=0; //定時器1清零
ET0=1; //打開外部中斷
EA=1;
succeed_flag=0; //清測量成功標(biāo)志
while(1)
{
displayfun();
chaoshengbo();
shunback(); //循環(huán)調(diào)用超聲波測距
Tracking();
}
}
//外部中斷0,用做判斷回波電平
INTO_() interrupt 0 // 外部中斷是0號
{
succeed_flag=1; //至成功測量的標(biāo)志
}
#ifndef __lcd1602__
#define __lcd1602__
//定義引腳
sbit LCM_RS = P2^6;
sbit LCM_RW = P2^5;
sbit LCM_E = P2^7;
//數(shù)據(jù)口定義
#define LCM_Data P0
sbit BF=LCM_Data^7; //忙信號線
//數(shù)組變量
unsigned char code yuyiny[18]={
0x00,0x10,0x18,0x20,0x28,0x30,0x38,0x40,
0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x98};
unsigned char inittime[7]={0x00,0x00,0x12,0x03,0x04,0x06,0x10}; //初始化時間
//變量
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
函 數(shù) 名:unsigned char ReadStatusLCM(void)
功 能:忙檢測
說 明:
入口參數(shù):無
返 回 值:無
***********************************************************************/
unsigned char ReadStatusLCM(void)
{
bit busy =0;
LCM_Data = 0xFF;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 1;
LCM_E = 1;
busy = BF;
LCM_E = 0;
return(busy);
}
/********************************************************************
函 數(shù) 名:void WriteCommandLCM(unsigned char WCLCM,BuysC)
功 能:寫命令
說 明:
入口參數(shù):WCLCM
BuysC 需要忙檢測
返 回 值:無
***********************************************************************/
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時忽略忙檢測
{
if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測忙
while (ReadStatusLCM());
LCM_RS = 0;
LCM_RW = 0;
LCM_Data = WCLCM;
LCM_E = 1;
LCM_E = 0;
}
/********************************************************************
函 數(shù) 名:void WriteDataLCM(unsigned char WDLCM
功 能:寫數(shù)據(jù)
說 明:
入口參數(shù):WDLCM
返 回 值:無
***********************************************************************/
void WriteDataLCM(unsigned char WDLCM)
{
while(ReadStatusLCM()); //檢測忙
LCM_RS = 1;
LCM_RW = 0;
LCM_Data = WDLCM;
LCM_E = 1;
LCM_E = 0;
}
/********************************************************************
函 數(shù) 名:void LCMInit(void)
功 能:LCM初始化
說 明:
入口參數(shù):無
返 回 值:無
***********************************************************************/
void LCMInit(void)
{
WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開始要求每次檢測忙信號
WriteCommandLCM(0x0C,1); //顯示開及光標(biāo)設(shè)置
WriteCommandLCM(0x06,1); //顯示光標(biāo)移動設(shè)置
WriteCommandLCM(0x01,1); //顯示清屏
}
/********************************************************************
函 數(shù) 名:void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
功 能:按指定位置顯示一個字符
說 明:
入口參數(shù):X 一行顯示個數(shù)限制
Y 上下行限制
DData 數(shù)據(jù)
返 回 值:無
***********************************************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //當(dāng)要顯示第二行時地址碼 0x40;
X |= 0x80; // 算出指令碼
WriteCommandLCM(X, 0); //這里不檢測忙信號,發(fā)送地址碼
WriteDataLCM(DData);
}
/********************************************************************
函 數(shù) 名:void displayfun(void)
功 能:界面顯示
說 明:
入口參數(shù):無
返 回 值:無
***********************************************************************/
void displayfun(void)
{
WriteCommandLCM(0x0c,1); //顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號
/*顯示 鬧鐘 設(shè)置*/
DisplayOneChar(0,0,'D');
DisplayOneChar(1,0,'i');
DisplayOneChar(2,0,'s');
DisplayOneChar(3,0,'t');
DisplayOneChar(4,0,'a');
DisplayOneChar(5,0,'n');
DisplayOneChar(6,0,'c');
DisplayOneChar(7,0,'e');
DisplayOneChar(8,0,':');
}
#endif
作者:
king_zxt
時間:
2017-9-3 11:16
可以判斷超聲波距離小于一定大小時小車停止延時一定時間在執(zhí)行其他操作
作者:
a664254710
時間:
2017-9-3 13:14
king_zxt 發(fā)表于 2017-9-3 11:16
可以判斷超聲波距離小于一定大小時小車停止延時一定時間在執(zhí)行其他操作
我也是這樣想的不過當(dāng)我在避障模塊加入其它指令,實測小車就一直執(zhí)行我加的命令,比如先停止,然后后退最后左轉(zhuǎn),就一直這樣循環(huán)執(zhí)行,超聲波測的顯示的數(shù)據(jù)變化不準(zhǔn),如果不加直stop,就會執(zhí)行尋跡指令...
作者:
sldx
時間:
2017-9-6 01:43
轉(zhuǎn)彎前加個延遲
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
中文字幕亚洲一区二区va在线
|
亚洲精品福利在线
|
欧美一区二区三区大片
|
欧美精品日韩
|
亚洲永久免费观看
|
99精品久久久
|
亚洲一区二区三
|
99视频精品
|
午夜精品久久久久久久久久久久
|
亚洲视频在线观看免费
|
日韩在线精品强乱中文字幕
|
黄色成人亚洲
|
一区欧美
|
免费看91
|
日韩av大片免费看
|
欧美日韩中文在线观看
|
久久久久久久国产精品
|
看片国产
|
欧美日韩专区
|
在线精品亚洲欧美日韩国产
|
古装三级在线播放
|
欧美xxxx性
|
精品一区二区免费视频
|
日韩av中文
|
国产精品永久久久久久久www
|
久久www免费人成看片高清
|
在线不卡视频
|
激情 亚洲
|
91aiai
|
亚洲精品久久久久久下一站
|
九一在线
|
一区二区三区久久
|
羞羞视频免费在线观看
|
日韩欧美精品一区
|
欧美日韩一区不卡
|
精品国产aⅴ
|
成人在线视频网址
|
日本一区二区三区免费观看
|
国产性网
|
欧美三级在线
|
亚洲欧美综合
|