找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机三路超声波避障,麦克纳姆轮 程序有什么问题 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:776497 发表于 2020-6-11 18:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REGX51.H>

#define uint unsigned int
#define uchar unsigned char

uint PWM = 5;          //最大20,pwm调速
uchar time = 0;
uint Shi_Jian;
uint a,b,c,FJL,LJL,RJL;



void Delay (uint t)                //@11.0592MHz    100us
{
        unsigned char i;
        while (t)
        {
               
                i = 43;
                while (--i);
                t--;
        }
}


void Timer_Init()   //定时器    @11.0592MHZ   0.1ms
{
        TMOD = 0x11;
        TH0 = 0xFB;
        TL0 = 0xAF;
        TF0        = 0;         
        ET0 = 1;          //允许中断
        EA = 1;           //开启总中断
        TR0 = 1;          /开启定时器
        
        TF1        = 0;
        TH1 = 0;
        TL1 = 0;
}



void Timer0_Rountine() interrupt 1   //T0  中断
{
        time++;
        TH0 = 0xFB;
        TL0 = 0xAF;
        if(time >= 20)
                time = 0;
}
int Front_Ju_Li ()               //测前方距离
{
        P2_0 = 1;                      //发送超声波
        Delay(1);                      //延时100us
        P2_0 = 0;                      //关闭超声波
        while (!P2_1);                 //未接收到超声波并等待
        TR1 = 1;                       //开启定时器
        while (P2_1);                  //接收到超声波并等待
        TR1 = 0;                       //关闭定时器1
        Shi_Jian = TH1*256 + TL1;
        TH1 = 0;
        TL1 = 0;
        FJL = (Shi_Jian*1.7)/100;      //单位  cm
        return FJL;
        
}
int Zuo_Ju_Li ()               //测左边距离
{
        P2_2 = 1;                      //发送超声波
        Delay(1);                      //延时100us
        P2_2 = 0;                      //关闭超声波
        while (!P2_3);                 //未接收到超声波并等待
        TR1 = 1;                       //开启定时器
        while (P2_3);                  //接收到超声波并等待
        TR1 = 0;                       //关闭定时器1
        Shi_Jian = TH1*256 + TL1;
        TH1 = 0;
        TL1 = 0;
        LJL = (Shi_Jian*1.7)/100;      /单位  cm
        return LJL;
        
}
int You_Ju_Li ()               //测右边距离
{
        P2_4 = 1;                      //发送超声波
        Delay(1);                      //延时100us
        P2_4 = 0;                      //关闭超声波
        while (!P2_5);                 //未接收到超声波并等待
        TR1 = 1;                       //开启定时器
        while (P2_5);                  //接收到超声波并等待
        TR1 = 0;                       //关闭定时器1
        Shi_Jian = TH1*256 + TL1;
        TH1 = 0;
        TL1 = 0;
        RJL = (Shi_Jian*1.7)/100;      //单位  cm
        
}

void Car_Stop ()   //停止
{
                P1_0=0,P1_1=0,P1_2=0,P1_3=0,P1_4=0,P1_5=0,P1_6=0,P1_7=0;
}
void Car_Run ()   //前进
{
        if (time <= PWM)
                P1_0=1,P1_1=0,P1_2=0,P1_3=1,P1_4=0,P1_5=1,P1_6=0,P1_7=1;
        else
                Car_Stop ();
}
void Car_Zuozhuan ()   //左转
{
        if (time <= PWM)
                P1_0=0,P1_1=1,P1_2=0,P1_3=1,P1_4=1,P1_5=0,P1_6=0,P1_7=1;
        else
                Car_Stop ();
}
void Car_Youzhuan ()   //右转
{
        if (time <= PWM)
                P1_0=1,P1_1=0,P1_2=1,P1_3=0,P1_4=0,P1_5=1,P1_6=1,P1_7=0;
        else
                Car_Stop ();
}

void Car_Houtui ()   /后退
{
        if (time <= PWM)
                P1_0=0,P1_1=1,P1_2=1,P1_3=0,P1_4=1,P1_5=0,P1_6=1,P1_7=0;
        else
                Car_Stop ();
}





void main()
{
        Timer_Init();
        while (1)
        {
                do
                {
                        Car_Run ();
                        a = Front_Ju_Li ();
                }while(a >= 20);
                Car_Stop ();
                b = Zuo_Ju_Li ();
                Delay(100);
                c = You_Ju_Li ();
                Delay(100);
               
               
                        if (b <= 15 && c <= 15)      //进入狭小空间,后退
                                Car_Houtui ();
                        if (b <= c)             //左边距离小于右边距离,右转
                                Car_Youzhuan ();
                        if (c <= b)             /右边距离小于左边距离,左转
                                Car_Zuozhuan ();
                        else
                                Car_Stop ();
        
        }
}
帮忙看一下程序有什么问题

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

使用道具 举报

沙发
ID:328014 发表于 2020-6-11 18:53 | 只看该作者
这个程序没有问题
回复

使用道具 举报

板凳
ID:774446 发表于 2020-6-12 08:09 | 只看该作者
我觉得这程序写的很好思路也没有问题,棒棒的
回复

使用道具 举报

地板
ID:776497 发表于 2020-6-12 11:40 | 只看该作者
51hei团团 发表于 2020-6-11 18:53
这个程序没有问题

但是执行不了
小车不动
回复

使用道具 举报

5#
ID:573789 发表于 2020-6-17 14:55 | 只看该作者
很好 的教程
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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