找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2857|回復(fù): 4
收起左側(cè)

51單片機三路超聲波避障,麥克納姆輪 程序有什么問題 求幫助

[復(fù)制鏈接]
ID:776497 發(fā)表于 2020-6-11 18:20 | 顯示全部樓層 |閱讀模式
#include <REGX51.H>

#define uint unsigned int
#define uchar unsigned char

uint PWM = 5;          //最大20,pwm調(diào)速
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;                      //發(fā)送超聲波
        Delay(1);                      //延時100us
        P2_0 = 0;                      //關(guān)閉超聲波
        while (!P2_1);                 //未接收到超聲波并等待
        TR1 = 1;                       //開啟定時器
        while (P2_1);                  //接收到超聲波并等待
        TR1 = 0;                       //關(guān)閉定時器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;                      //發(fā)送超聲波
        Delay(1);                      //延時100us
        P2_2 = 0;                      //關(guān)閉超聲波
        while (!P2_3);                 //未接收到超聲波并等待
        TR1 = 1;                       //開啟定時器
        while (P2_3);                  //接收到超聲波并等待
        TR1 = 0;                       //關(guān)閉定時器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;                      //發(fā)送超聲波
        Delay(1);                      //延時100us
        P2_4 = 0;                      //關(guān)閉超聲波
        while (!P2_5);                 //未接收到超聲波并等待
        TR1 = 1;                       //開啟定時器
        while (P2_5);                  //接收到超聲波并等待
        TR1 = 0;                       //關(guān)閉定時器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 ()   //左轉(zhuǎn)
{
        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 ()   //右轉(zhuǎn)
{
        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)             //左邊距離小于右邊距離,右轉(zhuǎn)
                                Car_Youzhuan ();
                        if (c <= b)             /右邊距離小于左邊距離,左轉(zhuǎn)
                                Car_Zuozhuan ();
                        else
                                Car_Stop ();
        
        }
}
幫忙看一下程序有什么問題

回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2020-6-11 18:53 | 顯示全部樓層
這個程序沒有問題
回復(fù)

使用道具 舉報

ID:774446 發(fā)表于 2020-6-12 08:09 | 顯示全部樓層
我覺得這程序?qū)懙暮芎盟悸芬矝]有問題,棒棒的
回復(fù)

使用道具 舉報

ID:776497 發(fā)表于 2020-6-12 11:40 | 顯示全部樓層

但是執(zhí)行不了
小車不動
回復(fù)

使用道具 舉報

ID:573789 發(fā)表于 2020-6-17 14:55 | 顯示全部樓層
很好 的教程
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表