Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 7207|回復: 0
打印 上一主題 下一主題

AT89C2051超音波測距程式範例

[複製鏈接]
跳轉到指定樓層
1#
發表於 2006-8-6 15:49:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
AT89C2051超音波測距程式範例
http://www.52dianzi.com/document/44.htm
    超聲波測距原理:測出回波和發射脈衝之間的時間間隔,由公式:距離=速度*時間/2計算,輸出顯示。
    AT89C2051通過P1.6輸出10個40kHz脈衝,由非門做電流放大,以推挽形式加到變壓器的初級,升壓後推動超聲波換能器。在發射的同時,P1.7輸出一個高電平啟動,給電容C4充電,。發射結束時高電平翻轉為低電平,C4開始對R2、R3組成的分壓器放電並輸出到比較器的負端。
    超聲波接收換能器將回波送到放大器進行放大後,送入機內比較器的正輸入端。發射時P1.7輸出的電平用以抑制比較器的翻轉,稱為渡越時間,抑制發射器發射的超聲波直接輻射到接收器。
   




    超聲波測距系統軟件設計採用模塊化設計,由主程序、發射子程序、查蟓接收子程序、定時子程序、顯示子程序等模塊組成。該系統的主程序處於鍵控循環工作方式,當按下測量鍵時,主程序開始調用發射子程序、查詢接收子程序、定時子程序,並把測量結果用顯示子程序在液晶屏上顯示出來。 由於液晶要使用同一P3口,所以必須使用位操作,否則將導致LCD不能正常顯示。在系統還可以加入溫度傳感器來監測環境溫度,可進行溫度被償。為了增強系統的可靠性,應在軟硬件上採用抗干擾措施。
    # pragma DB OE CD OT(5,SPEED) ROM(LARGE)IV
    /*連接所需要的庫*/
    #include
    #include
    #include
    /*定義數據類型*/
    typedef unsingned char byte;
    typedef unsigned int word
    #define uchar unsigned char
    #define unint unsigned int
    #define ulong unsigned long
    /*定義系統常數*/
    #define TRUE 1
    #define FALSE 0
    #define C=340 /*聲速*/
    /*定義功能位*/
    sbit bflag=ACC7;
    sbit VOLCK=P1^5;
    sbit MING=P3^5;
    sbit QUIET=P1^3;
    sbit BACK=P1^2;
    /*定義顯示緩衝區*/
    uchar idata ON[16]={』,』L』,』E』,』N』,』G』,』T』,』H』,』=』,』8』,』.』,』8

』8』,』m』,』』,』』,』』};
    /*主程序用延時子程序*/
    woid main-delay(void)
    {
    register i;
    TRO=1;
    for(i=0;i<15;i++)
    {
    TH0=0;
    TL0=0;
    Do{}while(!TF0);
    TF0=0;
    }
    TR0=0;
    }
    */通用延時子程序*/
    void delay(void)
    {
    unint i;
    for(i=0;i<200;i++){;}
    }
    /*鍵盤延時子程序*/
    void key-delay(void)
    {
    unint i;
    for(i=0;i<200;i++){;}
    }
    /*初始化程序*/
    void start_main()
    {
    tegister i;
    uchar a[16]={』』,』L』,』E』,』N』,』G』,』T』,』H』,』=,』8』,』.』,』8』,』8[size=+0]

』,』m』,』』,』』,』』};
    for(i=0;<16;i++)
    {ON=a;}
    nitlcd();/*初始化液晶*/
    display(ON);/*更新顯示*/
    }
    /*主程序*/
    void main()
    {
    register s,keycode;
    long idata t;
    start-main();/*初始化*/
    main-delay();/*延時*/;
    if(keycoed= =true)
    {
    keycode=key-scan-wait();
    /*判斷是否有測量鍵按下*/
    t=measure();*/測量*/
    S=0.5*t*C;*/換算*/
    Decode-bcd(s.0x09);
    /*把測量結果置換入顯示緩衝區*/
    init-lcd();/*初始化液晶*/
    display(ON);/*更新顯示*/
    }
    }



』,』m』,』』,』』,』』};
    for(i=0;<16;i++)
    {ON=a;}
    nitlcd();/*初始化液晶*/
    display(ON);/*更新顯示*/
    }
    /*主程序*/
    void main()
    {
    register s,keycode;
    long idata t;
    start-main();/*初始化*/
    main-delay();/*延時*/;
    if(keycoed= =true)
    {
    keycode=key-scan-wait();
    /*判斷是否有測量鍵按下*/
    t=measure();*/測量*/
    S=0.5*t*C;*/換算*/
    Decode-bcd(s.0x09);
    /*把測量結果置換入顯示緩衝區*/
    init-lcd();/*初始化液晶*/
    display(ON);/*更新顯示*/
    }
    }

20066375918286.gif (21.19 KB, 下載次數: 530)

20066375918286.gif
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-24 00:10 , Processed in 0.161396 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表