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

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

#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; //开启定时器

}

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

总共延时

1ms

乘以

count

************************************************/ void DelayX1ms(uint count)

{

uint j;

while(count--!=0)

{

for(j=0;j<72;j++);

}

}

/************************************************ 电机转动函数定义

************************************************/ void ZhiXing( )

{

p1_0=0;

p1_1=0;

p1_2=0;

p1_3=0;

DelayX1ms(10);

p1_0=0;

p1_1=1;

p1_2=0;

p1_3=1;

DelayX1ms(15);

}

void ZuoZhuan( )

{

pwm1=0;

pwm2=0;

DelayX1ms(10); p1_0=0;

p1_1=1;

p1_2=1;

p1_3=0;

DelayX1ms(20); }

void YouZhuan( )

{

pwm1=0;

pwm2=0;

DelayX1ms(10);

p1_0=1;

p1_1=0;

p1_2=0;

p1_3=1;

DelayX1ms(20); }

void HouTui( )

{

p1_0=0;

p1_1=0;

p1_2=0;

p1_3=0;

DelayX1ms(6); p1_0=1;

p1_1=0;

p1_2=1;

p1_3=0;

DelayX1ms(20);

}

/************************************************ 主函数

************************************************/ void main( )

{

Time1Config();

while(1)

{

if( p2_1==0 && p2_2==0 && p2_3==1)

{

YouZhuan( );

}

else if(p2_1==1 && p2_2==0 && p2_3==0)

{

ZuoZhuan( );

}

else

{

ZhiXing( );

}

}

}

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

* 函数名 : Time1

* 函数功能 : 定时器1的中断函数

* 输入 : 无

* 输出 : 无

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

void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断

{

timer1++;

if(timer1>100) //PWM周期为100*0.5ms

{

timer1=0;

}

if(timer1 < 85) //改变30这个值可以改变直流电机的速度

{

pwm1=1;

pwm2=1;

}

else

{

pwm1=0;

pwm2=0;

}

TH1 = 0xFE; //重新赋初值

TL1 = 0x0C;

}

相关文档
最新文档