資源簡介
本程序參加過電子設計比賽,適用于四路紅外收發傳感器循跡小車。此程序的思路與網上我搜到的思路完全不同,是我自創的獨特的,比那些程序更穩定精確并且我的小車行進速度要快得多,非常適合大一大二學生參考學習。

代碼片段和文件信息
/*從小車后面觀察,從左向右的紅外檢測分別為DD1DD2DD3DD4
??DD1---P0^3
??DD2---P0^2
??DD3---P0^1
??DD4---P0^0
*/
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
extern?void?Motor_Left(bit?ReverOrCoro?uchar?DutyCycle);?//左邊電機控制函數
extern?void?Motor_Right(bit?ReverOrCoro?uchar?DutyCycle);?//右邊電機控制函數
void?Timer0Config();?// 配置定時器0
void?zhizou();
void?dazhuan1();
void?dazhuan2();
void?weitiao1();
void?weitiao2();
void?zhuanwan1();
void?zhuanwan2();
void?shizi();
void?delay(uint?ms);
sbit?ENA?=?P1^5;?//定義電機使能端???????????????????????????????????
sbit?ENB?=?P1^0;
uchar?a;
uchar?Infrared;?//檢測P0低四位的值
void?main()
{
Timer0Config();
ENA?=?1;?ENB?=?1;
Infrared?=?P0?&?0x0F;?//取出P0口低四位
while(1)
{
switch(Infrared)
{
case?0x00:? ??
??? ???zhizou();?break;?//未檢測到黑線,直行
case?0x08:?
???????dazhuan1();?break;?//左邊第一個檢測到黑線,2級左轉
case?0x04:?
???????weitiao1();?break;?//左邊第二個檢測到黑線,1級左轉
case?0x02:?
???????weitiao2();?break;?//右邊第一個檢測到黑線,1級右轉
case?0x01:?
???????dazhuan2();?break;?//右邊第二個檢測到黑線,2級右轉
case?0x0C:?
?zhuanwan1();?break;?//左邊兩個同時檢測到黑線,左轉進入
case?0x0E:?
?zhizou();?break;?//左邊三個同時檢測到黑線,左轉
case?0x03:?
?zhuanwan2();?break;?//右邊兩個同時檢測到黑線,右轉進入
case?0x07:?
?zhizou();?break;?//右邊三個同時檢測到黑線,右轉
case?0x0f:
?zhizou();?break;?//全黑,智能左轉
case?0x06:?
?dazhuan2();?break;?//中間兩個檢測到,右轉
case?0x09:?
?dazhuan2();?break;?//旁邊兩個檢測到,右轉
case?0x0A:?
?weitiao1();?break;?//左一右一檢測到,左微調
case?0x05:?
?weitiao2();?break;?//左二右二檢測到,右微調
case?0x0b:
?weitiao2();?break;?//左二未檢測到,直行
case?0x0d:
?weitiao1();?break;?//右一未檢測到,直行
default:?
?zhizou();?break;
}
}
}
void?delay(uint?ms)
{
uint?ij;
for(i=0;?i {
for(j=0;?j<110;?j++);
}
}
void?Timer0Config()
{
TMOD?&=?0xF0;
TMOD?|=?0x01;
TH0?=?0xFF;
TL0?=?0x7E;
EA?=?1;
ET0?=?1;
TR0?=?1;
}
void?zhizou()
{
?Motor_Left(1?100);?Motor_Right(1?100);
?Infrared?=?P0?&?0x0F;?
}
void?dazhuan1()
{
a=1;
while(a)
{
Motor_Left(0?100);?Motor_Right(1?100);
Infrared?=?P0?&?0x0F;
if(Infrared==0x02)
{
Motor_Left(1?100);?Motor_Right(0?100);?break;
}
else?if(Infrared==0x04)
{
Motor_Left(1?100);?Motor_Right(0?100);?break;
}
}
Infrared?=?P0?&?0x0F;
}
void?dazhuan2()
{
while(1)
{
Motor_Left(1?100);?Motor_Right(0?100);
Infrared?=?P0?&?0x0F;
if(Infrared==0x04)
{
Motor_Left(0?100);?Motor_Right(1?100);?break;
}
else?if(Infrared==0x02)
{
Motor_Left(0?100);?Motor_Right(1?100);?break;
}
}
Infrared?=?P0?&?0x0F;
}
void?weitiao1()
{
a=1;
while(a)
{
Motor_Left(0?60);?Motor_Right(1?100);
Infrared?=?P0?&?0x0F;
switch(Infrared)
{
case?0x04:
a=1;?break;
default:
a=0;?break;
}
}
Infrared?=?P0?&?0x0F;
}
void?weitiao2()
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-09-11?22:30??循跡小車決賽程序\
?????文件????????5265??2017-05-18?13:45??循跡小車決賽程序\main.c
?????文件???????10570??2017-05-18?13:45??循跡小車決賽程序\main.LST
?????文件???????11550??2017-05-18?13:45??循跡小車決賽程序\main.OBJ
?????文件????????1111??2017-05-14?20:53??循跡小車決賽程序\Motor.c
?????文件????????3156??2017-05-18?13:45??循跡小車決賽程序\Motor.LST
?????文件????????3128??2017-05-18?13:45??循跡小車決賽程序\Motor.OBJ
?????文件????????6376??2009-05-07?14:37??循跡小車決賽程序\STARTUP.A51
?????文件???????14049??2017-05-18?13:45??循跡小車決賽程序\STARTUP.LST
?????文件?????????758??2017-05-18?13:45??循跡小車決賽程序\STARTUP.OBJ
?????文件???????12394??2017-05-18?13:45??循跡小車決賽程序\循跡小車
?????文件????????2826??2017-05-18?13:45??循跡小車決賽程序\循跡小車.hex
?????文件??????????74??2017-05-18?13:45??循跡小車決賽程序\循跡小車.lnp
?????文件???????20074??2017-05-18?13:45??循跡小車決賽程序\循跡小車.M51
?????文件?????????183??2017-09-11?22:29??循跡小車決賽程序\循跡小車.plg
?????文件??????139423??2017-09-11?22:30??循跡小車決賽程序\循跡小車.uvgui.Administrator
?????文件??????139428??2017-08-04?16:49??循跡小車決賽程序\循跡小車.uvgui_Administrator.bak
?????文件????????6367??2017-09-11?22:30??循跡小車決賽程序\循跡小車.uvopt
?????文件???????13744??2017-04-10?18:09??循跡小車決賽程序\循跡小車.uvproj
?????文件???????56272??2017-04-08?16:19??循跡小車決賽程序\循跡小車_uvopt.bak
?????文件???????13554??2017-04-08?11:32??循跡小車決賽程序\循跡小車_uvproj.bak
評論
共有 條評論