/****************************************************************************硬件连接P1_4接驱动模块ENAPWM信号调节速度P1_5接驱动模块ENBPWM信号调节速度P1_0P1_1接IN1IN2当P1_0=1,P1_1=0;时左电机正转驱动蓝色输出端OUT1OUT2接左电机P1_0P1_1接IN1IN2当P1_0=0,P1_1=1;时左电机反转P1_2P1_3接IN3IN4当P1_2=1,P1_3=0;时右电机正转驱动蓝色输出端OUT3OUT4接右电机P1_2P1_3接IN3IN4当P1_2=0,P1_3=1;时右电机反转P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4八路寻迹传感器有信号(01****************************************************************************/#includeAT89x51.H#defineRight_moto_pwmP1_4//接驱动模块ENA使能PWM信号调节速度#defineLeft_moto_pwmP1_5//接驱动模块ENBPWM信号调节速度#defineLeft_1_ledP2_0//四路寻迹模块接口第一路#defineLeft_2_ledP2_1//四路寻迹模块接口第二路#defineRight_1_ledP2_2//四路寻迹模块接口第三路#defineRight_2_ledP2_3//四路寻迹模块接口第四路#defineLeft_moto_go{P1_0=0,P1_1=1;}//左电机前进#defineLeft_moto_back{P1_0=1,P1_1=0;}//左电机后退#defineLeft_moto_stop{P1_0=1,P1_1=1;}//左电机停转#defineRight_moto_go{P1_2=0,P1_3=1;}//右电机前转#defineRight_moto_back{P1_2=1,P1_3=0;}//右电机后退#defineRight_moto_stop{P1_2=1,P1_3=1;}//右电机停转#defineucharunsignedchar#defineuintunsignedintucharpwm_val_left=0;ucharpush_val_left=0;//左电机占空比N/10ucharpwm_val_right=0;ucharpush_val_right=0;//右电机占空比N/10bitRight_moto_stp=1;bitLeft_moto_stp=1;/************************************************************************/voidrun(void)//前进函数{push_val_left=13;//PWM调节参数1-20120是最快改这个值可以改变其速度push_val_right=15;//PWM调节参数1-20120是最快改这个值可以改变其速度Left_moto_go;//左电机前进Right_moto_go;//右电机前进}/************************************************************************/voidleft(void)//左转函数{push_val_left=8;push_val_right=9;Right_moto_go;//右电机继续Left_moto_stop;//左电机停走}/************************************************************************/voidright(void)//右转函数{push_val_left=8;push_val_right=9;Right_moto_stop;//右电机停走Left_moto_go;//左电机继续}voidDelayms(uintx){uchari;while(x--)for(i=0;i120;i++);}voidstop(void){Right_moto_stop;//右电机停走Left_moto_stop;//左电机停走Delayms(3000);run();Delayms(100);}/*************************PWM调制电机转速********************************/voidpwm_out_left_moto(void)//左电机调速,调节push_val_left的值改变电机转速,占空比{if(Left_moto_stp){if(pwm_val_left=push_val_left)Left_moto_pwm=1;elseLeft_moto_pwm=0;if(pwm_val_left=20)pwm_val_left=0;}elseLeft_moto_pwm=0;}voidpwm_out_right_moto(void)//右电机调速,调节push_val_left的值改变电机转速,占空比{if(Right_moto_stp){if(pwm_val_right=push_val_right)Right_moto_pwm=1;elseRight_moto_pwm=0;if(pwm_val_right=20)pwm_val_right=0;}elseRight_moto_pwm=0;}/***************************************************/voidxunji(){switch(P2&0x0f){case0x00://run();break;case0x01://left();break;case0x02://left();break;case0x04://right();break;case0x08://right();break;case0x0f:stop();break;default:run();break;}}/***********TIMER0中断服务子函数产生PWM信号**********/voidtimer0()interrupt1using2{TH0=0XF8;//2Ms定时TL0=0X30;pwm_val_left++;pwm_val_right++;pwm_out_left_moto();pwm_out_right_moto();}/***************************************************/voidmain(void){TMOD=0X01;TH0=0XF8;//2ms定时TL0=0X30;TR0=1;ET0=1;EA=1;while(1)/*无限循环*/{xunji();}}