循迹小车三路的程序

合集下载

循迹小车程序(三路循迹)

循迹小车程序(三路循迹)

#include "reg51.h"

typedef unsigned int uint;

typedef unsigned char uchar;

sbit p2_0 = P2^0; //开关

sbit p2_1 = P2^1; //红外检测

sbit p2_2 = P2^2;

sbit p2_3 = P2^3;

sbit p1_0 = P1^0; //电机驱动

sbit p1_1 = P1^1;

sbit p1_2 = P1^2;

sbit p1_3 = P1^3;

sbit pwm1 = P1^4; //pwm调速

sbit pwm2 = P1^5;

unsigned char timer1;

/******************************************************************** ***********

* 函数名 : Time1Config

* 函数功能 : 设置定时器

* 输入 : 无

* 输出 : 无

********************************************************************* **********/

void Time1Config()

{

TMOD|= 0x10; //设置定时计数器工作方式1为定时器

//--定时器赋初始值,12MHZ下定时0.5ms--//

TH1 = 0xFE;

TL1 = 0x0C;

ET1 = 1; //开启定时器1中断

EA = 1;

TR1 = 1; //开启定时器

}

/************************************************ 延时函数

循迹小车编程

循迹小车编程

一般是用IF语句来判断各种情况,下边是一个小程序,你可以看看#include"reg52.h"

#define uint unsigned int

#define uchar unsigned char

//电机管脚

sbit MA1=P3^0;

sbit MA2=P3^1;

sbit MB1=P3^2;

sbit MB2=P3^3;

//循迹模块管脚

sbit led0=P1^0;

sbit led1=P1^1;

sbit led2=P1^2;

sbit led3=P1^3;

sbit led4=P1^4;

sbit led5=P1^5;

delay()

{

uint i;

for(i=0;i<100;i++);

}

void zhengzhuan()//正转

{

MA1=0;

MA2=1;

MB1=1;

MB2=0;

}

void fanzhuan()//反转

{

MA1=1;

MA2=0;

MB1=0;

MB2=1;

}

void zuozhuan()//左转弯

{

MA1=0;

MA2=1;

MB1=0;

MB2=0;

}

void youzhuan()//右转弯

{

MA1=0;

MA2=0;

MB1=1;

MB2=0;

}

stop()//停止

{

MA1=0;

MA2=0;

MB1=0;

MB2=0;

}

main()

{

while(1)

{

if(led1==0&&led2==0&&led3==1&&led4==0&&led5==0) {

void zhengzhuan();//正转

}

if(led1==0&&led2==0&&led3==0&&led4==0&&led5==0) {

循迹小车制作过程

循迹小车制作过程

电子与信息工程系

电子实训

课题: 基于STC89C52RC和TCRT5000光电传感器的自动循迹小车设计

专业:

班级:

学号:

姓名:

指导老师:完成日期:

目录

目录 0

摘要: (1)

1.任务及要求 (2)

1.1任务 (2)

2.系统设计方案 (2)

2.1小车循迹原理 (2)

2.2控制系统总体设计 (2)

3.系统方案 (3)

3.1 寻迹传感器模块 (3)

3.1.1光电传感器TCRT5000简介 (3)

3.1.2比较器LM324简介 (3)

3.1.3具体电路 (4)

3.1.4传感器安装 (4)

3.2控制器模块 (5)

3.3电源模块 (6)

3.4电机及驱动模块 (6)

3.4.1电机 (6)

3.4.2驱动 (7)

4.软件设计 (8)

4.1 PWM控制 (8)

4.2 总体软件流程图 (8)

4.3小车循迹流程图 (9)

4.4中断程序流程图 (10)

4.5单片机测序 (11)

5.参考资料 (15)

摘要

本设计是基于STC89C52单片机控制的简易自动寻迹小车系统,包括小车系统构成软硬件设计方法。小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车系统以 STC89S52 单片机为系统控制处理器;采用TCRT5000光电传感器获取赛道的信息,并通过驱动控制电路来对小车的方向和速度进行控制。此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。

1.任务及要求

1.1任务

设计一个基于直流电机的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色车轨迹行驶。系统方案方框图如图1-1所示。

循迹小车的C语言程序(带注释)

循迹小车的C语言程序(带注释)
/************ ******** * sbit PWM2=P1^1;
sbit IN1=P1^2; sbit IN2=P1^3; sbit IN3=P1^4; sbit IN4=P1^5; sbit start=P0^0; sbit stop=P0^1; //
//
电机控制端
小车启动信号 //小车停止信号
电机 1
PWM
调速
电机 2
PWM
调速
电机的前进、左转、右 转控制************************/
Βιβλιοθήκη Baidu
void turn(int cnt1,int sd1,int cnt2,int sd2) { forward1(); forward2(); speed(cnt1,sd1,cnt2,sd2); } /************ ***
当第二、三、四个 LED 检测到黑线时,小
车右大转
/************ **
小车检测到全黑情况的处 理----停车与左转----*************/
if(RP1==0&&RP2==0&&RP3==0&&RP4==0) { if(num==0) { back1(); // 0000
当四个 LED 第一次检测到黑线时,左轮后退,右轮
当最右边的 LED 检测到黑线时,小车左转

循迹小车三路的程序

循迹小车三路的程序

#include//*********************第一部分 Start***************************************sbit IN1=P2^2;//以下是点击驱动芯片L298 管脚位声明sbit PWM1=P2^0;sbit IN2=P2^3;sbit IN3=P2^4;sbit PWM2=P2^1;sbit IN4=P2^5;sbit ZUO=P1^0;sbit ZHONG=P1^1//此处是传感器YOU20 管脚位声明sbit YOU=P1^2;int count1=0;//用于定时计数的两个全局变量位声明int count2=0;//*********************第一部分 End***************************************//*********************第二部分 子函数定义 Start****************************void forward_turn1()//电机1 前进{IN1=0;IN2=1;}void reverse_return1()//电机1 后退{IN1=1;IN2=0;}void forward_turn2()//电机2 前进{IN3=0;IN4=1;}void reverse_return2()//电机2 后退{IN1=1;IN2=0;}void speed1(int ct,int sd)//电机1 速度控制函数,其中参数sd 为生成PWM 波形的比较基准{if(ct<=sd)PWM1=1;elsePWM1=0;}void speed2(int ct,int sd)//电机2 速度控制函数,其中参数sd 为生成PWM 波形的比较基准{if(ct<=sd)PWM2=1;elsePWM2=0;}//*********************第二部分 子函数定义 End*********************//**********第三部分 小车直线前进,左转,右转函数定义 Start********void advance(int ct1,int sd1,int ct2,int sd2)//小车直线前进函数{forward_turn1();forward_turn2();speed1(ct1,sd1);speed2(ct2,sd2);}//*************以下是方案1, 通过使两轮一快一慢来实现转向******************************void left_turn1(int ct1,int sd1,int ct2,int sd2)//小车左转{forward_turn1();forward_turn2();speed1(ct1,sd1);speed2(ct2,sd2);}void right_turn1(int ct1,int sd1,int ct2,int sd2)//小车右转{forward_turn1();forward_turn2();speed1(ct1,sd1);speed2(ct2,sd2);}//*************以下是方案2, 通过使两轮一正传,一反转来实现转向************************void left_turn2(int ct1,int sd1,int ct2,int sd2)//小车左转{forward_turn1();reverse_return2();speed1(ct1,sd1);speed2(ct2,sd2);}void right_turn2(int ct1,int sd1,int ct2,int sd2)//小车右转{forward_turn2();reverse_return1();speed1(ct1,sd1);speed2(ct2,sd2);}//**********第三部分 小车直线前进,左转,右转函数定义 End********//**********第4 部分 主函数 Start********************************main(){TMOD=0x11;//中断模式设置TH0=(65536-1000)/256;//定时器1 初始化TL0=(65536-1000)%256;EA=1;ET0=1;TR0=1;TH1=(65536-1000)/256;//定时器2 初始化TL1=(65536-1000)%256;EA=1;ET1=1;TR1=1;while(1){if(ZUO==0&&YOU==0&&ZHONG==0)//未检测到黑线,小车继续前进{advance(count1,500,count2,500);}if(ZUO==0&&YOU==0&&ZHONG==1)//未检测到黑线,小车继续前进{advance(count1,500,count2,500);}if(ZUO==1&&YOU==0&&ZHONG==0)//仅左轮检测到黑线,小车向左转弯{left_turn1(count1,200,count2,500);}if(ZUO==0&&YOU==1&&ZH

三路红外循迹小车 arduino程序

三路红外循迹小车 arduino程序

int pinI1=8;//定义I1接口int pinI2=9;//定义I2接口int speedpin=11;//定义EA(PWM调速)接口int pinI3=6;//定义I3接口int pinI4=7;//定义I4接口int speedpin1=10;//定义EB(PWM调速)接口int IRR=3;//定义右侧寻线传感器接口int IRM=4;//定义中间寻线传感器接口int IRL=5;//定义左侧寻线传感器接口void setup(){pinMode(pinI1,OUTPUT);pinMode(pinI2,OUTPUT);pinMode(speedpin,OUTPUT);pinMode(pinI3,OUTPUT);pinMode(pinI4,OUTPUT);pinMode(speedpin1,OUTPUT);pinMode(IRR,INPUT);pinMode(IRM,INPUT);pinMode(IRL,INPUT);}void advance()//前进{analogWrite(speedpin,100);//输入模拟值进行设定速度analogWrite(speedpin1,100);digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转digitalWrite(pinI3,HIGH);digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转digitalWrite(pinI2,HIGH);}void right()//右转{analogWrite(speedpin,60);//输入模拟值进行设定速度analogWrite(speedpin1,60);digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转digitalWrite(pinI3,LOW);digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转digitalWrite(pinI2,HIGH);}void left()//左转{analogWrite(speedpin,60);//输入模拟值进行设定速度analogWrite(speedpin1,60);digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转digitalWrite(pinI3,HIGH);digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转digitalWrite(pinI2,LOW);}void stop()//停止{digitalWrite(pinI4,HIGH);//使直流电机(右)制动digitalWrite(pinI3,HIGH);digitalWrite(pinI1,HIGH);//使直流电机(左)制动digitalWrite(pinI2,HIGH);}void loop(){int r,m,l;r=digitalRead(IRR);m=digitalRead(IRM);l=digitalRead(IRL);if(l==LOW &&m==HIGH && r==LOW)advance();else if(l==LOW &&m==HIGH && r==HIGH)advance(); else if(l==HIGH &&m==HIGH && r==LOW)advance(); else if(l==HIGH && m==LOW && r==LOW)left();else if(l==LOW && m==LOW && r==HIGH)right();else stop();}

循迹小车Arduino程序

循迹小车Arduino程序

//循迹小车Arduino 程序:

// R是右right,L是左left 小车对着自己看时分的左右

int MotorRight1=14; //A0 IN1

int MotorRight2=15; //A1 IN2

int MotorLeft1=16; //A2 IN3

int MotorLeft2=17; //A3 IN4

int MotorRPWM=5; //PWM 5

int MotorLPWM=3; //PWM 3

const int SensorLeft = 2; //左感测器输入脚

const int SensorRight = 6; //右感测器输入脚

int SL; //左感测器状态

int SR; //右感测器状态

void setup

{

9600;

pinModeMotorRight1, OUTPUT; // 脚位14 PWM pinModeMotorRight2, OUTPUT; // 脚位15 PWM pinModeMotorLeft1, OUTPUT; // 脚位16 PWM pinModeMotorLeft2, OUTPUT; // 脚位17 PWM pinModeMotorLPWM, OUTPUT; // 脚位3 PWM pinModeMotorRPWM, OUTPUT; // 脚位5 PWM pinModeSensorLeft, INPUT; //定义左感测器pinModeSensorRight, INPUT; //定义右感测器

}

void loop

{

SL = digitalReadSensorLeft;

循迹小车程序

循迹小车程序

1.#include<intrins.h>

2.#include<reg51.h>

3.#include<1602.h>

4.unsigned char code xiaoche[] = {"xiaoche"};

5.unsigned char code mm[] = {"mm"};

6.unsigned char code distance[]={"distance"};

7.unsigned char code time[]={"time"};

8.unsigned char zkbz=0 ; /*占空比*/

9.unsigned char zkby=0 ;

10.unsigned char t=0; /* 定时器中断计数器 */

11.unsigned int juli=0; /*距离*/

12.unsigned char a=0;

13.unsigned char sl=0; /*时间秒*/

14.unsigned char sh=0; /*时间秒*/

15.unsigned char fl=0; /*时间分*/

16.unsigned char fh=0; /*时间分*/

17.unsigned int dis=0; /*实际距离*/

18.bit flag=0; /*标志位*/

19.sbit gm=P2^3; /*光敏*/

20.

21./********************************************************

22.控制口定义

23.*********************************************************/

x循迹小车+电路+程序

x循迹小车+电路+程序

x循迹小车+电路+程序

部门: xxx

时间: xxx

制作人:xxx

整理范文,仅供参考,可下载自行修改

摘要

1602LCD)

智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能电动车就是其中的一个体现。本次设计的简易智能电动车,采用

AT89S52单片机作为小车的检测和控制核心;采用金属感应器TL-Q5MC来检测路上感应到的铁片,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着S形铁片行驶;采用霍尔元件A44E检测小车行驶速度;采用1602LCD实时显示小车行驶的时间,小车停止行驶后,轮流显示小车行驶时间、行驶距离、平均速度以及各速度区行驶的时间。本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。b5E2RGbCAP

目录

1 设计任务 (3)

1.1 要求 (3)

2 方案比较与选择 (4)

2.1路面检测模块 (4)

2.2 LCD显示模块 (5)

2.3测速模块 (5)

2.4控速模块 (6)

2.5模式选择模块 (7)

3 程序框图 (7)

4 系统的具体设计与实现 (9)

4.1路面检测模块 (9)

4.2 LCD显示模块 (9)

4.3测速模块 (9)

4.4控速模块 (9)

4.5复位电路模块 (9)

4.6模式选择模块 (9)

5 最小系统图 (10)

6 最终PCB板图 (12)

7 系统程序 (13)

8 致谢 (46)

循迹小车c语言程序精华版

循迹小车c语言程序精华版
P10=0;P11=0;
}
void mainBaidu Nhomakorabeavoid)
{
while(1)
{
if(zuobian==1&&zhongjian==1&&youbian==0)//右边检测到黑线
zuoguai();
if(zuobian==0&&zhongjian==1&&youbian==1) //左边检测到黑线
youguai();
if((zuobian==youbian&&zhongjian==0))
qianjin();
}
}
#include<reg52.h>
sbit P10=P1^0; //控制左电机前进
sbit P11=P1^1; //控制左电机后退
sbit P12=P1^2; //控制右电机前进
sbit P13=P1^3; //控制右电机后退
sbit zuobian=P3^2; //左边传感器
sbit youbian=P3^3; //右边传感器
sbit zhongjian=P3^4 ; //中间传感器
void qianjin()//小车前进
{ P10=0;P11=1;
P12=0;P13=1;
}
void youguai()//小车右拐

自动循迹电动小车程序图

自动循迹电动小车程序图

黑纸遮蔽

白纸遮蔽

黑纸遮蔽

白纸遮蔽

图5-1光电检测流程图

开 始 检测右传 感器状态

检测左传 感器状态

电机正传小车右转

电机反转小车左转

点 击 停 转

YES

NO

YES

NO

YES

NO NO

YES

光电管1遇白线光电管2遇黑线

向右运行

延时5秒

光电管1遇黑线光电管2遇黑线

光电管1遇黑线光电管2遇白线

向左运行

光电管1遇白线光电管2遇白线

向前运行

开 始

YES

NO

YES

NO

YES

NO NO

YES

图5-3系统主程序流程图

向左运行

向右运行

延时5秒

光电管3遇黑线

光电管4遇黑线

光电管3遇黑线

光电管4遇白线

光电管3遇白线

光电管4遇黑线

向前运行

光电管3遇白线

光电管4遇白线

51单片机循迹小车程序

51单片机循迹小车程序

/*功能:寻迹小车

使用芯片:AT89S52 或者STC89C52 或AT89S51 STC89C51

晶振:12MHZ

编译环境:Keil

作者:MH~ */

#include // 引用标准库的头文件

#include

#define uchar unsigned char

#define uint unsigned int

//=================电机驱动===================== sbit dianji_r = P3^0; //右边电机控制口,低电平转?

sbit dianji_l = P3^7; //左边电机控制口,低电平转

//=============循迹感应接口====================== sbit xjmk_r = P3^2;// 右边寻迹模块检测口INT0

sbit xjmk_l = P3^3;// 左边寻迹模块检测口INT1

void check_righet();//右边时候检测到黑线测试程序

void check_left();//左边时候检测到黑线测试程序

void delay_50us(uint t);

void delayms(uint Ms);

uchar r_count;//右边传感器检测到的次数计数单元

uchar l_count;

uint time;

//***********************主程序****************************** main()

{

time=50;

dianji_r=0;//上电时右侧电机运行

循迹小车-c程序

循迹小车-c程序

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit en1=P1^1;

sbit en2=P1^2;

sbit M1_1=P1^3;

sbit M1_2=P1^4;

sbit M2_1=P1^5;

sbit M2_2=P1^6;

uchar count,l_flag,r_flag,pro_right,pro_left;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void init() //初始

{

TMOD=0X01;

TH0=(65536-100)/256;

TL0=(65536-100)%256;

EA=1;

ET0=1;

TR0=1;

en1=1;

en2=1;

l_flag=1;

r_flag=1;

}

/**********定时器0中断函数****/

//最小分度为0.1ms 。以10ms为一个周期。即100次中断为一个周期

void time0()interrupt 1

{

TH0 = (65536-100)/256;

TL0 = (65536-100)%256;

count++;

count=(count>=100)?0:count;

if(l_flag==1)

{

M1_1=(count<=pro_left)?1:0;

M1_2=0;

}

if(l_flag==0)

{

M1_2=(count<=pro_left)?1:0;

循迹小车(程序)

循迹小车(程序)

附录程序

目录

一、前言------------------------------------------------------------

二、小车功能------------------------------------------------------

三、元器件选择--------------------------------------------------

四、 I/O分配及硬件连接简图---------------------------------

五、相关模块、算法---------------------------------------------

六、系统框图------------------------------------------------------

七、调试过程------------------------------------------------------

八、小车图片资料---------------------------------------------------

九、讲座所感------------------------------------------------------

十、实习总结------------------------------------------------------

一、前言

感生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家合作,各显身手,在奋战中给大三学年画上了圆满的句号。

自动循迹小车系统流程图(2)

自动循迹小车系统流程图(2)

自动循迹小车系统流程图(2) -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

整体方案框图

路面黑线检测程序流程图

车速检测程序

过线返回程序流程图

循迹调整子程序

51单片机循迹小车程序

51单片机循迹小车程序

/*功能:寻迹小车

使用芯片:AT89S52 或者STC89C52 或AT89S51 STC89C51

晶振:12MHZ

编译环境:Keil

作者:MH~*/

#include <reg51.h> // 引用标准库的头文件

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

//=================电机驱动=====================

sbit dianji_r = P3^0; //右边电机控制口,低电平转?

sbit dianji_l = P3^7; //左边电机控制口,低电平转

//=============循迹感应接口======================

sbit xjmk_r = P3^2;// 右边寻迹模块检测口INT0

sbit xjmk_l = P3^3;// 左边寻迹模块检测口INT1

void check_righet();//右边时候检测到黑线测试程序

void check_left();//左边时候检测到黑线测试程序

void delay_50us(uint t);

void delayms(uint Ms);

uchar r_count;//右边传感器检测到的次数计数单元

uchar l_count;

uint time;

//***********************主程序****************************** main()

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg52.h>
//*********************第一部分 Start***************************************
sbit IN1=P2^2;//以下是点击驱动芯片L298 管脚位声明
sbit PWM1=P2^0;
sbit IN2=P2^3;
sbit IN3=P2^4;
sbit PWM2=P2^1;
sbit IN4=P2^5;
sbit ZUO=P1^0;
sbit ZHONG=P1^1//此处是传感器YOU20 管脚位声明
sbit YOU=P1^2;
int count1=0;//用于定时计数的两个全局变量位声明
int count2=0;
//*********************第一部分 End***************************************
//*********************第二部分 子函数定义 Start****************************
void forward_turn1()//电机1 前进
{
IN1=0;
IN2=1;
}
void reverse_return1()//电机1 后退
{
IN1=1;
IN2=0;
}
void forward_turn2()//电机2 前进
{
IN3=0;
IN4=1;
}
void reverse_return2()//电机2 后退
{
IN1=1;
IN2=0;
}
void speed1(int ct,int sd)//电机1 速度控制函数,其中参数sd 为生成PWM 波形的比较基准
{
if(ct<=sd)
PWM1=1;
else
PWM1=0;
}
void speed2(int ct,int sd)//电机2 速度控制函数,其中参数sd 为生成PWM 波形的比较基准
{
if(ct<=sd)
PWM2=1;
else
PWM2=0;
}
//*********************第二部分 子函数定义 End*********************
//**********第三部分 小车直线前进,左转,右转函数定义 Start********
void advance(int ct1,int sd1,int ct2,int sd2)//小车直线前进函数
{
forward_turn1();
forward_turn2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
//*************以下是方案1, 通过使两轮一快一慢来实现转向******************************
void left_turn1(int ct1,int sd1,int ct2,int sd2)//小车左转
{
forward_turn1();
forward_turn2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
void right_turn1(int ct1,int sd1,int ct2,int sd2)//小车右转
{
forward_turn1();
forward_turn2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
//*************以下是方案2, 通过使两轮一正传,一反转来实现转向************************
void left_turn2(int ct1,int sd1,int ct2,int sd2)//小车左转
{
forward_turn1();
reverse_return2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
void right_turn2(int ct1,int sd1,int ct2,int sd2)//小车右转
{
forward_turn2();
reverse_return1();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
//**********第三部分 小车直线前进,左转,右转函数定义 End********
//**********第4 部分 主函数 Start********************************
main()
{
TMOD=0x11;//中断模式设置
TH0=(65536-1000)/256;//定时器1 初始化
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
TH1=(65536-1000)/256;//定时器2 初始化
TL1=(65536-1000)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(ZUO==0&&YOU==0&&ZHONG==0)//未检测到黑线,小车继续前进
{
advance(count1,500,count2,500);
}
if(ZUO==0&&YOU==0&&ZHONG==1)//未检测到黑线,小车继续前进
{
advance(count1,500,count2,500);
}
if(ZUO==1&&YOU==0&&ZHONG==0)

//仅左轮检测到黑线,小车向左转弯
{
left_turn1(count1,200,count2,500);
}
if(ZUO==0&&YOU==1&&ZH
ONG==1)//仅左轮检测到黑线,小车向左转弯
{
left_turn1(count1,200,count2,500);
}
if(ZUO==0&&YOU==1&&ZHONG==0)//仅右轮检测到黑线,小车向右转弯
{
right_turn1(count1,500,count2,200);
}
if(ZUO==1&&YOU==1&&ZHONG==0)//仅右轮检测到黑线,小车向右转弯
{
right_turn1(count1,500,count2,200);
}
if(ZUO==1&&YOU==1)/*左右轮均检测黑线,小车继续前进*/
/*(此处用来处理"8"字型路线交叉处小车如何前进的问题)*/
{
advance(count1,500,count2,500);
}
}
}
//**********第4 部分 主函数 End********************************
//**********第五部分 中断服务程序 Start********************************
void time0()interrupt 1
{
TH0=(65536-1000)/256;//定时1ms
TL0=(65536-1000)%256;
count1++;
if(count1>=1000)//周期是1s
count1=0;
}
void time1()interrupt 3
{
TH0=(65536-1000)/256;//定时1ms
TL0=(65536-1000)%256;
count2++;
if(count2>=1000)//周期是1s
count2=0;
}//**********第五部分 中断服务程序 End********************************




相关文档
最新文档