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

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

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

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

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

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

#inelude

#inelude

#defineuintunsignedint

#defineueharunsignedchar

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

ueharled_data[9]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};

ueharturn_count=0;

bitend=0;//圈数跑完标志

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

sbitxg0=P1A0;//左寻轨对管

sbitxg仁P1A1;//中间寻轨对管

sbitxg2=P1A2;//右寻轨对管

sbitxz=P1A3;〃感应挡板对管

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

sbitQ_IN仁P2A0;//车前左轮控制

sbitQ_IN2=P2A1;

sbitQ_IN3=P2A2;//车前右轮控制

sbitQ_IN4=P2A3;

sbitH」N仁P2A4;//车尾左轮控制

sbitH_IN2=P2A5;

sbitH_IN3=P2A6;//车尾右轮控制

sbitH_IN4二P2八7;

sbitQ_ENA=P3A0;//车前左轮使能,PWM

sbitQ_ENB=P3A1;//车前右轮使能,

sbitH_ENA=P3A6;//车尾左轮使能,

sbitH_ENB=P3A7;//车尾右轮使能,

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

#definestra_q_l100//直线行走时,四个轮子占空比调试

#definestra_q_r100

#definestra_h_l100

#definestra_h_r100

#defineturn_q」100//转弯时四个轮子的占空比调试

#defineturn_q」100

#defineturn_h」100

#defineturn_h」100

#defineturnr_time2900〃右转弯时的延时常数

#defineturnl_time3000//左转弯时的延时常数

#definedt_time5800//原地掉头时延时常数

#defineover_time1000//停止延时

#defineback_time2500//走完环形,回到直道延时转弯

#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」;

h_duty_r=stra_h_r;

Q_IN仁1;

Q」N2=0;

Q_IN3=1;

Q_IN4=0;

H」N仁1;

H」N2=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」;

h_duty_r=stra_h_r;

Q_IN仁0;

Q_IN2=1;

Q_IN3=0;

Q_IN4=1;

H」N仁0;

H_IN2=1;

H_IN3=0;

H_IN4=1;

}

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

voidturn」eft()//左转

{

q_duty_l=turn_q」;

q_duty_r=turn_q_r;

h_duty_l=turn_h_l;h_duty_r=turn_h_r;

Q_IN仁0;//左轮反转

Q_IN2=1;

H_IN2=1;

Q_IN3=1;//右轮正转

Q」N4=0;

H_IN3=1;

H_IN4=0;

delay(turnl_time);

}

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

voidturn_right()//右转

{

q_duty_l=turn_q」;

q_duty_r=turn_q_r;

h_duty_l=turn_q」;

h_duty_r=turn_q_r;

Q_IN仁1;//左轮正转

Q_IN2=0;

H」N仁1;

H」N2=0;

Q_IN3=0;//右轮反转

Q_IN4=1;

H_IN4=1;

delay(turnr_time);

}

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

voidturn_round()//原地掉头

{

q_duty_l=turn_q」;

q_duty_r=turn_q_r;

h_duty_l=turn_h_l;

h_duty_r=turn_h_r;

Q_IN仁0;//左轮反转

Q_IN2=1;

H」N仁0;

H_IN2=1;

Q_IN3=1;//右轮正转

Q_IN4=0;

H_IN3=1;

H_IN4=0;

delay(dt_time);

}

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

voidover()//小车停止

{

Q_IN仁0;

Q」N2=0;

Q_IN3=0;

Q_IN4=0;

H」N仁0;

H」N2=0;

H_IN3=0;

H_IN4=0;

}

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

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

{

q_duty_l二turn_q」;

q_duty_r=turn_q_r;

h_duty_l=turn_q」;

h_duty_r=turn_q_r;

Q_IN仁1;//左轮正转

Q_IN2=0;

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」;

q_duty_r=turn_q_r;

h_duty_l=turn_h_l;

h_duty_r=turn_h_r;

Q_IN仁0;//左轮反转

Q_IN2=1;

H」N仁0;

H_IN2=1;

Q_IN3=1;//右轮正转

Q_IN4=0;

H_IN3=1;

H_IN4=0;

delay(correct_l_time);

}

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

voidxunji()

{

if(xg仁=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」eft();

}

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」eft();

}

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--;

}

{end=1;

over();

delay(500);

}

}

else

if((xgO==O)&&(xg仁=0)&&(xg2==0))

{straight。

;}

else

if((xg0==1)&&(xg仁=0)&&(xg2==0))

{over();

delay(over_time);

houtui();

delay(hou_time);

correct_right();

}//左偏,向右矫正

elseif((xgO==O)&&(xg仁=0)&&(xg2==1))

{over();

delay(over_time);

houtui();

delay(hou_time);

correct_left();

}//右偏,向左矫正

}

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

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

{

EX0=0;

delay_cir(250);

circle++;

if(circle>8)

{circle=0;

}

P0=led_data[circle];

EX0=1;

}

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

voidtimel(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=O;

if(m>100)

{H_ENB=1;m=0;}

PO=led_data[circle];

TH1=0XFF;

TL1=0XF6;

}

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

voidmain()

{

PO=led_data[circle];

P1=0xFF;

P1=0XFF;〃P1口做输入

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

P3=0XFF;

TMOD=OX11;//TO,T1,工作方式1

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

TL1=0XF6;

TR仁1;

EX0=1;

ET1=1;

EA=1;

while

(1)

{

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

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

{

xunji();

};

};

}

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

当前位置:首页 > 医药卫生 > 预防医学

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

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