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

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

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

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

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

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

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

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

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

ucharcircle=0,cir_comp=0,cir_count=0;//设定(shèdìnɡ)圈数,实际圈数

ucharturn_count=0;

bitend=0;//圈数跑完标志(biāozhì)

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

sbitxg0=P1^0;//左寻轨对管

sbitxg1=P1^1;//中间(zhōngjiān)寻轨对管

sbitxg2=P1^2;//右寻轨对管

sbitxz=P1^3;//感应挡板对管

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

sbitQ_IN1=P2^0;//车前左轮控制

sbitQ_IN2=P2^1;

sbitQ_IN3=P2^2;//车前右轮控制

sbitQ_IN4=P2^3;

sbitH_IN1=P2^4;//车尾左轮控制

sbitH_IN2=P2^5;

sbitH_IN3=P2^6;//车尾(chēwěi)右轮控制

sbitH_IN4=P2^7;

sbitQ_ENA=P3^0;//车前左轮(zuǒlún)使能,PWM

sbitQ_ENB=P3^1;//车前右轮使能,

sbitH_ENA=P3^6;//车尾(chēwěi)左轮使能,

sbitH_ENB=P3^7;//车尾右轮使能,

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

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

#definestra_q_r100

#definestra_h_l100

#definestra_h_r100

#defineturn_q_l100//转弯时四个轮子的占空比调试

#defineturn_q_r100

#defineturn_h_l100

#defineturn_h_r100

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

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

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

#defineover_time1000//停止延时

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

#defineblack_time1500//过黑线的时间

#definecorrect_l_time700//左矫正(jiǎozhèng)时间

#definecorrect_r_time700//右矫正(jiǎozhèng)时间

#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)//延时函数(hánshù)

{

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()//后退(hòutuì)

{

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()//左转(zuǒzhuǎn)

{

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;//左轮(zuǒlún)反转

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;//左轮(zuǒlún)正转

Q_IN2=0;

H_IN1=1;

H_IN2=0;

Q_IN3=0;//右轮反转(fǎnzhuǎn)

Q_IN4=1;

H_IN3=0;

H_IN4=1;

delay(turnr_time);

}

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

voidturn_round()//原地(yuándì)掉头

{

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;//左轮(zuǒlún)反转

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()//小车(xiǎochē)停止

{

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()//左偏,向右矫正(jiǎozhèng)

{

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;//左轮(zuǒlún)正转

Q_IN2=0;

H_IN1=1;

H_IN2=0;

Q_IN3=0;//右轮反转(fǎnzhuǎn)

Q_IN4=1;

H_IN3=0;

H_IN4=1;

delay(correct_r_time);

}

voidcorrect_left()//右偏,向左矫正(jiǎozhèng)

{

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;//左轮(zuǒlún)反转

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

}//左偏,向右矫正(jiǎozhèng)

else

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

{over();

delay(over_time);

houtui();

delay(hou_time);

correct_left();

}//右偏,向左矫正(jiǎozhèng)

}

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

voidint0(void)interrupt0//中断(zhōngduàn)圈数设定

{

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溢出中断(zhōngduàn),电机调速

{

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口做输入(shūrù)

P2=0X00;//P2口初始化,小车(xiǎochē)禁止

P3=0XFF;

TMOD=0X11;//T0,T1,工作(gōngzuò)方式1

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

TL1=0XF6;

TR1=1;

EX0=1;

ET1=1;

EA=1;

while

(1)

{

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

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

{

xunji();

};

};

}

 

内容总结

(1)#include

#include

#defineuintunsignedint

#defineucharunsignedchar

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

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

(2)while(n--)

{

for(x=0

(3)}

else

if(turn_count==9)

{houtui()

(4)}

if(turn_count>=9)

{turn_count=0

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

当前位置:首页 > 高中教育 > 数学

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

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