智能小车速度控制程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; //更新显示