• 大小: 57KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签: 红外循迹  

资源简介

本程序参加过电子设计比赛,适用于四路红外收发传感器循迹小车。此程序的思路与网上我搜到的思路完全不同,是我自创的独特的,比那些程序更稳定精确并且我的小车行进速度要快得多,非常适合大一大二学生参考学习。

资源截图

代码片段和文件信息

/*从小车后面观察,从左向右的红外检测分别为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

评论

共有 条评论