循迹小车代码.docx
- 文档编号:26321982
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:6
- 大小:13.84KB
循迹小车代码.docx
《循迹小车代码.docx》由会员分享,可在线阅读,更多相关《循迹小车代码.docx(6页珍藏版)》请在冰豆网上搜索。
#include
#defineucharunsignedchar
#defineuintunsignedint
uinta,d,y,z,h,q;
sbitout1=P0^0;//电机驱动输出控制管脚配置
sbitout2=P0^1;
sbitout3=P0^2;
sbitout4=P0^3;
sbitin1=P2^0;//循迹模块的信号输入管脚配置
sbitin2=P2^1;
sbitin3=P2^2;
sbitin4=P2^3;
sbitin5=P2^4;
delay(uinta);
intzuozhuan(uintz)//控制小车做左转动作(参数z和a可以用来调节左转时间,本
程序设定
//为不同参数表示每次调用程序左转时间相同不可变,没有调节转弯时间的功能)
{
out1=1;
out2=0;
out3=0;
out4=1;
delay(a);
}
intyouzhuan(uinty)//控制小车做右转动作(参数y和a可以用来调节右转时间,本
程序设定
//为不同参数表示每次调用程序右转时间相同不可变,没有调节转弯时间的功能)
{
out1=0;
out2=1;
out3=1;
out4=0;
}
inthoutui(uinth)//控制小车可以使小车倒退行驶(参数功能与转弯类似)
{
out1=0;
out2=1;
out3=0;
out4=1;
delay(a);
out1=0;
out2=0;
out3=0;
out4=0;
delay(20);
}
intdengdai(uintd)//使小车停止当前所有动作,停止时间可调。
{
out1=0;
out2=0;
out3=0;
out4=0;
delay(d);
}
voidqianjin(q)//使小车向前行驶,行驶时间可调
{
out1=1;
out2=0;
out3=1;
out4=0;
delay(q);
}
voidxunji()
{
P1=P1|0XF0;delay(5);
if(in1==0){dengdai();youzhuan(100);while(in3==1);}
elseif(in5==0){dengdai();zuozhuan(100);while(in3==1);}
elseif(in2==0){dengdai();youzhuan(30);}
elseif(in4==0){dengdai();zuozhuan(30);}
elseif(in3==0){qianjin(20);}
else{qianjin(20);}
}
intdelay(uinta)//延时子函数
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
delay(2000);
while
(1)
xunji();
}
#include
#defineucharunsignedchar
#defineuintunsignedint
//D0-D7:
f,b,a,e,d,h,c,g共阴依次编码//
74LS04反相器驱动数码管
ucharcodetable[10]={0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7};
uchari=0;//用于0-3数码管轮流显示
uintj=0;//计时的次数
uinttime=0;//计时
uintpwm=16;//占空比
uintspeed;//调制PWM波的当前的值
sbitR=P3^2;//右边传感器
P3^2sbitL=P3^3;//左边传感器
P3^3//电机驱动口定义
sbitENB=P1^0;//前轮电机停止控制使能
sbitENA=P1^1;//后轮控制调速控制端口
sbitIN1=P1^2;//前轮
sbitIN2=P1^3;//前轮
sbitIN3=P1^4;//后轮
sbitIN4=P1^5;//后轮
voidInit(){
TMOD=0x12;//定时器0用方式2,定时器1用方式1
TH0=(256-200)/256;//pwm
TL0=(256-200)/256;
TH1=0x0F8;//定时2ms
TL1=0x30;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
voidtim0(void)interrupt1//产生
PWM
{
speed++;
if(speed<=pwm)//pwm就相当于占100的比例
{
ENA=1;
}
elseif(speed<100)
{
ENA=0;
}
else
speed=0;
}
voidtime1()interrupt3//定时2ms
{
TH1=0x0F8;
TL1=0x30;
i=(i+1)%4;//0-3循环
j++;
if(i==0)//显示最低位数码管
{
P0=0x00;//段选清零防止乱码
P0=table[time%10];//送段码信号
}
if(i==1)
{
P0=0x00;
P0=table[time/10%10];
}
if(i==2)
{
P0=0x00;
P0=table[time/100%10];
}
if(i==3)
{
P0=0x00;
P0=table[time/1000%10];
}
P2=(0x10<
if(j==500)
{
time++;
//500次为1秒
j=0;
}
}
voidforward()//前进
{
IN2=1;
IN1=0;
}
voidback()//后退
{
IN2=0;
IN1=1;
}
voidleft()//左转
{
ENB=1;//打开使能
IN3=1;
IN4=0;
}
voidright()//右转
{
ENB=1;//打开使能
IN3=0;
IN4=1;
}
voidstop()//停止
{
IN2=0;
IN1=0;
IN3=0;
IN4=0;
}
voidmain()
{
Init();//定时器初始化
while
(1)
{
if(R==0&&L==1)//右传感器检测到黑线
{
right();//右转
forward();
while(R==0&&L==1);
}
if(R==1&&L==0)//左传感器检测到黑线
{
left();
forward();
while(R==1&&L==0);
}
if(R==0&&L==0)//都检测到黑线则停止
{
stop();
j=0;//定时器仍在工作,计数时间清空
}
else//都没有检测到黑线
{
ENB=0;//关闭转向控制
forward();
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小车 代码