找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1574|回复: 0
收起左侧

单片机初学者刚刚开始做寻迹小车

[复制链接]
ID:519113 发表于 2019-4-22 22:57 | 显示全部楼层 |阅读模式
写了一半的程序


        #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
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表