写了一半的程序
#include<AT89X52.H> //包含51单片机头文件,内部有各种寄存器定义
#include<QH_PWM.H> //包含HL-1蓝牙智能小车驱动IO口定义等函数
//主函数
unsigned char pwm_val_left =0;//变量定义
unsigned char pwm_val_right =0;
unsigned char push_val_left =5;// 左电机占空比 N/20
unsigned char push_val_right=5;// 右电机占空比 N/20
bit Right_PWM_ON=1; //右电机 PWM 开关
bit Left_PWM_ON =1; //左电机 PWM 开关
void main(void)
{
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^4;
sbit IN4=P1^5;
sbit Left_1_led=P3^5; //定义前方左侧红外探头端口
sbit Right_1_led=P3^6; //定义前方右侧红外探头端口
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(); //调用小车停止
}
}
}
}
void run() //电机前进
{
push_val_left=5; //速度调节变量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void leftrvn() //电机左转弯
{
push_val_left=5; //速度调节变量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void righturn() //电机右转弯
{
push_val_left=5; //速度调节变量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void stop() //电机停止
{
push_val_left=5; //速度调节变量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
// 左电机调速
/*调节 push_val_left 的值改变电机转速,占空比*/
void pwm_out_left_moto(void)
{
if(Left_PWM_ON)
{
if(pwm_val_left<=push_val_left)
{
EN1=1;
}
else
{
EN1=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
EN1=0; //若未开启 PWM 则 EN1=0 左电机 停止
}
}
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_PWM_ON)
{
if(pwm_val_right<=push_val_right) //20ms 内 电 平 信 号 111 111
0000 0000 0000 00
{
EN2=1; //占空比 6:20
}
else
{
EN2=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
EN2=0; //若未开启 PWM 则 EN2=0 右电机 停止
}
}
//TIMER0 中断服务子函数产生 PWM 信号
void timer0()interrupt 1 using 2
{
TH0=0XFC; //1Ms 定时
TL0=0X66;
pwm_val_left++; //pwm jishi suanzi jia 1
pwm_val_right++; //you pwm jishi suanzi jia 1
pwm_out_left_moto(); //chansheng zuodianji EN pwm xinhao
pwm_out_right_moto(); //chansheng youdianji EN pwm xinhao
}
|