找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1795|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机四驱寻迹小车,想问问大佬们为啥下载进去电机不会动?求帮助

[复制链接]
跳转到指定楼层
楼主
ID:922391 发表于 2021-5-20 21:17 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#include<reg52.h>                                                                                                                                                   

typedef unsigned int uint;   
typedef unsigned char uchar;

uchar Duty_2_left,Duty_2_right;
uchar i=0,j=0;
uchar flag;         //用于循迹方向的判断

sbit IN1 = P1^4;
sbit IN2 = P1^5;
sbit IN3 = P1^6;
sbit IN4 = P1^7;
sbit IN5 = P0^7;
sbit IN6 = P0^6;
sbit IN7 = P0^5;
sbit IN8 = P0^4;
sbit ENA = P3^3;
sbit ENB = P3^2;

sbit left=P2^0;        //左右两个传感器
sbit right=P2^1;


//小车直行速度赋值
void forward_move()
{
    Duty_2_left=20;
    Duty_2_right=20;
    IN1=1;           
    IN2=1;
    IN3=0;
    IN4=0;
        IN5=1;
        IN6=1;
        IN7=0;
        IN8=0;
        
}

//小车停止
void stop()
{   Duty_2_left=0;
        Duty_2_right=0;
    IN1=0;
    IN2=0;
    IN3=0;
    IN4=0;
        IN5=0;
        IN6=0;
        IN7=0;
        IN8=0;
}

//小车左转速度赋值(用于左边传感器检测到黑线)
void Left_turning()
{
    Duty_2_left=18;
    Duty_2_right=20;
    IN1=1;       //两个电机一个正转一个反转(或者一个正转一个不转)
    IN2=1;
    IN3=0;                  
    IN4=0;
        IN5=0;
        IN6=0;
        IN7=1;
        IN8=1;
}

//小车右转速度赋值(用于右边传感器检测到黑线)
void Right_turning()
{
    Duty_2_left=18;
    Duty_2_right=20;
    IN1=0;         
    IN2=0;
    IN3=1;         
    IN4=1;
        IN5=1;
        IN6=1;
        IN7=0;
        IN8=0;
}


//定时器0中断初始化
void timer0init()
{
    TMOD|=0x01;//定时器T0, 工作方式1, 16位
    TH0=0xff;//定时 ff9c  0.1ms
    TL0=0x9c;

    EA=1;  //开启总中断
    ET0=1;//开启中断允许
    TR0=1;//开启定时器中断  
}


//定时器中断服务函数
void timer0() interrupt 1
{
    TH0=0xff;
    TL0=0x9c;
    i++;
    j++;
    if(i<=Duty_2_left)//设置左轮占空比,即左轮速度
        ENA=1;
    else
        ENA=0;

    if(j<=Duty_2_right)
        ENB=1;
    else
        ENB=0;

    if(i==100)  //设置pwm周期=0.1ms*100=10ms,这样开头定义的变量正好表示占空比数值
    {
        i=0;//加到100后变为0,重新计数
    }
    if(j==100)
    {
        j=0;
    }  
}

//循迹模块
void xunji()
{   
    if((left==0)&&(right==1))
    {
            flag = 0;//左边检测到黑线
    }
    else if((left==1)&&(right==0))
    {
                  flag = 1;//右边检测到黑线
        }
    else if((left==1)&&(right==1))
        {
                        flag = 3; //两边都没检测到黑线
        }
                else
        {
                  flag = 4;
        }
                switch(flag)
        {
                case 0:  Right_turning();break;
                case 1:  Left_turning();break;
                case 3:  forward_move();break;
                case 4:  forward_move();break;
                default: forward_move();break;
        }
}
void main()
{
    timer0init();
        //forward_move();
    while(1)
    {
            xunji();
    }
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

板凳
ID:922391 发表于 2021-5-21 19:07 | 只看该作者
我检查了一遍,没有错,不知道是不是自己定义错了
回复

使用道具 举报

沙发
ID:328014 发表于 2021-5-20 23:17 | 只看该作者
由于没有仿真 无法调试 盲猜是不是电源有问题,或者是io口接错了?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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