找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2945|回复: 2
打印 上一主题 下一主题
收起左侧

用本坛找到的程序做的带温度补偿超声波测距试验

[复制链接]
跳转到指定楼层
楼主
        在本坛找到一个带温度补偿超声波测距程序,于是用手上的开发板进行了试验,试验时,修改了程序的相关端口,以便能在单片机开发板上使用,试验结果,程序工作正常,功能设计较全。修改后的程序包: 超声波测距程序.zip (1.39 MB, 下载次数: 56)
       这里贴出了试验时的实物照片,供爱好者参考:





修改过的部分程序:

#include <REGX51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LcdData P2                   //1602数据端口

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 发射端口
sbit Resets_Key=P3^2;  //复位清零按键
sbit Single_Key=P3^3;  //单次测量按键    误差较大
sbit Contin_Key=P3^4;  //连续测量按键    误差小
sbit Averag_Key=P3^5;  //连续(平均测量)按键   误差较小
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;         //正负温度标志:温度为正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];                                                          //连续测量时10次平均值数组
uchar Line1[16]={"T:   C  V:346m/s"};          //1602第一行初始字符显示数组
uchar Line2[16]={"S=     m        "};          //1602第二行初始字符显示数组

void Delayms(uchar xms);                        //延时xms函数
void WriteLcd(uchar Dat,bit x);        //1602写函数
void InitLcd(void);                                //1602初始化函数
void DisplayLcd();                                //1602显示函数
void init();                                        //初始化函数
void keyscan();                                        //键扫描函数
void StartModule();                            //启动模块函数
void Conut(void);                                 //测量计算函数
void Delayus(uchar xus);        //us级延时函数
bit Init_DS18B20(void);         //初始化DS18B20函数
uchar Read_DS18B20(void);       //读DS18B20函数
void Write_DS18B20(uchar Dat);  //写DS18B20函数
void GetTemp();                 //取温度函数
void CalcTestTemp();            //温度处理函数

void main(void)    //主函数
{
        init();
        InitLcd();
        while(1)
        {
                keyscan();                         //键扫描函数
            DisplayLcd();
            if(flag_temp==0)
            {
                    GetTemp();
                    CalcTestTemp();
            }
            if(flag_one==1||flag_con1==1||flag_con2==1)
            {
                    StartModule();         //开始发射超声波
                while(!Echo);                 //当RX为零时等待
            TR0=1;                         //开启计数
            while(Echo);             //当RX为1计数并等待
                TR0=0;                         //关闭计数
            Conut();                 //计算
            Delayus(200);
                flag_one=0;
            }
        }
}

void Delayms(uchar xms)   //延时ms函数
{
    uchar i,j;
    for(i=xms;i>0;i--)
            for(j=110;j>0;j--);
}

void WriteLcd(uchar Dat,bit x)  //1602写函数(写指令时x=0,写数据时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初始化函数
{
        WriteLcd(0x38,0);  //功能设定(38H),8位数据,2行显示,5*7点阵
        WriteLcd(0x0C,0);  //显示开、关设定(0CH),开显示,不显示光标,光标不闪烁
        WriteLcd(0x06,0);  //输入模式设定(06H),读写一个字符后,地址指针加1,且光标加1
        WriteLcd(0x01,0);  //清除显示(01H),清除数据RAM中的数据
}

void DisplayLcd()                                  //液晶屏显示函数
{
    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.51hei.com/bbs/dpj-89642-1.html


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:157057 发表于 2017-7-8 11:31 | 只看该作者
51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:475110 发表于 2019-2-7 01:06 来自手机 | 只看该作者
正需要
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表