智能小车速度控制程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

简单寻迹程序:接法

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

接上测速模块

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

把测速模块输出OUT1 OUT2 接入单片机P3。2 P3。3

P1_0 P1_1 接IN1 IN2 当P1_0=1,P1_1=0; 时左上电机正转左上电机接驱动板子输出端(蓝色端子OUT1 OUT2)

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

P1_0 P1_1 接IN1 IN2 当P1_0=0,P1_1=0; 时左上电机停转

P1_2 P1_3 接IN3 IN4 当P1_2=1,P1_3=0; 时左下电机正转左下电机接驱动板子输出端(蓝色端子OUT3 OUT4)

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

P1_2 P1_3 接IN3 IN4 当P1_2=0,P1_3=0; 时左下电机停转

P1_4 P1_5 接IN5 IN6 当P1_4=1,P1_5=0; 时右上电机正转右上电机接驱动板子输出端(蓝色端子OUT5 OUT6)

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

P1_4 P1_5 接IN5 IN6 当P1_4=0,P1_5=0; 时右上电机停转

P1_6 P1_7 接IN7 IN8 当P1_6=1,P1_7=0; 时右下电机正转右下电机接驱动板子输出端(蓝色端子OUT7 OUT8)

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

P1_6 P1_7 接IN7 IN8 当P1_6=0,P1_7=0; 时右下电机停转

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

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

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

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

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

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

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

分别在针脚标+5 与GND 。这个输出电源可以作为单片机系统的供电电源。

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

#include

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

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

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

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

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

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

#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转#define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走#define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走#define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

sbit led1 =P2^0;

sbit led2 =P2^1;

sbit led3 =P2^2;

sbit led4 =P2^3;

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

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

unsigned char disbuff[5]={0};

unsigned char time=0; //显示缓存unsigned char i =0; //定义扫描数码管字数

unsigned int count1=0; //计左电机码盘脉冲值

unsigned int V=0; //定义其速度

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

//延时函数

void delay(unsigned int k)

{

unsigned int x,y;

for(x=0;x

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

}

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

//显示数码管字程序

void Display_SMG(void)

{

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

P0=table[disbuff[i]];

P2=dis[i];

}

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

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

void timer0()interrupt 1 using 2

{

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; //更新显示

相关文档
最新文档