欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3292|回復: 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 單片機教程網

快速回復 返回頂部 返回列表