找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 14238|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

超聲波避障源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:317966 發(fā)表于 2018-4-27 18:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


#include <reg52.h>//51頭文件
#include <intrins.h>   //包含nop等系統(tǒng)函數(shù)

sbit RX = P2^0;//ECHO超聲波模塊回響端
sbit TX = P2^1;//TRIG超聲波模塊觸發(fā)端

unsigned char pwm_left_val = 150;//左電機(jī)占空比值 取值范圍0-170,0最快
unsigned char pwm_right_val = 150;//右電機(jī)占空比值取值范圍0-170 ,0最快
unsigned char pwm_t;//周期
unsigned int  time = 0;//傳輸時(shí)間
unsigned long S = 0;//距離
bit      flag = 0;//超出測(cè)量范圍標(biāo)志位


void delay(unsigned int z)//毫秒級(jí)延時(shí)
{
        unsigned int x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}
void Delay10us(unsigned char i)            //10us延時(shí)函數(shù) 啟動(dòng)超聲波模塊時(shí)使用
{
   unsigned char j;
        do{
                j = 10;
                do{
                        _nop_();
                }while(--j);
        }while(--i);
}
/*小車(chē)前進(jìn)*/
void forward()
{
        left_motor_go; //左電機(jī)前進(jìn)
        right_motor_go; //右電機(jī)前進(jìn)
}

/*小車(chē)后退*/
void backward()
{
        left_motor_back; //左電機(jī)后退
        right_motor_back; //右電機(jī)后退       
}

/*定時(shí)器1中斷輸出PWM信號(hào)*/
void timer1() interrupt 3
{
        pwm_t++;//周期計(jì)時(shí)加
        if(pwm_t == 255)
                pwm_t = EN1 = EN2 = 0;
        if(pwm_left_val == pwm_t)//左電機(jī)占空比       
                EN1 = 1;               
        if(pwm_right_val == pwm_t)//右電機(jī)占空比
                EN2 = 1;                         
}

/*判斷S2是否被按下*/
void keyscan()
{
        for(;;)        //死循環(huán)
        {
                if(key_s2 == 0)// 實(shí)時(shí)檢測(cè)S2按鍵是否被按下
                {
                        delay(5); //軟件消抖
                        if(key_s2 == 0)//再檢測(cè)S2是否被按下
                        {
                                while(!key_s2);//松手檢測(cè)
                                beep = 0;        //使能有源蜂鳴器
                                delay(200);//200毫秒延時(shí)
                                beep = 1;        //關(guān)閉有源蜂鳴器
                                break;                //退出FOR死循環(huán)
                        }
                }
        }       
}

/*定時(shí)器0中斷*/
void timer0() interrupt 1        //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
{
        flag=1;                                                         //中斷溢出標(biāo)志                         
}
void  StartModule()                          //啟動(dòng)超聲波模塊
{
          TX=1;                                             //啟動(dòng)一次模塊
      Delay10us(2);
          TX=0;
}

/*計(jì)算超聲波所測(cè)距離并顯示*/
void Conut()
{
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
       
        S=(float)(time*1.085)*0.17;     //算出來(lái)是MM
        if((S>=7000)||flag==1) //超出測(cè)量范圍
        {         
                flag=0;

        }
}



/*超聲波避障*/
void        Avoid()
{
        if(S > 150)//設(shè)置避障距離(單位毫米)
        {
                forward();
        }
        else
        {
                backward();       
        }
}
       
void main()
{
        keyscan();//等待按鍵按下啟動(dòng)
        delay(1000);//延時(shí)1秒
        TMOD |= 0x20;//定時(shí)器1工作模式2,8位自動(dòng)重裝。用于產(chǎn)生PWM
        TMOD |= 0x01;//定時(shí)器0工作模塊1,16位定時(shí)模式。T0用測(cè)ECH0脈沖長(zhǎng)度
        TH1 = 220; //
        TL1 = 220; //100HZ T1
        TH0        = 0;
    TL0        = 0;//T0,16位定時(shí)計(jì)數(shù)用于記錄ECHO高電平時(shí)間         
    ET1        = 1;//允許T1中斷
        ET0 = 1;//允許T0中斷
        TR1 = 1;//啟動(dòng)定時(shí)器1
        EA  = 1;//啟動(dòng)總中斷
        while(1)
        {               
                 StartModule();        //啟動(dòng)模塊測(cè)距
                 while(!RX);                //當(dāng)RX(ECHO信號(hào)回響)為零時(shí)等待
                 TR0=1;                            //開(kāi)啟計(jì)數(shù)
                 while(RX);                        //當(dāng)RX為1計(jì)數(shù)并等待
                 TR0=0;                                //關(guān)閉計(jì)數(shù)
             Conut();                        //計(jì)算距離
                 Avoid();                        //避障
                 delay(65);       
        }
}

16、超聲波實(shí)現(xiàn)魔術(shù)手實(shí)驗(yàn).zip

46.42 KB, 下載次數(shù): 91, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:321034 發(fā)表于 2018-5-21 16:50 | 只看該作者
LZ, 我借用你的占空比程序 用在我編寫(xiě)的程序上面,沒(méi)有效果啊,速度還是那么快~  是那個(gè)地方的問(wèn)題呢
回復(fù)

使用道具 舉報(bào)

板凳
ID:595011 發(fā)表于 2019-8-5 21:47 | 只看該作者
按鍵是定義的嗎 想問(wèn)一下這個(gè)按鍵是哪個(gè)呀
回復(fù)

使用道具 舉報(bào)

地板
ID:324611 發(fā)表于 2019-8-15 13:43 | 只看該作者
學(xué)習(xí)下。
回復(fù)

使用道具 舉報(bào)

5#
ID:506687 發(fā)表于 2019-8-28 10:07 | 只看該作者
看的還是比較明白
回復(fù)

使用道具 舉報(bào)

6#
ID:353061 發(fā)表于 2019-9-5 16:03 | 只看該作者
很有用,感謝分享。
回復(fù)

使用道具 舉報(bào)

7#
ID:608128 發(fā)表于 2019-9-7 10:10 | 只看該作者
很完整,值得參考
回復(fù)

使用道具 舉報(bào)

8#
ID:616032 發(fā)表于 2019-9-25 09:31 | 只看該作者
樓主,請(qǐng)問(wèn)有對(duì)應(yīng)的電路圖嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:28260 發(fā)表于 2021-6-27 18:40 | 只看該作者

已拜讀,非常完整,值得參考!
回復(fù)

使用道具 舉報(bào)

10#
ID:981733 發(fā)表于 2021-11-17 11:08 | 只看該作者
樓主必須要按鍵嗎
回復(fù)

使用道具 舉報(bào)

11#
ID:969453 發(fā)表于 2022-2-28 17:19 | 只看該作者
小車(chē)其他接線(xiàn)沒(méi)有了嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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