基于51单片机智能小车循迹程序.docx

上传人:b****8 文档编号:10083233 上传时间:2023-02-08 格式:DOCX 页数:14 大小:61.43KB
下载 相关 举报
基于51单片机智能小车循迹程序.docx_第1页
第1页 / 共14页
基于51单片机智能小车循迹程序.docx_第2页
第2页 / 共14页
基于51单片机智能小车循迹程序.docx_第3页
第3页 / 共14页
基于51单片机智能小车循迹程序.docx_第4页
第4页 / 共14页
基于51单片机智能小车循迹程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于51单片机智能小车循迹程序.docx

《基于51单片机智能小车循迹程序.docx》由会员分享,可在线阅读,更多相关《基于51单片机智能小车循迹程序.docx(14页珍藏版)》请在冰豆网上搜索。

基于51单片机智能小车循迹程序.docx

基于51单片机智能小车循迹程序

基于51单片机智能小车循迹程序

#defineblack_time1500//过黑线的时间

#definecorrect_l_time700//左矫正时间

#definecorrect_r_time700//右矫正时间

#definehou_time200

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

ucharq_duty_l,q_duty_r,h_duty_l,h_duty_r,//车前后左右轮占空比

i=0,j=0,k=0,m=0;

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

voiddelay_cir(uintn)

{

ucharx;

while(n--)

{

for(x=0;x<250;x++);

};

}

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

voiddelay(uintct)//延时函数

{

uintt;

t=ct;

while(t--);

}

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

voidstraight()//直走

{

q_duty_l=stra_q_l;

q_duty_r=stra_q_r;

h_duty_l=stra_h_l;

h_duty_r=stra_h_r;

Q_IN1=1;

Q_IN2=0;

Q_IN3=1;

Q_IN4=0;

H_IN1=1;

H_IN2=0;

H_IN3=1;

H_IN4=0;

}

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

voidhoutui()//后退

{

q_duty_l=stra_q_l;

q_duty_r=stra_q_r;

h_duty_l=stra_h_l;

h_duty_r=stra_h_r;

Q_IN1=0;

Q_IN2=1;

Q_IN3=0;

Q_IN4=1;

H_IN1=0;

H_IN2=1;

H_IN3=0;

H_IN4=1;

}

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

voidturn_left()//左转

{

q_duty_l=turn_q_l;

q_duty_r=turn_q_r;

h_duty_l=turn_h_l;

h_duty_r=turn_h_r;

Q_IN1=0;//左轮反转

Q_IN2=1;

H_IN1=0;

H_IN2=1;

Q_IN3=1;//右轮正转

Q_IN4=0;

H_IN3=1;

H_IN4=0;

delay(turnl_time);

}

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

voidturn_right()//右转

{

q_duty_l=turn_q_l;

q_duty_r=turn_q_r;

h_duty_l=turn_q_l;

h_duty_r=turn_q_r;

Q_IN1=1;//左轮正转

Q_IN2=0;

H_IN1=1;

H_IN2=0;

Q_IN3=0;//右轮反转

Q_IN4=1;

H_IN3=0;

H_IN4=1;

delay(turnr_time);

}

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

voidturn_round()//原地掉头

{

q_duty_l=turn_q_l;

q_duty_r=turn_q_r;

h_duty_l=turn_h_l;

h_duty_r=turn_h_r;

Q_IN1=0;//左轮反转

Q_IN2=1;

H_IN1=0;

H_IN2=1;

Q_IN3=1;//右轮正转

Q_IN4=0;

H_IN3=1;

H_IN4=0;

delay(dt_time);

}

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

voidover()//小车停止

{

Q_IN1=0;

Q_IN2=0;

Q_IN3=0;

Q_IN4=0;

H_IN1=0;

H_IN2=0;

H_IN3=0;

H_IN4=0;

}

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

voidcorrect_right()//左偏,向右矫正

{

q_duty_l=turn_q_l;

q_duty_r=turn_q_r;

h_duty_l=turn_q_l;

h_duty_r=turn_q_r;

Q_IN1=1;//左轮正转

Q_IN2=0;

H_IN1=1;

H_IN2=0;

Q_IN3=0;//右轮反转

Q_IN4=1;

H_IN3=0;

H_IN4=1;

delay(correct_r_time);

}

voidcorrect_left()//右偏,向左矫正

{

q_duty_l=turn_q_l;

q_duty_r=turn_q_r;

h_duty_l=turn_h_l;

h_duty_r=turn_h_r;

Q_IN1=0;//左轮反转

Q_IN2=1;

H_IN1=0;

H_IN2=1;

Q_IN3=1;//右轮正转

Q_IN4=0;

H_IN3=1;

H_IN4=0;

delay(correct_l_time);

}

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

voidxunji()

{

if(xg1==1)

{

turn_count++;

over();

delay(over_time);

if(turn_count==1)

{straight();

delay(black_time);

}

else

if(turn_count==2)

{houtui();

delay(hou_time);

turn_left();

}

else

if(turn_count==3)

{houtui();

delay(hou_time);

turn_right();

}

else

if(turn_count==4)

{houtui();

delay(hou_time);

turn_right();

}

else

if(turn_count==5)

{straight();

delay(black_time);

}

else

if(turn_count==6)

{houtui();

delay(hou_time);

turn_right();

}

else

if(turn_count==7)

{houtui();

delay(hou_time);

turn_right();

straight();

delay(back_time);

turn_left();

}

else

if(turn_count==8)

{straight();

delay(black_time);

}

else

if(turn_count==9)

{houtui();

delay(100);

turn_round();

}

if(turn_count>=9)

{turn_count=0;

cir_count++;

circle--;

}

if(cir_count==cir_comp)

{end=1;

over();

delay(500);

}

}

else

if((xg0==0)&&(xg1==0)&&(xg2==0))

{straight();}

else

if((xg0==1)&&(xg1==0)&&(xg2==0))

{over();

delay(over_time);

houtui();

delay(hou_time);

correct_right();

}//左偏,向右矫正

else

if((xg0==0)&&(xg1==0)&&(xg2==1))

{over();

delay(over_time);

houtui();

delay(hou_time);

correct_left();

}//右偏,向左矫正

}

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

voidint0(void)interrupt0//中断圈数设定

{

EX0=0;

delay_cir(250);

circle++;

cir_comp++;

if(circle>8)

{circle=0;

cir_comp=0;

}

P0=led_data[circle];

EX0=1;

}

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

voidtime1(void)interrupt3//T1溢出中断,电机调速

{

i++;

j++;

k++;

m++;

if(i

Q_ENA=1;

elseQ_ENA=0;

if(i>100)

{Q_ENA=1;i=0;}

if(j

Q_ENB=1;

elseQ_ENB=0;

if(j>100)

{Q_ENB=1;j=0;}

if(k

H_ENA=1;

elseH_ENA=0;

if(k>100)

{H_ENA=1;k=0;}

if(m

H_ENB=1;

elseH_ENB=0;

if(m>100)

{H_ENB=1;m=0;}

P0=led_data[circle];

TH1=0XFF;

TL1=0XF6;

}

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

voidmain()

{

P0=led_data[circle];

P1=0xFF;

P1=0XFF;//P1口做输入

P2=0X00;//P2口初始化,小车禁止

P3=0XFF;

TMOD=0X11;//T0,T1,工作方式1

TH1=0XFF;//T1中断一次10US

TL1=0XF6;

TR1=1;

EX0=1;

ET1=1;

EA=1;

while

(1)

{

while((xz==1)&&(end!

=1))//无挡板,扫描对管,前进

{

xunji();

};

};

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1