小车循迹程序.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
小车循迹程序 #includereg52.h unsigned char zkb1=0 ; /*左边电机的占空比*/ unsigned char zkb2=0 ; /*右边电机的占空比*/ unsigned char t=0; /* 定时器中断计数器 */ bit flag=0; /*标志位检测一个pwm波是否结束*/ sbit SEN1=P2^0; sbit SEN2=P2^1; sbit LED1=P1^0; sbit LED2=P1^1; sbit LED3=P1^2; sbit LED4=P1^3; sbit LED5=P1^4; sbit IN4=P0^1; sbit IN3=P0^2; sbit IN2=P0^5; sbit IN1=P0^6; sbit ENA=P0^7; sbit ENB=P0^3; sbit IR=P3^2; //定义红外接收头 /*延时函数*/ void delay(int z) { while(z--); } /*循迹函数*/ void xunji() { if(SEN1==1SEN2==1)//两个传感器均在黑线上,直走,led1,led2都亮 { flag=0; IN1=1; IN2=0; IN3=1; IN4=0; LED1=0; LED2=0; zkb1=30; zkb2=30; // ENA=1;ENB=1; delay(2000); } if(SEN1==1SEN2==0)//右侧传感器不在线上,小车偏右,led1亮,led2灭 { flag=0; IN1=1; IN2=0; IN3=1; IN4=0; LED1=0; LED2=1; zkb1=0; zkb2=60; // ENA=1;ENB=1;//左轮倒转 delay(2000); } if(SEN1==0SEN2==1)//左侧传感器不在线上,小车偏左,led2亮,led1灭 { flag=0; IN1=1; IN2=0; IN3=1; IN4=0; LED1=1; LED2=0; zkb1=60; zkb2=0; // ENA=1;ENB=1;////右轮停转 delay(2000); } if(SEN1==0SEN2==0)//两侧传感器均不在线上,小车偏离轨道 { flag=0; IN1=0; IN2=1; IN3=0; IN4=1; LED1=1; LED2=1; zkb1=0; zkb2=0; // ENA=1;ENB=1; delay(2000);//小车转回轨道上 } } /*初始化函数*/ void Init(void) { TMOD=0x01; /* 设定T0的工作模式为2,设定T0的工作 模式为1 */ TH0=(65536-100)/256; TL0=(65536-100)%256; IT0=1; EA=1; /* 开总中断 */ ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */ EX0=1; /*开中断0*/ } void main() { Init(); zkb1=30; zkb2=30; while(1) { if(IR==0)//检测红外线信号,启动小车 { delay(100); //延时防止误操作 if(IR==0) { LED5=0;//红外指示灯亮 delay(100000);//延时,防止红外脉冲信号被再次利用作为停止指令 LED5=1;//红外指示灯灭 IN1=1;//给电机加电启动 IN2=0; IN3=1; IN4=0; while(1) { xunji();//寻迹 if(IR==0);//停止信号 { delay(100); if(IR==0) { LED5=0; delay(100000); LED5=1; IN1=0;//电机断电,小车停止待命 IN2=0; IN3=0; IN4=0; break; } } } } } } } /*中断函数+脉宽调制*/ void timer0() interrupt 1 { if(t==0) { if(tzkb1) ENA=1; else ENA=0; if(tzkb2) ENB=1; else ENB=0; t++; if(t=100) {t=0;} } } 交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。 机械一生 18:04:27 cs 陈岳剑 18:05:00 void xunji() { if(R

文档评论(0)

ryaoo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档