循迹小车的程序_第1页
循迹小车的程序_第2页
循迹小车的程序_第3页
循迹小车的程序_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

循迹小车程序#include<reg52.h>

//*********************第一部分Start***************************************

sbitIN1=P1^0;//以下是点击驱动芯片L298管脚位声明

sbitPWM1=P1^1;

sbitIN2=P1^2;

sbitIN3=P1^3;

sbitPWM2=P1^4;

sbitIN4=P1^5;

sbitRPR1=P1^6;//此处是传感器RPR220管脚位声明

sbitRPR2=P1^7;

intcount1=0;//用于定时计数的两个全局变量位声明

intcount2=0;

//*********************第一部分End***************************************

//*********************第二部分子函数定义Start****************************

voidforward_turn1()//电机1前进

{

IN1=0;

IN2=1;

}

voidreverse_return1()//电机1后退

{

IN1=1;

IN2=0;

}

voidforward_turn2()//电机2前进{

IN3=0;

IN4=1;

}

voidreverse_return2()//电机2后退

{

IN1=1;

IN2=0;

}

voidspeed1(intct,intsd)//电机1速度控制函数,其中参数sd为生成PWM波形的比较基准

{

if(ct<=sd)

PWM1=1;

else

PWM1=0;

}

voidspeed2(intct,intsd)//电机2速度控制函数,其中参数sd为生成PWM波形的比较基准

{

if(ct<=sd)

PWM2=1;

else

PWM2=0;

}

//*********************第二部分子函数定义End*********************

//**********第三部分小车直线前进,左转,右转函数定义Start********

voidadvance(intct1,intsd1,intct2,intsd2)//小车直线前进函数

{

forward_turn1();

forward_turn2();

speed1(ct1,sd1);

speed2(ct2,sd2);

}

//*************以下是方案1,通过使两轮一快一慢来实现转向******************************

voidleft_turn1(intct1,intsd1,intct2,intsd2)//小车左转

{

forward_turn1();

forward_turn2();

speed1(ct1,sd1);

speed2(ct2,sd2);

}

voidright_turn1(intct1,intsd1,intct2,intsd2)//小车右转

{

forward_turn1();

forward_turn2();

speed1(ct1,sd1);

speed2(ct2,sd2);

}

//*************以下是方案2,通过使两轮一正传,一反转来实现转向************************

voidleft_turn2(intct1,intsd1,intct2,intsd2)//小车左转

{

forward_turn1();

reverse_return2();speed1(ct1,sd1);

speed2(ct2,sd2);

}

voidright_turn2(intct1,intsd1,intct2,intsd2)//小车右转

{

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(RPR1==0&&RPR2==0)//未检测到黑线,小车继续前进

{

advance(count1,500,count2,500);

}

if(RPR1==1&&RPR2==0)//仅左轮检测到黑线,小车向左转弯

{

left_turn1(count1,200,count2,500);

}

if(RPR1==0&&RPR2==1)//仅右轮检测到黑线,小车向右转弯

{

right_turn1(count1,500,count2,200);

}

if(RPR1==1&&RPR2==1)/*左右轮均检测黑线,小车继续前进*/

/*(此处用来处理"8"字型路线交叉处小车如何前进的问题)*/

{

advance(count1,500,count2,500);

}

}

}

//**********第4部分主函数End********************************

//**********第五部分中断服务程序Start********************************

voidtime0()interrupt1

{

TH0=(65536-1000)/256;//定时1ms

TL0=(65536-1000)%256;

count1++;

if(count1>=1000)//周期是1s

count1=0;

}voidtime1()interrupt3

{

TH0=(65536-1000)/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论