标题:
智能小车只有调用函数名为 xunji 才能电机倒转,其他任何名称都不能使电机倒转
[打印本页]
作者:
涅槃子
时间:
2017-11-18 19:01
标题:
智能小车只有调用函数名为 xunji 才能电机倒转,其他任何名称都不能使电机倒转
智能小车只有调用函数名为 xunji 才能电机倒转,其他任何名称都不能使电机倒转
作者:
zqy181818
时间:
2017-11-18 20:32
可以改的
作者:
999333
时间:
2017-11-18 20:35
不一定啊,
作者:
999333
时间:
2017-11-18 20:36
这是在问什么
作者:
liut_text
时间:
2017-11-18 21:10
这个只有把你程序和驱动芯片贴上来才能看出问题来
作者:
zlc990405
时间:
2017-11-18 21:38
这是什么问题?
作者:
涅槃子
时间:
2017-11-18 23:34
zqy181818 发表于 2017-11-18 20:32
可以改的
这是他当初给的主函数
//注意程序只做参考之用,要达到最理想的寻迹效果,还需要同学们细心调试。
#include<AT89X52.H> //包含51单片机头文件,内部有各种寄存器定义
#include<ZY-4WD_PWM.H> //包含HL-1蓝牙智能小车驱动IO口定义等函数
//主函数
void main(void)
{
unsigned char i;
P1=0X00; //关电机
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)
run(); //调用前进函数
else
{
if(Left_1_led==1&&Right_1_led==0) //左边检测到黑线
{
leftrun(); //调用小车左转 函数
}
if(Right_1_led==1&&Left_1_led==0) //右边检测到黑线
{
rightrun(); //调用小车右转 函数
}
if(Right_1_led==1&&Left_1_led==1) //悬空状态 避悬崖
{
stop(); //调用小车停止
}
}
}
}
作者:
涅槃子
时间:
2017-11-18 23:45
zqy181818 发表于 2017-11-18 20:32
可以改的
这是他定义的模块。然后我将主程序定义为一个名为xunji的模块放在这里面。将主程序改写成可以完成要求赛道的程序,后来发现可以调用xunji但当再定义一个和循迹相似的倒车模块时程序就乱掉了,注:我将传感器加到了五个,中间一个计数,前后各两个以分别用来完成前进和倒车循迹。
#ifndef _LED_H_
#define _LED_H_
//定义小车驱动模块输入IO口
sbit L293D_IN1=P1^2;
sbit L293D_IN2=P1^3;
sbit L293D_IN3=P1^4;
sbit L293D_IN4=P1^5;
sbit L293D_EN1=P1^6;
sbit L293D_EN2=P1^7;
/***蜂鸣器接线定义*****/
sbit BUZZ=P2^3;
#define Left_1_led P3_7 //左传感器
#define Right_1_led P3_6 //右传感器
#define Left_moto_pwm P1_6 //PWM信号端
#define Right_moto_pwm P1_7 //PWM信号端
#define Left_moto_go {P1_2=1,P1_3=0;} //左电机向前走
#define Left_moto_back {P1_2=0,P1_3=1;} //左边电机向后转
#define Left_moto_Stop {P1_2=0,P1_3=0;} //左边电机停转
#define Right_moto_go {P1_4=1,P1_5=0;} //右边电机向前走
#define Right_moto_back {P1_4=0,P1_5=1;} //右边电机向后走
#define Right_moto_Stop {P1_4=0,P1_5=0;} //右边电机停转
unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
void run(void)
{
push_val_left=12; //速度调节变量 0-20。。。0最小,20最大
push_val_right=12;
Left_moto_go ; //左电机往前走
Right_moto_go ; //右电机往前走
}
//后退函数
void backrun(void)
{
push_val_left=12; //速度调节变量 0-20。。。0最小,20最大
push_val_right=12;
Left_moto_back; //左电机往后走
Right_moto_back; //右电机往后走
}
//左转
void leftrun(void)
{
push_val_left=5;
push_val_right=15;
Right_moto_go ; //右电机往前走
Left_moto_back ; //左电机后走
}
//右转
void rightrun(void)
{
push_val_left=16;
push_val_right=8;
Left_moto_go ; //左电机往前走
Right_moto_back ; //右电机往后走
}
//停止
void stop(void)
{
Right_moto_Stop ; //右电机停止
Left_moto_Stop ; //左电机停止
}
/************************************************************************/
/* 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
作者:
涅槃子
时间:
2017-11-18 23:50
zqy181818 发表于 2017-11-18 20:32
可以改的
程序混乱表现为只要不是xunji作为函数名的都不能触发电机倒转
作者:
zqy181818
时间:
2017-11-19 23:47
涅槃子 发表于 2017-11-18 23:50
程序混乱表现为只要不是xunji作为函数名的都不能触发电机倒转
你在头文件下来的语句,先声明倒车试下 void astern(倒车);
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1