Left_moto_back; //左电机往后走 Right_moto_back; //右电机往后走 }
//左转
void leftrun(void) {
push_val_left=5; push_val_right=5;
Right_moto_go ; //右电机往前走 Left_moto_back; //左电机往后走 }
//右转
void rightrun(void) {
push_val_left=5; push_val_right=5;
Left_moto_go ; //左电机往前走 Right_moto_back ; //右电机往后走 }
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */ void pwm_out_left_moto(void) {
if(Left_moto_stop) {
if(pwm_val_left<=push_val_left) { Left_moto_pwm=1; // Left_moto_pwm1=1; } else {
Left_moto_pwm=0;
// Left_moto_pwm1=0; }
if(pwm_val_left>=20) pwm_val_left=0; }
else {
Left_moto_pwm=0; // Left_moto_pwm1=0; } }
/******************************************************************/ /* 右电机调速 */ void pwm_out_right_moto(void) {
if(Right_moto_stop) {
if(pwm_val_right<=push_val_right) {
Right_moto_pwm=1; // Right_moto_pwm1=1; } else { Right_moto_pwm=0; // Right_moto_pwm1=0; }
if(pwm_val_right>=20) pwm_val_right=0; }
else {
Right_moto_pwm=0; // Right_moto_pwm1=0; } }
/***************************************************/ ///*TIMER0中断服务子函数产生PWM信号*/ void timer0()interrupt 1 using 2 {
TH0=0XFc; //1Ms定时 TL0=0X18; time++;
pwm_val_left++; pwm_val_right++; pwm_out_left_moto(); pwm_out_right_moto(); }
/*********************************************************************/
#endif
//主函数
void main(void) {
unsigned char i;
P1=0X00; //关电车电机
//本实验学习的按键启动知识 B: for(i=0;i<50;i++) //判断K4是否按下 { delay(1); //1ms内判断50次,如果其中有一次被判断到K4没按下,便重新检测 if(P3_7!=0)//当K4按下时,启动小车前进,如有不明,请看慧净51单片机视频教程 goto B; //跳转到标号B,重新检测 }
//本实验学习的知识蜂鸣器,注意要在HJ-4WD头文件里定义IO口
BUZZ=0; //50次检测K4确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。
delay(50);
BUZZ=1;//响50ms后关闭蜂鸣器 TMOD=0X01; TH0= 0XFc; //1ms定时 TL0= 0X18; TR0= 1; ET0= 1; EA = 1; //开总中断 while(1) //无限循环 { //有信号为0 没有信号为1
if(Left_1_led==0&&Right_1_led==0&&Left_2_led==1&&Right_2_led==1||Left_1_led==1&&Right_1_led==1&&Left_2_led==1&&Right_2_led==1) run(); //调用前进函数 else { if(Left_2_led==1&&Right_2_led==0) //右边检测到红外信号 { leftrun(); //调用小车左转函数 } if(Right_2_led==1&&Left_2_led==0) //左边检测到红外信号 { rightrun(); //调用小车右转函数 } if(Right_2_led==0&&Left_2_led==0) //两边传感器同时检测到红外 { backrun(); //调用电机后退函数 delay(50); //后退50毫秒 rightrun(); //调用电机右转函数 delay(30); }
if(Left_1_led==1&&Right_1_led==0&&Left_2_led==1&&Right_2_led==1) //左边检测到黑线 { leftrun(); //调用小车左转 函数 }
if(Right_1_led==1&&Left_1_led==0&&Left_2_led==1&&Right_2_led==1) //右边检测到黑线 {
rightrun(); //调用小车右转 函数 } } } }
3功能调试与总结 3.1 功能调试 3.1.1调试内容
在前进和后退实训中,调试的内容相对较少,主要的原因是不需要调试传感器了,也不用检测黑线运动需要调试的只有左右电机的转速,相对而言还是比较轻松的。
调试时应小心谨慎,电路安装完毕后,首先应检查电路各部分的接线是否正确,检查电源、地线、信号线、元器件的引脚之间有无短路,器件有无接错。
3.1.2 测试方法
关于循迹和避障实训,测试的方法主要是走路线,实验板上的线路,能够顺利正反走完,基本上就可以判定已经实现了功能。 3.2 主要工作与总结