日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

避障机器人程序c语言,基于51单片机小车寻迹、避障源程序(注释很详细)

發(fā)布時(shí)間:2025/3/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 避障机器人程序c语言,基于51单片机小车寻迹、避障源程序(注释很详细) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/*

* 作者:趙新

* 功能:實(shí)現(xiàn)小車躲避障礙,通過檢測三個(gè)方向的距離,選擇最大距離轉(zhuǎn)彎

* 日期:2015/3/14

* 說明:STC89c52RC,12MHz

* 注意:1000ms和100ms待測,完成后刪除此行

*—————————————————管腳說明——————————————

* Trig = P1^0

* Echo = P3^2

* PWM_OUT = P0^4

*————————————————————————————————————————

*/

#include "stc89c5x.h"

#include "intrins.h"

#include "Motor.h"

#define X 20? ?//最短距離參考值 約為12厘米 受溫度影響,會(huì)存在10%左右的誤差

sbit Trig = P1^0;//發(fā)送端

sbit Echo = P3^2;//接收端 若用外部中斷0,則此引腳必須是P3.2

sbit PWM_OUT = P0^4;//PWM信號輸出端

u8 counts = 0;? ?? ?//設(shè)置初值

u8 PWM =6;? ? ? ? ? ? ? ? ? ? ? ? //設(shè)置初值,任意值也可不設(shè)

u8 Flag_Angle = 1;??//0 左45度 1 右45度 在函數(shù)Scan()中調(diào)用

u8 Distance_Middle;

u8 Distance_Temp[2];//0 左45度 1 右45度

void Delay20us();

void Delay100ms();

void Delay1000ms();??//@12.000MHz??用于等待

u8 Compute(u8 th,u8 tl);

void Scan_Around();??//掃描左右

void Scan_Middle();??//掃描正中前進(jìn)方向距離

void main()

{

TMOD = 0x11;//設(shè)置T0,T1 T0用于電平檢測 T1用于產(chǎn)生舵機(jī)需要的PWM信號

TH0 = 0x00;? ? ? ?? ? //轉(zhuǎn)載初值

TL0 = 0x00;

ET0 = 1;? ? ? ?? ? //打開定時(shí)器中斷

TF0 = 0;? ? ? ?? ? //失能定時(shí)器中斷標(biāo)志,也可忽略此語句

TR0 = 0;? ? ? ?? ? //開始時(shí)T0關(guān)閉

TH1 =? ? ? ? 0xff;??//產(chǎn)生時(shí)基100us定時(shí),用于組成舵機(jī)各個(gè)角度的信號

TL1 = 0x9c;

ET1 = 1;

TF0 = 0;? ???//可忽略此語句,51復(fù)位此位為0

TR1 = 0;? ? ? ?? ? //暫時(shí)關(guān)閉T1

EX0 = 1;? ???//開外部中斷

IT0 = 1;? ???//下降沿觸發(fā)中斷

EA = 1;? ? ? ?? ? //全局中斷開

Trig = 0;? ? ? ?? ? //觸發(fā)端拉低

Echo = 0;

while(1)

{

//Scan_Around();

Scan_Middle();

if(Distance_Middle<=X)

{

Stop();

Scan_Around();

if((Distance_Temp[0]>Distance_Temp[1])&&Distance_Temp[0]>=X)

{

Turn_Left(0);

Delay100ms();

//Delay100ms();

}else

if((Distance_Temp[0]=X)

{

Turn_Right(0);

Delay100ms();

//Delay100ms();

}else

if((Distance_Temp[0]==Distance_Temp[1])&&Distance_Temp[0]>=X)

{

Turn_Right(0);

Delay100ms();

//Delay100ms();

}else

{

Back();

Delay100ms();

Delay100ms();

Delay100ms();

Delay100ms();

Delay100ms();

Turn_Right(0);

Delay100ms();

//Delay100ms();

}

}else

{

Go();

}

}

}

void Timer1(void) interrupt 3 //PWM產(chǎn)生

{

TH1 = 0xff;

TL1 = 0x9c;

if(counts

{

PWM_OUT = 1;

}

else

{

PWM_OUT = 0;

if(counts==200)

{

counts = 0;

}

}

++counts;

}

void Timer0(void) interrupt 1 //T0溢出中斷函數(shù),一般來說T0溢出是不可能發(fā)生的,原因是傳感器最大探測距離為4m左右,所用時(shí)間不會(huì)超過65536us

{

}

void INT0_Test(void) interrupt 0??//下降沿到來之后,進(jìn)入外部中斷函數(shù),停止T0計(jì)數(shù),計(jì)算并發(fā)送計(jì)算值到計(jì)算機(jī)

{

TR0 = 0;

switch(Flag_Angle)

{

case 0:Distance_Temp[0]=Compute(TH0,TL0);TH0 = TL0 = 0x00;break;??//左

case 1:Distance_Temp[1]=Compute(TH0,TL0);TH0 = TL0 = 0x00;break;??//右

default:break;

}

//為了下一次準(zhǔn)確計(jì)數(shù),必須清空

}

void Scan_Around()? ?//掃描左右

{

Flag_Angle = 0;

PWM = 17;//左轉(zhuǎn)45度

TR1 = 1;

Delay1000ms();

TR1 = 0;

Trig = 1;? ? ? ? ? ? ? ? //觸發(fā)一次檢測

Delay20us();

Trig = 0;

while(!Echo);? ? ? ? //如果沒有檢測到返回信號,等

TR0 = 1;? ? ? ? ? ? ? ? //檢測到高電平,開T0計(jì)數(shù),一直計(jì)到下降沿到來

Delay100ms();

Flag_Angle = 1;

PWM = 8; //右轉(zhuǎn)45度

TR1 = 1;

Delay1000ms();

TR1 = 0;

Trig = 1;? ? ? ? ? ? ? ? //觸發(fā)一次檢測

Delay20us();

Trig = 0;

while(!Echo);? ? ? ? //如果沒有檢測到返回信號,等

TR0 = 1;? ? ? ? ? ? ? ? //檢測到高電平,開T0計(jì)數(shù),一直計(jì)到下降沿到來

Delay100ms();

PWM = 12; //測完回到正中

TR1 = 1;

Delay1000ms();

TR1 = 0;

}

void Scan_Middle() //掃描正中前進(jìn)方向距離

{

//Stop();

Flag_Angle = 3;

Trig = 1;? ? ? ? ? ? ? ? //觸發(fā)一次檢測

Delay20us();

Trig = 0;

while(!Echo);? ? ? ? //如果沒有檢測到返回信號,等

TR0 = 1;? ? ? ? ? ? ? ? //檢測到高電平,開T0計(jì)數(shù),一直計(jì)到下降沿到來

Delay100ms();

Distance_Middle = Compute(TH0,TL0);

TH0 = TL0 = 0x00;

//Go();

}

u8 Compute(u8 th,u8 tl)

{

u16 times = 0x0000;

times = th;

times = times<<8;

times |= tl;

return (times/58);

}

void Delay20us()? ? ? ? ? ? ? ? //@12.000MHz??用于產(chǎn)生超聲波觸發(fā)信號

{

unsigned char i;

_nop_();

i = 7;

while (--i);

}

void Delay100ms()? ? ? ? ? ? ? ? //@12.000MHz

{

unsigned char i, j;

i = 195;

……………………

…………限于本文篇幅 余下代碼請從51黑下載附件…………

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的避障机器人程序c语言,基于51单片机小车寻迹、避障源程序(注释很详细)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 992tv成人免费视频 | 亚洲天堂一区二区 | 久久成人a| 欧美激情综合色综合啪啪五月 | 91男女视频 | 黄色裸体视频 | 久久久最新 | 不卡的在线视频 | 九七在线视频 | 久草视频免费在线播放 | 国产四区 | 欧美视频久久 | 羞羞免费视频 | 亚洲涩涩涩 | 精品国产一区三区 | 亚洲系列在线观看 | 色综合久久中文字幕无码 | 牛牛免费视频 | 日韩欧美国产一区二区三区 | 天堂在线观看av | 欧美成人精品激情在线视频 | 欧美老熟妇又粗又大 | 久久精品国产99久久不卡 | 日韩特黄毛片 | 中文字幕你懂的 | 在线成人免费 | 色老板最新地址 | 国产高清视频在线播放 | 中文字幕中出 | 中国av毛片 | 午夜三级网站 | 日韩av三级在线 | 欧洲美女粗暴牲交免费观看 | 免费毛片网站在线观看 | 性爽爽| 超碰老司机 | 欧美男女交配 | 成人福利网站在线观看 | 青青青网 | 福利视频三区 | 快射视频网 | 欧美一区中文字幕 | 亚洲第五页 | 夜夜se | 台湾佬在线 | 舐め犯し波多野结衣在线观看 | 国产精品www色诱视频 | 国产真实乱人偷精品人妻 | 欧美性视频在线 | 国产极品一区二区 | 国产盗摄精品 | 亚洲综合色av | 亚洲一区二区精品在线 | 中文字幕手机在线视频 | a级网站在线观看 | 97精品人妻麻豆一区二区 | 男人操女人的网站 | 卡通动漫亚洲综合 | 中文在线观看免费高清 | 一区二区欧美在线 | 国产一区二区三区在线看 | 亚洲精品三 | 中文精品无码中文字幕无码专区 | 成人av一区二区在线观看 | 亚洲av成人无码一区二区三区在线观看 | 欧美乱妇狂野欧美在线视频 | 比利时xxxx性hd极品 | 精品国产大片大片大片 | 精品国产一区二区三 | 日本一区二区三区免费观看 | 日韩精品免费在线视频 | 日本不卡视频在线播放 | 成人激情小说网站 | 国产视频一区二区三区在线 | 尤物最新网址 | 中文字字幕在线中文 | 麻豆视频二区 | 痴女扩张宫交脱垂重口小说 | 五月激情四射网 | 天天摸日日 | 中文在线字幕免费观看电 | 特黄特色大片免费视频大全 | 精品国产免费无码久久久 | 色人阁五月天 | 91国视频 | xxxx毛片 | 激情五月婷婷在线 | 97精品视频在线观看 | 绝顶高潮videos合集 | 琪琪伦伦影院理论片 | 99精品欧美一区二区 | 国产免费av一区二区三区 | 久久久久亚洲色欲AV无码网站 | 国产美女黄色片 | a毛片成人 | 亚洲中文无码久久 | 国产又粗又硬又黄的视频 | 欧美大胆a视频 | 九九热8 |