用18B20做温度补偿的超声波测距程序

发布者:MysticalSoul最新更新时间:2015-10-26 来源: eefocus关键字:18B20  温度补偿  超声波测距 手机看文章 扫描二维码
随时随地手机看文章
用18B20做温度补偿的超声波测距程序
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
sbit wave=P1^4;
uint  tvalue;//温度值用18B20做温度补偿的超声波测距程序
uchar tflag;//温度正负标志
sbit DQ=P1^3;//ds18b20与单片机连接口
char idata disp_buf1[16];//1602显示缓冲区1(即上排16个字符)
char idata disp_buf2[16];//1602显示缓冲区2(即下排16个字符)
uchar code table[]=" Celiang Ok ! ";
uchar i;
char idata julidata[3]; //存放距离值变量
uchar data disdata[4];//温度
unsigned long int JuLi;//距离
unsigned char Gao,Di;//存储计时器高位,低位
void ChuShiHua();//初始化
void FaShe();//发射声波
void Shou();//接收外部中断程序
void Deng();//空等待
void delay(uint n)        //延时时间为n*1ms
{ uchar x=0;
for(; n>0; n--)
{
for(; x<250; x++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void delayus(uint n)
{
while(n--);
}
void check_busy()
{
P2=0xff;
rs=0;
rw=1;
en=1;
while(P2&0x80);
en=0;
}
void lcd_wcom(uchar com)  
{ check_busy();
rw=0;
rs=0;
P2=com;
en=1;
en=0;
}
void lcd_wdat(uchar dat)  
{ check_busy();
rw=0;
rs=1;
P2=dat;
en=1;
en=0;
}
void lcd_init()       
{
lcd_wcom(0x38),delay(1);//8位,双列,5*7
lcd_wcom(0x0c),delay(1); //开显示,关光标,光标所在字符不闪 电子小制作_我爱制作_电子DIY制作套件http://www.5imcu.net/ 
lcd_wcom(0x06),delay(1);//显示地址递增18B20做温度补偿的超声波测距程序
lcd_wcom(0x01),delay(1); //清屏,光标移到左上角
}
void chushi_display() 
{
uchar m=0;
lcd_init();
lcd_wcom(0x80);           
for(m=0; m<16; m++)
{
lcd_wdat(table[m]); //将数组中字符显示出来18B20做温度补偿的超声波测距程序
delay(1000);         
}
delay(100);
lcd_wcom(0x01);
}
void ds1820rst()
{ unsigned char x=0;
   DQ = 1,delayus(4);          //DQ复位
   DQ = 0;          //DQ拉低
   delayus(100); //精确延时大于480us
   DQ = 1;          //拉高http://www.duankudp.com/
   delayus(40);
}
uchar ds1820rd()
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     DQ = 0; //给脉冲信号
        dat>>=1;
        DQ = 1; //给脉冲信号电子小制作_我爱制作_电子DIY制作套件http://www.5imcu.net/
        if(DQ)
       dat|=0x80;
       delayus(10);
   }
   return(dat);
}
void ds1820wr(uchar wdata)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 0;
    DQ = wdata&0x01;
    delayus(10);
    DQ = 1;
    wdata>>=1;
  }
}
read_temp()
{
  uchar a,b;
   ds1820rst();  
   ds1820wr(0xcc);/
   ds1820wr(0x44);/
   ds1820rst();  
   ds1820wr(0xcc);/
   ds1820wr(0xbe);/
   a=ds1820rd();
   b=ds1820rd();
   tvalue=b;
   tvalue<<=8;
   tvalue=tvalue|a;
   if(tvalue<0x0fff)
    tflag=0;
    else
   {
     tvalue=~tvalue+1;
     tflag=1;
   }
   tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
   return(tvalue);
}
void ds1820disp()
{
     uchar flagdat;
      disdata[0]=tvalue/1000+0x30;//百位数
      disdata[1]=tvalue00/100+0x30;//十位数
      disdata[2]=tvalue0/10+0x30;//个位数http://www.duankudp.com/
      disdata[3]=tvalue+0x30;//小数位
      if(tflag==0)
      flagdat=0x20;//正温度不显示符号电子小制作_我爱制作_电子DIY制作套件http://www.5imcu.net/
      else
      flagdat=0x2d;//负温度显示负号:-18B20做温度补偿的超声波测距程序
      if(disdata[0]==0x30)
      {
        disdata[0]=0x20;//如果百位为0,不显示
       if(disdata[1]==0x30)
       {
         disdata[1]=0x20;//如果百位为0,十位为0也不显示
       }
   
}
void updata_disp()
{
disp_buf1[0]='W', disp_buf1[1]='e';
disp_buf1[2]='n', disp_buf1[3]='D';
disp_buf1[4]='u',disp_buf1[5]='-';
disp_buf1[6]='-', disp_buf1[7]='D';
disp_buf1[8]='i',disp_buf1[9]='s';;
disp_buf1[10]='t',disp_buf1[11]='a';;
disp_buf1[12]='n',disp_buf1[13]='t';;
disp_buf1[14]=':',disp_buf1[15]=':';
disp_buf2[0]='*', disp_buf2[1]=disdata[1];
disp_buf2[2]=disdata[2],disp_buf2[3]='.';
disp_buf2[4]=disdata[3],disp_buf2[5]='-';
disp_buf2[6]='-', disp_buf2[7]='0';
disp_buf2[8]='0';
disp_buf2[9] =julidata[0]+0x30;
disp_buf2[10]=julidata[1]+0x30;
disp_buf2[11]=julidata[2]+0x30;
disp_buf2[12]='c',disp_buf2[13]='m';
disp_buf2[14]='*',disp_buf2[15]='*';
}
void display() 
{
uchar i;
lcd_wcom(0x80);
for(i=0;i<16;i++)
lcd_wdat(disp_buf1[i]);
lcd_wcom(0xc0);
for(i=0;i<16;i++)
lcd_wdat(disp_buf2[i]);
}
void int_t0() interrupt 1 using 1     //定时中断http://www.jiaoqb.com/
{
TH0=0x3c;
TL0=0xb0;
i++;
if(i== 10)
{
i=0;
     display();  //更新显示数据
}
}
void ChuShiHua()
{
IE = 0x82;  //开T0中断
TMOD = 0x10; //定时器1模式1,定时器0模式0
PX1 = 1;      //INT1高优先级18B20做温度补偿的超声波测距程序
PT0 = 0;     //T0  低级中断
IT1 = 0;      //INT1电平触发0
TR0 = 1;      //启动定时器T0http://www.jiaoqb.com/
wave= 0;
}
void Deng()
{
unsigned int i,j;
wave=0;
for (i = 0; i < 200; i++)
for (j = 0; j < 200; j++);
}
void FaShe()
{
IE  = 0; //关中断
wave= 0;
delay(80);
TH1 = 0;
TL1 = 0;  //计数器清零
wave=1;
TR1 = 1;  //启动计算器;   
delayus(125);
wave=0;
 delayus(300);
IE=0X86;
}
void Shou() interrupt 2 //外部中断INT1
{
IE = 0; //关中断
JuLi= 0;
TR1 = 0;         //关定时器1
Gao = TH1, Di  = TL1;
JuLi = JuLi | Gao, JuLi = JuLi << 8;
JuLi = JuLi | Di,JuLi = JuLi*17;
JuLi = JuLi/1000,julidata[0] = JuLi / 100;
julidata[1] = (JuLi - (julidata[0]*100))/10;
julidata[2] = JuLi, updata_disp();
IE = 0x82; //关int1中断,开显示中断http://www.jiaoqb.com/

main()
{
   display();  //更新显示数据
   chushi_display();
   ChuShiHua();
   while (1)
   {
 read_temp();//读取温度
 ds1820disp();//显示
 FaShe();
 Deng();  //数据送入显示缓冲区http://www.duankudp.com/
   }
}

关键字:18B20  温度补偿  超声波测距 引用地址:用18B20做温度补偿的超声波测距程序

上一篇:超声波水位测量控制系统C语言源程序
下一篇:超声波测距避障程序

推荐阅读最新更新时间:2024-03-16 14:37

一个简单的18B20程序
'////////////////////////////////////// '读取DS18B20温度数据,并在LCD上显示出来 '设计者 啊艺 '编译器BASCOM-AVR1.11.8.1 '////////////////////////////////////// $regfile = M16def.dat $crystal = 1000000 Config 1wire = Portb.7 '定义单总线器件的接口 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db
[单片机]
超声波测距模块的设计与实现
摘要:本文设计并实现了一个以MCS-51单片机为核心的超声波测距模块。该模块由超声波发射单元、超声波接收单元、温度测量单元、显示单元和ISP下载单元等组成,由单片机产生超声波的发射信号并对其传播时间进行测量,依据超声波在空气中的传播特性,换算出距离数据,从而实现测量距离的目的。设计中采用LM386作为超声波的发射驱动,采用集成芯片CX20106作为超声波接收单元,结构简洁,集成度高。通过实验表明,该模块性能可靠,能较准确地测出与障碍物之间的距离,达到了设计要求。 关键词:超声波测距;MCS-51单片机;LM386;CX20106 0 引言 在多数项目研发中,距离测量显得越来越重要,常用的测距方式主要有雷达测距、红外测距、激光测
[单片机]
<font color='red'>超声波测距</font>模块的设计与实现
超声波测距模块+AVR单片机控制程序
【超声波测距模块】-【机器人的耳朵】 #include avr/io.h #include avr/iom16.h #include util/delay.h int main(void) { DDRA=0x00; PORTA=0x00; //PA口初始化 DDRD=0xff; PORTD=0xff; //PD口初始化 char j,i; int h,u,l; while(1) { j=1; //激活while(j)循环 i=1; //激活while(i)循环 u=6000; //还原检测循环 PORTA&=(1 0); //PA0脚高电平 _delay_us(20); //延时20US
[单片机]
51单片机超声波测距程序代码
51单片机超声波测距程序代码 /超声波模块ME007显示程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include reg52.h //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x9
[单片机]
基于单片机的超声波测距仪的主要硬件电路
本文简要介绍了基于单片机的超声波测距仪的主要硬件电路。 随着检测技术研究的不断深入,对超声检测仪器的功能要求越来越高,单数码显示的超声检测仪测读会带来较大的测试误差。进一步要求以后生产的超声仪能够具有双显及内带有单板机的微处理功能。 传统的测距方式在某些特殊场合存在不可克服的缺陷。如液面测量、井下测量等受到很大的限制。利用超声波测距可解决这些问题,因此超声波测距技术在工业控制、勘探测量、机器人定位等领域得到了广泛应用。所谓超声波是指高于20KHZ的机械波,具有强度大、方向性好等特点。本系统选用M68HC08单片机为控制部件。 一、设计原理 当超声波从空气中垂直入射到汽油、木材、钢材时,几乎产生全反射,这样,
[单片机]
基于单片机的<font color='red'>超声波测距</font>仪的主要硬件电路
我的单片机超声波测距课程设计
制作出来的实物图如下: 电路原理图如下: 原理图 一、作品简介 以51单片机为核心,利用超声波传感器对障碍物进行距离测量并将结果发送到液晶显示屏上,并可以设定距离,当数据高于预警值时可以进行声光报警。 二、设计原理 超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。 三、功能说明 设计单片机最小系统,供电电路有上电指示功能,采用串口下载程序,USB供电,具有复位功能。采用超声波传感器,能够实现对障碍物距离的测量;采用液晶显示,能够对测量的距离进行显示。 有报警电路,能够实现对预警值的设置,同时当数据高于设定预警距离
[单片机]
我的单片机<font color='red'>超声波测距</font>课程设计
RS485接口一体化超声波测距模块
      一、模块简介:       该超声波测距模块采用STC11F04E单片机作处理器,工作电源:DC5V,工作电流20mA。测量数据输出方式为RS485输出,数据格式为标准的ASCII码,数据由:空格位(起始位)+百+十位+个位。工作方式有两种:一是连续测量方式;二是查询测量方式。           测量范围:36cm~450cm(盲区36cm)。 测量过程中,当接收不到障碍物反射的回波时,输出“C C C”, 当测量低于下限值(在盲区内)时显示“- - -”。测量结果由模块上的输出端口输出,输出方式为RS485输出。测量结果可通过电脑进行显示。模块使用RS485接口通讯,测量结果传送距离远,可以通过电脑采集
[嵌入式]
超声波测距系统的电路设计
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。 为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。 二、超声波测距原理 1、超声波发生器 为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类
[单片机]
<font color='red'>超声波测距</font>系统的电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved