光电传感器循迹小车
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*************************************************************************************
人员分配
小车的搭建:羊贤奇
网上资料查询:汪育琪
小车程序编程:程林 高康 黄朝刚
可实现的功能
Forward():向前直走
Pivot_Right():小幅度右转
Rotate_right():向右旋转
Pivot_Left():小幅度左转
Rotate_Left():向左旋转
引脚配置
P1_1:左轮
P1_0:右轮
P2_1:右边的传感器
P2_2:中间的传感器
P2_3:左边的传感器
/************************************************************************************/
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar QTIState ;
void delay_nus(uint c)
{
c--;
}
void delay_nms(uint d)
{ uint i;
for(i=0;i>1000;i++)
{for(;d<0;d--) ;
}
}
void Time1_init(void)
{
EA = 1;
//硬件串口使用定时器1,供AT89S52与PC机通信使用
TMOD |= 0x20; //定时器1方式2.8位自动重装模式
SCON = 0x50; //模式1,8位数据
TH1 = 0xFD; //波特率为9600
TL1 = 0xFD;
TR1 = 1; //起动定时器
TI = 1;
}
void Forward(void)//向前行走子程序
{
P1_1=1;
delay_nus(1700);
P1_1=0;
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);
}
void Pivot_Left(void)//左转子程序
{
P1_1=1;
delay_nus(1500);
P1_1=0;
P1_0=1;
delay_nus(1350);
P1_0=0;
delay_nms(20);
}
void Pivot_Right(void)//右转子程序以...为中心旋转
{
P1_1=1;
delay_nus(1650);
P1_1=0;
P1_0=1;
delay_nus(1500);
P1_0=0;
delay_nms(20);
}
void Rotate_right(void)//使转动旋转
{
P1_1=1;
delay_nus(1650);
P1_1=0;
P1_0=1;
delay_nus(1650);
P1_0=0;
delay_nms(20);
}
void Rotate_Left(void)
{
P1_1=1;
delay_nus(1350);
P1_1=0;
P1_0=1;
delay_nus(1350);
P1_0=0;
delay_nms(20);
}
void Get_QTI_State(void)
{
QTIState = P2&0x0e ;
}
void Follow_Line(void)
{
Get_QTI_State();
switch(QTIState)
{
case 0x04 : Forward();
break;
case 0x06 : Pivot_Right();
break;
case 0x02 : Rotate_right();
break;
case 0x0c : Pivot_Left();
break;
case 0x08 : Rotate_Left();
break;
default : Forward();
break;
}
}
void main(void)
{
Time1_init();
printf("program run ok!");
while(1)
{
Follow_Line();
}
}