智能小车速度控制程序.doc

上传人:b****3 文档编号:2597991 上传时间:2022-11-03 格式:DOC 页数:6 大小:41KB
下载 相关 举报
智能小车速度控制程序.doc_第1页
第1页 / 共6页
智能小车速度控制程序.doc_第2页
第2页 / 共6页
智能小车速度控制程序.doc_第3页
第3页 / 共6页
智能小车速度控制程序.doc_第4页
第4页 / 共6页
智能小车速度控制程序.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

智能小车速度控制程序.doc

《智能小车速度控制程序.doc》由会员分享,可在线阅读,更多相关《智能小车速度控制程序.doc(6页珍藏版)》请在冰豆网上搜索。

智能小车速度控制程序.doc

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

简单寻迹程序:

接法

EN1EN2PWM输入端,本程序不输入PWM,直接使插上跳线帽,使能输出,这样就能全速运行

接上测速模块

测速模块电源+5VGND取自于单片机板靠近液晶调节对比度的电源输出接口

把测速模块输出OUT1OUT2接入单片机P3。

2P3。

3

P1_0P1_1接IN1IN2当P1_0=1,P1_1=0;时左上电机正转 左上电机接驱动板子输出端(蓝色端子OUT1OUT2)

P1_0P1_1接IN1IN2当P1_0=0,P1_1=1;时左上电机反转

P1_0P1_1接IN1IN2当P1_0=0,P1_1=0;时左上电机停转

P1_2P1_3接IN3IN4当P1_2=1,P1_3=0;时左下电机正转 左下电机接驱动板子输出端(蓝色端子OUT3OUT4)

P1_2P1_3接IN3IN4当P1_2=0,P1_3=1;时左下电机反转

P1_2P1_3接IN3IN4当P1_2=0,P1_3=0;时左下电机停转

P1_4P1_5接IN5IN6当P1_4=1,P1_5=0;时右上电机正转 右上电机接驱动板子输出端(蓝色端子OUT5OUT6)

P1_4P1_5接IN5IN6当P1_4=0,P1_5=1;时右上电机反转

P1_4P1_5接IN5IN6当P1_4=0,P1_5=0;时右上电机停转

P1_6P1_7接IN7IN8当P1_6=1,P1_7=0;时右下电机正转 右下电机接驱动板子输出端(蓝色端子OUT7OUT8)

P1_6P1_7接IN7IN8当P1_6=0,P1_7=1;时右下电机反转

P1_6P1_7接IN7IN8当P1_6=0,P1_7=0;时右下电机停转

P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1

P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2

P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3

P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4

四路寻迹传感器有信号(白线)为0没有信号(黑线)为1

四路寻迹传感器电源+5VGND取自于单片机板靠近液晶调节对比度的电源输出接口

关于单片机电源:

本店驱动模块内带LDO稳压芯片,当电池输入6V时时候可以输出稳定的5V

分别在针脚标+5与GND。

这个输出电源可以作为单片机系统的供电电源。

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

#include

#defineLeft_1_ledP3_4 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1

#defineLeft_2_ledP3_5 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2

#defineRight_1_ledP3_6 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3

#defineRight_2_ledP3_7 //P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4

#defineLeft_moto_go{P1_0=1,P1_1=0,P1_2=1,P1_3=0;}//左边两个电机向前走

#defineLeft_moto_back{P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转

#defineLeft_moto_Stop{P1_0=0,P1_1=0,P1_2=0,P1_3=0;}//左边两个电机停转

#defineRight_moto_go{P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走

#defineRight_moto_back{P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走

#defineRight_moto_Stop{P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

sbitled1=P2^0;

sbitled2=P2^1;

sbitled3=P2^2;

sbitled4=P2^3;

unsignedcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管断码

unsignedcodedis[]={0xfe,0xfd,0xfb,0xf7}; //扫描数码管客值

unsignedchardisbuff[5]={0};

unsignedchartime=0; //显示缓存

unsignedchari=0; //定义扫描数码管字数

unsignedintcount1=0; //计左电机码盘脉冲值

unsignedintV=0; //定义其速度

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

//延时函数

voiddelay(unsignedintk)

{

unsignedintx,y;

for(x=0;x

for(y=0;y<2000;y++);

}

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

//显示数码管字程序

voidDisplay_SMG(void)

{

if(++i>=4)i=0;

P0=table[disbuff[i]];

P2=dis[i];

}

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

///*TIMER0中断服务子函数产生2MS定时扫描数码管与产生0。

5S*/

voidtimer0()interrupt1using2

{

TH0=(65536-2000)/256; //2MS定时

TL0=(65536-2000)%256;

time++;

Display_SMG();

if(time>=250) //250次即是,0。

5S

{

time=0;

V=count1*2; //计数公式:

轮子直径*3.14/20格码盘=6.5Cm*3.14/20约=1cm即一个脉冲走1CM距离 ((count1*1))/0.5S=(count1*2)CM/S

count1=0; //清计数

disbuff[0]=V/1000; //更新显示

disbuff[1]=V%1000/100;

disbuff[2]=V%1000%100/10;

disbuff[3]=V%1000%100%10;

}

}

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

//外部0中断用于计算左轮的脉冲

voidintersvr1(void)interrupt0using1

{

count1++;

}

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

//前速前进

voidrun(void)

{

Left_moto_go;//左电机往前走

Right_moto_go;//右电机往前走

}

//前速后退

voidbackrun(void)

{

Left_moto_back;//左电机往前走

Right_moto_back;//右电机往前走

}

//左转

voidleftrun(void)

{

Left_moto_back;//左电机往前走

Right_moto_go;//右电机往前走

}

//右转

voidrightrun(void)

{

Left_moto_go;//左电机往前走

Right_moto_back;//右电机往前走

}

//停转

voidstoprun(void)

{

Left_moto_Stop;//左电机往前走

Right_moto_Stop;//右电机往前走

}

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

/*--主函数--*/

voidmain(void)

{

TMOD=0X01;

TH0=(65536-2000)/256; //2MS定时

TL0=(65536-2000)%256;

TR0=1;

ET0=1;

EX0=1; //开启外部中断0

IT0=1; //下降沿有效

IE0=0;

EA=1;

run();

while

(1)

{

//有信号为0没有信号为1

if(Left_2_led==0&&Right_1_led==0)

run();

else

{

if(Right_1_led==1&&Left_2_led==0) //右边检测到黑线

{

Left_moto_go; //左边

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

当前位置:首页 > 经管营销 > 财务管理

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

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