欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3755|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

用本壇找到的程序做的帶溫度補(bǔ)償超聲波測距試驗(yàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
        在本壇找到一個(gè)帶溫度補(bǔ)償超聲波測距程序,于是用手上的開發(fā)板進(jìn)行了試驗(yàn),試驗(yàn)時(shí),修改了程序的相關(guān)端口,以便能在單片機(jī)開發(fā)板上使用,試驗(yàn)結(jié)果,程序工作正常,功能設(shè)計(jì)較全。修改后的程序包: 超聲波測距程序.zip (1.39 MB, 下載次數(shù): 56)
       這里貼出了試驗(yàn)時(shí)的實(shí)物照片,供愛好者參考:





修改過的部分程序:

#include <REGX51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LcdData P2                   //1602數(shù)據(jù)端口

sbit LCD_RS=P0^7;      //1602 RS端口
sbit LCD_RW=P0^6;      //1602 RW端口
sbit LCD_EN=P0^5;      //1602 EN端口
sbit Echo=P1^2;        //HC-SR04 接收端口
sbit Trig=P1^1;        //HC-SR04 發(fā)射端口
sbit Resets_Key=P3^2;  //復(fù)位清零按鍵
sbit Single_Key=P3^3;  //單次測量按鍵    誤差較大
sbit Contin_Key=P3^4;  //連續(xù)測量按鍵    誤差小
sbit Averag_Key=P3^5;  //連續(xù)(平均測量)按鍵   誤差較小
sbit Setting_Key=P3^6; //溫度修正按鍵
sbit Add_Key=P1^5;     //溫度加1按鍵
sbit Sub_Key=P1^6;     //溫度減1按鍵
sbit DQ=P3^7;          //DS18B20單總線接口

bit Temp_Flag;         //正負(fù)溫度標(biāo)志:溫度為正Temp_Flag=0,否則為1
uint temp=25;          //溫度值
bit flag_flow=0,flag_one=0,flag_clear=0,flag_con1=0,flag_con2=0,flag_temp=0;
uchar i=0,m,j,k;
uint time=0,S=0,S1=0,totle=0;
float V=346.0;
uint Sav[11];                                                          //連續(xù)測量時(shí)10次平均值數(shù)組
uchar Line1[16]={"T:   C  V:346m/s"};          //1602第一行初始字符顯示數(shù)組
uchar Line2[16]={"S=     m        "};          //1602第二行初始字符顯示數(shù)組

void Delayms(uchar xms);                        //延時(shí)xms函數(shù)
void WriteLcd(uchar Dat,bit x);        //1602寫函數(shù)
void InitLcd(void);                                //1602初始化函數(shù)
void DisplayLcd();                                //1602顯示函數(shù)
void init();                                        //初始化函數(shù)
void keyscan();                                        //鍵掃描函數(shù)
void StartModule();                            //啟動(dòng)模塊函數(shù)
void Conut(void);                                 //測量計(jì)算函數(shù)
void Delayus(uchar xus);        //us級延時(shí)函數(shù)
bit Init_DS18B20(void);         //初始化DS18B20函數(shù)
uchar Read_DS18B20(void);       //讀DS18B20函數(shù)
void Write_DS18B20(uchar Dat);  //寫DS18B20函數(shù)
void GetTemp();                 //取溫度函數(shù)
void CalcTestTemp();            //溫度處理函數(shù)

void main(void)    //主函數(shù)
{
        init();
        InitLcd();
        while(1)
        {
                keyscan();                         //鍵掃描函數(shù)
            DisplayLcd();
            if(flag_temp==0)
            {
                    GetTemp();
                    CalcTestTemp();
            }
            if(flag_one==1||flag_con1==1||flag_con2==1)
            {
                    StartModule();         //開始發(fā)射超聲波
                while(!Echo);                 //當(dāng)RX為零時(shí)等待
            TR0=1;                         //開啟計(jì)數(shù)
            while(Echo);             //當(dāng)RX為1計(jì)數(shù)并等待
                TR0=0;                         //關(guān)閉計(jì)數(shù)
            Conut();                 //計(jì)算
            Delayus(200);
                flag_one=0;
            }
        }
}

void Delayms(uchar xms)   //延時(shí)ms函數(shù)
{
    uchar i,j;
    for(i=xms;i>0;i--)
            for(j=110;j>0;j--);
}

void WriteLcd(uchar Dat,bit x)  //1602寫函數(shù)(寫指令時(shí)x=0,寫數(shù)據(jù)時(shí)x=1)
{
        LCD_EN=0;
        LcdData=Dat;
        LCD_RS=x;
        LCD_RW=0;
        LCD_EN=1;
        Delayms(1);
        LCD_EN=0;
}

void InitLcd(void)           //1602初始化函數(shù)
{
        WriteLcd(0x38,0);  //功能設(shè)定(38H),8位數(shù)據(jù),2行顯示,5*7點(diǎn)陣
        WriteLcd(0x0C,0);  //顯示開、關(guān)設(shè)定(0CH),開顯示,不顯示光標(biāo),光標(biāo)不閃爍
        WriteLcd(0x06,0);  //輸入模式設(shè)定(06H),讀寫一個(gè)字符后,地址指針加1,且光標(biāo)加1
        WriteLcd(0x01,0);  //清除顯示(01H),清除數(shù)據(jù)RAM中的數(shù)據(jù)
}

void DisplayLcd()                                  //液晶屏顯示函數(shù)
{
    uchar y;
    V=(331.4+temp*0.607);
    Line1[2]=temp/10+0x30;
    Line1[3]=temp%10+0x30;
    Line1[4]=0xDF;                  //顯示℃中C前面的小圓
    Line1[10]=(uint)V/100+0x30;
    Line1[11]=(uint)V%100/10+0x30;
    Line1[12]=(uint)V%10+0x30;
    if(flag_clear==1)
    S1=0;
    if((S1>=7000)||flag_flow==1)    //超出測量范圍顯示“-”
        {         
            flag_flow=0;
            Line2[2]='-';
            Line2[3]='.';
............................................................................
由于程序較長,需要的到上面的的下載地址自己下載

原貼:http://www.raoushi.com/bbs/dpj-89642-1.html


評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:157057 發(fā)表于 2017-7-8 11:31 | 只看該作者
51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:475110 發(fā)表于 2019-2-7 01:06 來自觸屏版 | 只看該作者
正需要
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表