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

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

ID:15629793

大小:55.00 KB

页数:18页

时间:2018-08-04

上传者:U-3204
基于51单片机智能小车循迹程序_第1页
基于51单片机智能小车循迹程序_第2页
基于51单片机智能小车循迹程序_第3页
基于51单片机智能小车循迹程序_第4页
基于51单片机智能小车循迹程序_第5页
资源描述:

《基于51单片机智能小车循迹程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

#include#include#defineuintunsignedint#defineucharunsignedchar/**********************************/ucharled_data[9]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};ucharcircle=0,cir_comp=0,cir_count=0;//设定圈数,实际圈数ucharturn_count=0;bitend=0;//圈数跑完标志/*********************************/sbitxg0=P1^0;//左寻轨对管sbitxg1=P1^1;//中间寻轨对管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;//车尾右轮控制sbitH_IN4=P2^7;sbitQ_ENA=P3^0;//车前左轮使能,PWMsbitQ_ENB=P3^1;//车前右轮使能,sbitH_ENA=P3^6;//车尾左轮使能,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//左矫正时间#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);}elseif(turn_count==2){houtui();delay(hou_time);turn_left();} elseif(turn_count==3){houtui();delay(hou_time);turn_right();}elseif(turn_count==4){houtui();delay(hou_time);turn_right();}elseif(turn_count==5){straight();delay(black_time);}elseif(turn_count==6){houtui();delay(hou_time);turn_right(); }elseif(turn_count==7){houtui();delay(hou_time);turn_right();straight();delay(back_time);turn_left();}elseif(turn_count==8){straight();delay(black_time);}elseif(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);}}elseif((xg0==0)&&(xg1==0)&&(xg2==0)){straight();}elseif((xg0==1)&&(xg1==0)&&(xg2==0)){over();delay(over_time);houtui();delay(hou_time);correct_right(); }//左偏,向右矫正elseif((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(i100){Q_ENA=1;i=0;}if(j100) {Q_ENB=1;j=0;}if(k100){H_ENA=1;k=0;}if(m100){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,工作方式1TH1=0XFF;//T1中断一次10USTL1=0XF6;TR1=1;EX0=1;ET1=1;EA=1;while(1){while((xz==1)&&(end!=1))//无挡板,扫描对管,前进{xunji();};}; }

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭