新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 超聲波水位測量控制系統C語言源程序

        超聲波水位測量控制系統C語言源程序

        作者: 時間:2016-11-25 來源:網絡 收藏
        本文介紹一個超聲波水位測量控制系統C語言源程序,本設計的超聲波水位測量控制系統是一種利用超聲波技術、電子技術、電磁開關技術相結合來實現非接觸式液位測量和控制系統,能夠在某些特定場合或環境比較惡劣的情況下使用,在工業監測和控制等方面得到了廣泛應用。近些年來,工業水平的不斷發展對液位測量的精度、廣度和抗干擾性提出了越來越高的要求,超聲波測距技術本身也在不斷的完善和發展,測距儀更趨向小型化和智能化,逐步實現了高精確度、高可靠性、安全性和多功能化。
        言源程序,電子小制作可測量并顯示液位,還可以通過單片機控制把液位限定在某一范圍內,在單片機控制失效的情況下發出報警信號,提醒工作人員進行手動控制。研究內容包括超聲波測距的基本原理與方法、精度影響因素的分析與解決辦法、單片機對閥門的控制方法、監控系統的整體方案設計、硬件設計、軟件流程設計等。設計完成之后提供一套可以使用的超聲波測距儀,測量范圍和測量精度滿足一般工業應用需要。設計完成之后應提供一套可以用于一般工業生產的液位監控系統。通過畢業設計的整個過程,可以綜合運用傳感器、單片機、電子電路和程序設計方面的知識,鍛煉和提高動手能力、參與科研工作的能力。
        言源程序涉及了所學的單片機、自動控制原理、數字電路、模擬電路、電路分析、軟件技術、智能檢測與轉換技術等幾乎所有的專業課程,很好的體現了綜合訓練的要求。本電子小制作設計屬于一個完整的系統,設計過程中需要考慮的因素較多,但設計功能相對較為簡單不會存在太大困難,題目難易適中。既可以鞏固所學的知識和技能,又可以有所提高。本課題相對其它課題來說,資料相對較多,搜索資料相對容易。但對本科生來說,從眾多質量參差不齊的資料中選擇最合適的資料也是比較困難的。言源程序這對設計學生來說是一次很好的鍛煉。
        //超聲波水位測量控制系統C語言源程序
        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit Trig=P1^0;sbit Echo=P3^2;
        sbit lcden=P0^4;
        sbit lcdrs=P0^1;
        sbit alertl=P1^1;//低水位報警,紅燈亮電子小制作
        sbit alertm=P1^7;//中水位綠燈亮
        sbit alerth=P1^4;//高水位報警,黃燈亮
        sbit pumb=P0^2;//low vol is avalibal http://www.duankudp.com/
        sbit power=P3^5;
        uint time,distance,waterlevel;
        uchar timeH,timeL;
        bit succeed_flag;
        void delay(uint z);

        //超聲波水位測量控制系統C語言源程序電子小制作
        void init()
        {
        power=0; //power is ok
        lcden=0; //low enble http://www.duankudp.com/
        write_com(0x38);
        write_com(0x0c); //display open ,cursor off,blink off
        write_com(0x06); //pointer auto add 1
        write_com(0x01); //clear screen and pointer
        write_com(0x80);
        TMOD=0x10; //time1,16 bit timmer
        EA=0; //open entire interrupt
        Trig=0;
        Echo=0;
        delay(1);
        }
        //***************************************************************
        void delay(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        //***************************************************************電子小制作
        void display(uint temp)
        {
        write_com(0x83);
        write_dat((temp/100)+0x30);
        delay(20);
        write_dat(temp/10+0x30);
        delay(20);
        write_dat(temp+0x30);

        }
        //***************************************************************
        void delay_20us()
        {
        uchar a ;
        for(a=0;a<100;a++);
        }
        //***************************************************************
        void display1()
        {
        uchar code table[]="SIAS UNIVERSITY ";
        uchar code table1[]="ZZS 20071521258 ";
        uchar num;
        write_com(0x80);
        for(num=0;num<16;num++)
        {
        write_dat(table[num]);
        delay(300);
        }
        write_com(0x80+0x40);
        for(num=0;num<16;num++)
        {
        write_dat(table1[num]);
        delay(300);
        }
        write_com(0x01);
        delay(1000);
        }
        //***************************************************************
        //***************************************************************
        //外部中斷0,用做判斷回波電平//超聲波水位測量控制系統C語言源程序
        void exter() interrupt 0 // 外部中斷0是0號http://www.5imcu.net/
        {
        timeH =TH1; //取出定時器的值
        timeL =TL1; //取出定時器的值
        succeed_flag=1;//至成功測量的標志
        EX0=0; //關閉外部中斷
        }
        //****************************************************************
        //定時器1中斷,用做超聲波測距計時//超聲波水位測量控制系統C語言源程序

        void timer1() interrupt 3 //
        {
        TH1=0;
        TL1=0;
        }
        //***************************************************************
        //***************************************************************
        void main()
        {
        init(); //timer1,16 bit
        display1();
        init1();
        while(1)
        {
        alertl=1; //low alert
        alertm=1; //middle alert
        alerth=1; //high alert
        EA=0; //off entire interrupt
        Trig=1; //ultrasonic Trigger
        delay_20us(); //delay 20us
        Trig=0; //20uss Pulse
        while(Echo==0); //wait Echo change High Vol
        succeed_flag=0; //clear succeed flag
        EA=1; //open entire interruot
        EX0=1; //open exinterrupt0
        TH1=0; //clear timer1s high 8 bit
        TL1=0; //clear timer1s low 8 bit
        TF1=0; //clear timer1s overflow bit
        TR1=1; //start timer1
        delay(20); //waitting
        TR1=0; //stop timer1
        EX0=0; //off exinterrupt0
        if(succeed_flag==1)
        {
        time=timeH*256+timeL; //entire time
        distance=time*0.172; //s=t*340/2*1000mm
        waterlevel=163-distance; //
        if(waterlevel>=0&&waterlevel<=163)
        display(waterlevel);

        }
        if(succeed_flag==0)
        {
        distance=0;//沒有回波則清零//超聲波水位測量控制系統C語言源程序

        }
        if(waterlevel>=0&&waterlevel<=50)
        {
        write_com(0x8C);
        write_dat(L);
        alertl=0;//RED Light,low water level
        pumb=0;//open pumb,add water http://www.5imcu.net/
        }
        else if(waterlevel>50&&waterlevel<=100)
        {
        write_com(0x8C);
        write_dat(M);
        alertm=0;
        }
        else if(waterlevel>100&&waterlevel<=163)
        {
        write_com(0x8C);
        write_dat(H);
        alerth=0;
        pumb=1;//off pumb http://www.5imcu.net/
        }


        delay(200);

        }
        }
        //***************************************************************


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 启东市| 榕江县| 乌兰浩特市| 宁化县| 逊克县| 晋州市| 瑞昌市| 民丰县| 开鲁县| 焉耆| 高雄县| 彭水| 秀山| 南江县| 宝坻区| 山丹县| 乐至县| 南安市| 望江县| 五峰| 杂多县| 丹凤县| 会同县| 乌海市| 轮台县| 谷城县| 柏乡县| 内江市| 大宁县| 山阳县| 贵溪市| 文昌市| 阿城市| 叙永县| 伊吾县| 耿马| 青铜峡市| 河津市| 鄂托克前旗| 龙门县| 常宁市|