新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 超聲波測距避障程序

        超聲波測距避障程序

        作者: 時間:2016-11-25 來源:網絡 收藏
        超聲波距離傳感器測量得的“距離”信息進行避障行走;當輪式教育機器人距離前面障礙物小于20cm時,它會向左拐改變行進方向,避免與物體碰撞。1、源程序


        #include"at89x52.h"
        #define uint unsigned int
        #define uchar unsigned char
        void delay_nµs(uint i);
        void delay_nms(uint n);
        void Forward(void);
        void Left_Turn(void);
        void Right_Turn(void) ;
        void Backward(void) ;
        void Time0_Init (void);


        int main(void) //主函數,程序從這里開始運行電子小制作_我愛制作_電子DIY制作套件http://www.5imcu.net/
        {
        uint count,x,H,L; //定義無符號整型變量count,x,

        Time0_Init ();

        while(1)//循環
        {
        TL0 = 0; //計數器低位賦初值0
        TH0 = 0; //計數器高位賦初值0
        P1_3 = 0 ; //置P1_4輸出為高電平,其余的輸出低電平
        P1_3 = 1;
        delay_nµs(5); //延時5µs
        P1_3 = 0 ;
        delay_nµs(750);
        while(!P1_3) ;
        TR0 = 1;
        while (P1_3);
        TR0 = 0; //定時器1計時停止
        H = TH0;
        L = TL0;
        count=H*256 + L;
        x=count/29.034;
        if(x<=20) //如果距離小于20cm時
        {
        Backward(); //后退
        Left_Turn(); //向左轉
        }
        else //距離不小于等于20cm時電子小制作_我愛制作_電子DIY制作套件http://www.5imcu.net/
        {
        Forward(); //向前走
        }
        delay_nms(30); //延時30ms
        }
        }


        void delay_nµs(uint i) //延時nµs
        {
        i=i/10;
        while(--i);
        }

        void delay_nms(uint n) //延時n ms
        {
        n=n+1;
        while(--n)
        delay_nµs(900);
        }
        void Time0_Init (void) //計數器初始化
        {
        TMOD |= 0x01; //計數器選取方式1
        TL0 = 0; //計數器低位賦初值0
        TH0 = 0; //計數器高位賦初值0
        TR0 = 0; //停止計數
        }

        void Forward(void) //聲明一個前進子函數
        {
        P1_0 = 1; //設置P1_0輸出高電平http://www.duankudp.com/
        delay_nµs(1700); //延時0.0017s
        P1_0 =0; //設置P1_0輸出低電平
        P1_1 = 1; //設置P1_1輸出高電平
        delay_nµs(1300); //延時0.0013s
        P1_1 = 0; //設置P1_1輸出低電平
        delay_nms(20); //延時20ms
        }
        void Left_Turn(void) //聲明一個向左子函數
        {
        uint i;
        for(i=1;i<=7;i++)
        {
        P1_0 = 1; //設置P1_0輸出高電平
        delay_nµs(1300); //延時0.0013s
        P1_0 = 0; //設置P1_0輸出低電平
        P1_1 = 1; //設置P1_1輸出高電平
        delay_nµs(1300); //延時0.0013s
        P1_1 = 0; //設置P1_1輸出低電平http://www.duankudp.com/
        delay_nms(20); //延時20ms
        }
        }
        void Backward(void) //聲明一個向后子函數電子小制作_我愛制作_電子DIY制作套件http://www.5imcu.net/
        {
        uint i;
        for(i=1;i<=4;i++)
        {
        P1_0 = 1; //設置P1_0輸出高電平
        delay_nµs(1300); //延時0.0013s
        P1_0 = 0; //設置P1_0輸出低電平
        P1_1 = 1; //設置P1_1輸出高電平
        delay_nµs(1700); //延時0.0017s
        P1_1 = 0; //設置P1_1輸出低電平
        delay_nms(20); //延時20ms
        }

        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 维西| 南木林县| 柘城县| 宜兴市| 永州市| 法库县| 内黄县| 宣武区| 页游| 蓬安县| 田东县| 怀集县| 民勤县| 基隆市| 灵武市| 甘肃省| 合江县| 平顶山市| 高邮市| 淳安县| 灵山县| 锦州市| 阳东县| 纳雍县| 犍为县| 南靖县| 淮南市| 和顺县| 甘孜县| 麻阳| 三门峡市| 应用必备| 江陵县| 陵水| 大余县| 宁南县| 峨眉山市| 玛曲县| 延长县| 德钦县| 开鲁县|