************************************************************************简单寻迹程序:接法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=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 接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1P3_3 接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2P3_4 接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3P3_5 接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4四路寻迹传感器有信号(白线)为0 没有信号(黑线)为 1 四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口关于单片机电源:本店驱动模块内带LDO 稳压芯片,当电池输入6V 时时候可以输出稳定的5V分别在针脚标+5 与GND 。
这个输出电源可以作为单片机系统的供电电源。
****************************************************************************/#include<AT89x51.H>#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 ledl =P2A0;sbit Ied2=卩2人1;sbit led3 =P2A2;sbit led4 =P2A3;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;// 定义其速度***************************************************** ***************unsigned int x,y; for(x=0;x<k;x++) for(y=0;y<2000;y++);}/********************************************************************** // 显示数码管字程序void Display_SMG(void){if(++i>=4)i=0; P0=table[disbuff[i]]; P2=dis[i];}void timer0()interrupt 1 using 2 {TH0=(65536-2000)/256; //2MS 定时TL0=(65536-2000)%256;time++; Display_SMG();********************************************************************///*TIMER0 中断服务子函数产生2MS 定时扫描数码管与产生0。
5S*/约 =1cm// 更新显示***********************************************time=0; V=count1*2;// 计数公式:轮子直径 *3.14/20 格码盘 =6.5Cm*3.14/20即一个脉冲走 1CM 距离 ((count1*1))/0.5S=(count1*2)CM/Scount1=0;// 清计数disbuff[0]=V/1000;disbuff[1]=V%1000/100; disbuff[2]=V%1000%100/10; disbuff[3]=V %1000%100%10;}}// 外部 0 中断用于计算左轮的脉冲 void intersvr1(void) interrupt 0 using 1{count1++;}/**********************************************************************Left_moto_go ; // 左电机往前走 Right_moto_go ;// 右电机往前走// 前速后退void backrun(void){Left_moto_back ; // 左电机往前走Right_moto_back ; // 右电机往前走}// 左转void leftrun(void){Left_moto_back ; // 左电机往前走Right_moto_go ; // 右电机往前走}Left_moto_go ; // 左电机往前走Right_moto_back ; // 右电机往前走}// 停转void stoprun(void){Left_moto_Stop ; // 左电机往前走Right_moto_Stop ; // 右电机往前走}/******************************************************************* /*-- 主函数--*/void main(void){TMOD=0X01;TH0=(65536-2000)/256; //2MS 定时TL0=(65536-2000)%256;TR0= 1;ET0= 1;IT0=1;// 下降沿有效// 右边检测到黑线// 左边两个电机正转 // 右边两个电机反转// 左边检测到黑线Right_moto_go;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; Right_moto_back;}if(Left_2_led==1&&Right_1_led==0)// 右边两个电机正转Left_moto_back; // 左边两个电机反式开始转}}}。