/****************************************************************************
简单寻迹程序:接法
EN1 EN2 PWM输入端,本程序不输入PWM,直接使插上跳线帽,使能输出,这样就能全速运行
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_moto_pwm P3_6 //PWM输出本寻迹小车不用
#define Right_moto_pwm P3_7 //PWM输出本寻迹小车不用
#define Left_1_led P3_2 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
#define Left_2_led P3_3 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2
#define Right_1_led P3_4 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
#define Right_2_led P3_5 //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;} //右边两个电机停转
unsigned char pwm_val_left =0;
unsigned char push_val_left =1;// 左电机占空比10/40
unsigned char pwm_val_right =0;
unsigned char push_val_right=1;// 右电机占空比10/40
bit Right_moto_stop=1;
bit Left_moto_stop =1;
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x
for(y=0;y
}
/************************************************************************/
//前速前进
void run(void)
{
//push_val_left =4;
//push_val_right =4;
Left_moto_go ;
Right_moto_go ;
}
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left
Left_moto_pwm=1;
else
Left_moto_pwm=0;
if(pwm_val_left>=10)
pwm_val_left=0;
}
else Left_moto_pwm=0;
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right
Right_moto_pwm=1;
else
Right_moto_pwm=0;
if(pwm_val_right>=10)
pwm_val_right=0;
}
else Right_moto_pwm=0;
}
/***************************************************/
/*TIMER0中断服务子函数*/
void timer0()interrupt 1 using 2
{
TH0=0XF8; //1Ms定时
TL0=0X30;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*********************************************************************/
/*--主函数--*/
void main(void)
{
TMOD=0X01;
TH0= 0XF8; //1ms定时
TL0= 0X30;
TR0= 1;
ET0= 1;
EA = 1;
delay(100);
run();
while(1) /*无限循环*/
{
//有信号为0 没有信号为1
if(Left_2_led==0&&Right_1_led==0)
run();
else
{
if(Left_2_led==1&&Right_1_led==0) //右边检测到黑线
{
Left_moto_go; //左边两个电机正转
Right_moto_back; //右边两
个电机反转
}
if(Right_1_led==1&&Left_2_led==0) //左边检测到黑线
{
Right_moto_go; //右边两个电机正转
Left_moto_back; //左边两个电机反式开始转
}
}
}
}