新聞中心

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

        超聲波HM55B測距(STC10F08單片機C程序)

        作者: 時間:2016-11-23 來源:網絡 收藏
        名稱:超聲波測距

        作者:Acebit

        本文引用地址:http://www.104case.com/article/201611/320529.htm

        信息:STC10F08單片機,晶振11.0592MHZ;超聲波模塊HM55B,測距范圍1米;

        LCD1602,串行發送數據,顯示單位mm;

        #include "def.h" //定義管腳
        #include "reg51.h"
        #include
        #ifndef OSC110592
        #define OSC110592
        #endif
        unsigned int qian,bai,shi,ge;
        unsigned int k;
        long result;

        void init();
        void PULSOUTus(unsigned int port);
        bit Read_Port(unsigned int port);
        void Write_Port(unsigned int port,bit state);

        bdata unsigned char SBUF1;
        sbit SBUF1_bit0 = SBUF1^0;
        sbit SBUF1_bit1 = SBUF1^1;
        sbit SBUF1_bit2 = SBUF1^2;
        sbit SBUF1_bit3 = SBUF1^3;
        sbit SBUF1_bit4 = SBUF1^4;
        sbit SBUF1_bit5 = SBUF1^5;
        sbit SBUF1_bit6 = SBUF1^6;
        sbit SBUF1_bit7 = SBUF1^7;


        void init() //initialization
        {
        TMOD=0x12;
        PCON=00;
        TR1=0;
        TF1=0;
        TR0=0;
        TF0=0;
        ET1=0;
        ET0=0;
        EA=0;
        }


        void delay_ms(unsigned int i)//延時子程序
        {
        unsigned int j;
        for(;i>0;i--)
        for(j=0;j<125;j++);
        }

        void putchar(char input) //模擬串口9600波特率,向LCD發送數據
        {
        SBUF1=input;
        TL0=160;
        TH0=160;
        TF0=0;
        TR0=1;

        P26 = 0; //strat
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit0; //0
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit1; //1
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit2; //2
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit3; //3
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit4; //4
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit5; //5
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit6; //6
        while(!TF0);
        TF0=0;
        P26 = SBUF1_bit7; //7
        while(!TF0);
        TF0=0;
        P26 = 1; //end
        while(!TF0);
        TF0=0;
        TR0=0;
        }

        void PULSOUTus(unsigned int port)//HM55B啟動脈沖
        {

        Write_Port(port,1);
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        Write_Port(port,0);
        }

        void Write_Port(unsigned int port,bit state)
        {
        switch (port)
        {
        case 0: P00=state;break;
        case 1: P01=state;break;
        case 2: P02=state;break;
        case 3: P03=state;break;
        case 4: P04=state;break;
        case 5: P05=state;break;
        case 6: P06=state;break;
        case 7: P07=state;break;
        case 8: P20=state;break;
        case 9: P21=state;break;
        case 10:P22=state;break;
        case 11:P23=state;break;
        case 12:P24=state;break;
        case 13:P25=state;break;
        case 14:P26=state;break;
        case 15:P27=state;break;
        }
        }


        //main program
        void main()
        {
        init();
        while(1)
        {
        TL1=0;
        TH1=0;

        Write_Port(15,0);
        PULSOUTus(15);
        Write_Port(15,1);
        while(P27==0); //測回波時間
        TR1=1;
        while(P27==1);
        TR1=0;

        result=TH1*256+TL1;
        result=result*0.187-150; //距離計算
        k=(int)result;
        putchar(22);//顯示
        putchar(12);
        delay_ms(100);
        qian=k/1000+48;
        bai=(k00)/100+48;
        shi=(k00)0/10+48;
        ge=(k00)0+48;

        putchar(qian);
        putchar(bai);
        putchar(shi);
        putchar(ge);
        putchar(m);
        putchar(m);
        delay_ms(500);
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 墨脱县| 忻州市| 溆浦县| 大安市| 闽侯县| 辽宁省| 济南市| 湟源县| 萍乡市| 宁国市| 阳朔县| 布拖县| 屯门区| 金塔县| 鄂尔多斯市| 万载县| 赫章县| 巫山县| 青川县| 公安县| 湖口县| 柳河县| 中西区| 桂林市| 建德市| 灵寿县| 漯河市| 萝北县| 车险| 中江县| 凭祥市| 积石山| 民县| 阿克| 祁门县| 新丰县| 永济市| 万州区| 涞源县| 亳州市| 陆丰市|