新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機超聲波測距C程序

        51單片機超聲波測距C程序

        作者: 時間:2016-11-27 來源:網絡 收藏

        //***************************************************************
        //顯示數據轉換程序
        void display(uint temp)
        {
        uchar ge,shi,bai;
        bai=temp/100;
        shi=(temp%100)/10;
        ge=temp%10;

        wela=1;
        P0=0xf7;
        wela=0;
        dula=1;
        P0=table[bai];
        dula=0;
        delay(1);
        dula=1;
        P0=0x00;//關位碼
        dula=0;

        wela=1;
        P0=0xef;
        wela=0;
        dula=1;
        P0=table[shi];
        dula=0;
        delay(1);
        dula=1;
        P0=0x00;//關位碼
        dula=0;


        dula=1;
        P0=table[ge];
        dula=0;
        wela=1;
        P0=0xdf;
        wela=0;
        delay(1);
        dula=1;
        P0=0x00;//關位碼
        dula=0;

        }
        //***************************************************************
        void main()
        {
        uint distance;
        test =0;
        Trig=0;//首先拉低脈沖輸入引腳
        EA=1;//打開總中斷0
        TMOD=0x10;//定時器1,16位工作方式
        while(1)
        {
        EA=0;//關總中斷
        Trig=1;//超聲波輸入端
        delay_20us();//延時20us
        Trig=0;//產生一個20us的脈沖
        while(Echo==0); //等待Echo回波引腳變高電平
        succeed_flag=0; //清測量成功標志
        EA=1;
        EX0=1;//打開外部中斷0
        TH1=0;//定時器1清零
        TL1=0;//定時器1清零
        TF1=0;//計數溢出標志
        TR1=1;//啟動定時器1
        delay(20);//等待測量的結果
        TR1=0;//關閉定時器1
        EX0=0;//關閉外部中斷0
        if(succeed_flag==1)
        {
        time=timeH*256+timeL;
        distance=time*0.172;//厘米
        display(distance);
        }
        if(succeed_flag==0)
        {
        distance=0;//沒有回波則清零
        test = !test;//測試燈變化
        }
        }
        }
        //***************************************************************
        //外部中斷0,用做判斷回波電平
        void exter()interrupt 0// 外部中斷0是0號
        {
        timeH =TH1;//取出定時器的值
        timeL =TL1;//取出定時器的值
        succeed_flag=1;//至成功測量的標志
        EX0=0;//關閉外部中斷
        }
        //****************************************************************
        //定時器1中斷,用做超聲波測距計時
        void timer1() interrupt 3//
        {
        TH1=0;
        TL1=0;
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 汤原县| 阿坝县| 永春县| 涿鹿县| 绥芬河市| 新沂市| 普兰县| 田东县| 麻阳| 芜湖市| 高安市| 德钦县| 深州市| 吉林省| 蒙山县| 璧山县| 神农架林区| 利辛县| 胶州市| 兖州市| 湘阴县| 乾安县| 新沂市| 高台县| 垫江县| 呼玛县| 武邑县| 资阳市| 淮安市| 洱源县| 宿松县| 阿合奇县| 潮州市| 东莞市| 镇原县| 合肥市| 汉源县| 陕西省| 文水县| 虎林市| 登封市|