带小数点DS18B20程序

发布者:忙中取乐最新更新时间:2012-10-20 来源: 21ic 关键字:DS18B20  临时变量  延时函数 手机看文章 扫描二维码
随时随地手机看文章
#include 
#define uchar unsigned char
sbit DQ=P2^0;       //数据传输线接单片机的相应的引脚
unsigned char tempL=0;    //临时变量低位(无符号字符变量)
unsigned char tempH=0;   //临时变量高位
unsigned int tempa;      //温度值(整型变量)
uchar display_data[4]={0};
void DS18_delay(int useconds)//延时函数
 {
 int s;
 for (s=0; s480ms)
   DQ=1;             //拉高数据线
   DS18_delay(3);         //等待(15~60ms) 等待存在脉冲
    x=DQ;  //获得存在信号(用于判断是否有器件)
    DS18_delay(25);  // 等待时间隙结束
    return(x);  //返回存在信号,0 = 器件存在, 1 = 无器件
}
ReadOneChar(void)//读一个字节
{
 unsigned char i=0;   
 unsigned char dat=0;
    for (i=8;i>0;i--)    
  {
   DQ=1;
      DS18_delay(1);
      DQ=0;      
      dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
      DQ=1;
      if(DQ)
      dat|=0x80;
      DS18_delay(4);
  }
    return(dat);
}
WriteOneChar(unsigned char dat)//有参函数,功能是"写",而写的内容就是括号内的参数
{ 
 unsigned char i=0;   
 for(i=8;i>0;i--)   
 {
  DQ=0;     
  DQ=dat&0x01;
  DS18_delay(5);
  DQ=1;
  dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
 }
 DS18_delay(4);
}
unsigned int ReadTemperature(void)//返回读取的温度.
{  
 Init_DS18B20();   //初始化,调用初始化函数
 WriteOneChar(0xcc);    //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)
 WriteOneChar(0x44);   //启动温度转换,调用写函数,写0x44指令码(启动温度转换)
 DS18_delay(125);       //转换需要一点时间,延时
 Init_DS18B20();    //初始化,调用初始化函数
 WriteOneChar(0xcc);    //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号?
 WriteOneChar(0xbe);   //调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位)
 tempL=ReadOneChar();   //读出温度的低位LSB
 tempH=ReadOneChar();   //读出温度的高位MSB  
   tempa=((tempH*256)+tempL)*6.25;  //温度转换,扩大100返回
 //DS18_delay(10);
 //tempa=tempL+tempH;
 return(tempa);//运算结果返回到函数 
}
void display()//显示函数
{
  unsigned char i,j,k=0x80;
  unsigned char code dis[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};
  for(i=0;i<4;i++)
   {
    P2=0x0f;
    if(i==1)
     P0=dis[display_data[i]]+0x80;
    else
     P0=dis[display_data[i]];
    P2=k;
    k=k>>1;
    for(j=250;j>0;j--);
   }
   P2=0x0f;
}
void main()
{
 
 unsigned int temp;
 uchar i;
 while(1)
 {
  temp=ReadTemperature(); 
  display_data[0]=temp/1000;
  display_data[1]=(temp/100)%10;
  display_data[2]=(temp/10)%10;
  display_data[3]=temp%10; 
  for(i=0;i<250;i++) display();
 }
}
关键字:DS18B20  临时变量  延时函数 引用地址:带小数点DS18B20程序

上一篇:单片机控制舵机的C51程序
下一篇:用单片机制作简单计算器的源程序

推荐阅读最新更新时间:2024-03-16 13:10

数显温度计设计电路图大全(DS18B20/89S51单片机/液晶)
数显温度计设计电路图(一):液晶显示的数字式电脑温度计电路 如图为液晶显示的数字式电脑温度计电路。该八段式四位LCD显示器,内置驱动器,串行数据传送,使用方便。 液晶显示的数字式电脑温度计电路 数显温度计设计电路图(二) 介绍一种具有简单人工智能的温度控制电路,使用该电路进行温度控制时,只需将开关打在2的位置,通过设定控制温度,并通过3位半数显表头所显示的温度值,即可精确地控制温度,使得温控操作变得十分方便。LM35是一种内部电路已校准的集成温度传感器,其输出电压与摄氏温度成正比,线性度好,灵敏度高,精度适中.其输出灵敏度为10.0MV/℃,精度达 0.5℃.其测量范围为-55—150℃。在静止温度中自热效应低.工作电压较
[单片机]
数显温度计设计电路图大全(<font color='red'>DS18B20</font>/89S51单片机/液晶)
基于射频模块nRF905的粮库无线温湿度监控系统
  引言   温湿度是影响粮食仓储过程中品质好坏的主要因素。目前我国许多粮食仓储单位仍采用测温仪器与人工抄录、管理相结合的传统方法,这不仅效率低,而且往往由于判断失误和管理不力造成局部或大范围粮食霉变的现象时有发生。   本文介绍采用n RF 905 射频 模块、多个DS18B20构成的测温网络、湿度 传感器 HS1101组成一种粮库无线全数字温湿度监控系统,彻底摆脱了传统的人工抄录方法,能实时检测粮仓中的温湿度,并根据所测的数据控制空调器、除湿机等外部设备的运行,确保粮仓内合适的温湿度环境,该设计具有简单可靠和灵活方便的特点。   硬件设计   系统硬件结构由两个部分组成:中央监控系统CMS和多个远程终端节点RT
[单片机]
C51---13 DS18B20温度传感器
DS18B20介绍 引脚及电路 内部结构图 存储器的结构 单总线介绍 单总线电路规范 单总线时序结构❗ DS18B20操作流程 DS18B20数据帧 温度存储格式 DS18B20温度读取✨ 在LCD上显示温度 代码 main.c #include REGX52.H #include LCD1602.h #include DS18B20.h #include Delay.h float T; void main() { DS18B20_ConvertT(); //上电先转换一次温度,防止第一次读数据错误 Delay(1000); //等待转换完成
[单片机]
C51---13 <font color='red'>DS18B20</font>温度传感器
使用AVR来驱动MAXIN的DS18B20
我最近正在研究使用AVR来驱动MAXIN的DS18B20,琢磨了几天,终于把它的驱动程序写好了. 使用IAR C++编译器 #ifndef DS18B20_H #define DS18B20_H /****************************************只需在源程序里定义以下宏 #define seDDS() (seDB0()) #define clDDS() (clDB0()) #define seDS() (sePB0()) #define clDS() (clPB0()) #define GetDS() (GetPB0()) **********************************
[单片机]
AVR 单个DS18B20温度读取程序(可测负温度)
使用方法: 把两个文件放入工程,需要温度时调用DS18B20_ReadTemperature,返回值就是温度. DS18B20.h /****** AVR 单个DS18B20温度读取程序 ****** * 版本.........: 1.0 * 目标.........: AVR * 文件名.......: DS18B20.h * 编译器.......: IAR for AVR V5.5 *****************************************/ #ifndef __DS18B20_H__ #define __DS18B20_H__ #include #include delay.h #define
[单片机]
DS18B20-Onewire Bus-单总线 单片机读取温度
DS18B20,单片机,11.0592MHZ /pre pre name= code class= cpp #ifndef __DELAY_H__ #define __DELAY_H__ /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ vo
[单片机]
DS18b20同PIC单片机通讯源程序
ORG PIC54 GOTO MAIN ORG 0 ;---------------------- ;---------------------------- DELAY22 MOVLW D'200' ; DELAY 2*250=500mS MOVWF COUNT1 DE32 MOVLW D'250' ; 8*250=2mS MOVWF COUNT2 DE42 NOP ; 1+2+1=5uS DECFSZ COUNT2,1 GOTO DE42 DECFSZ COUNT1,1 G
[单片机]
AT89C52单片机与DS18B20的接口电路及源代码
本文将介绍51单片机AT89C52与温度传感器芯片DS18B20构成测温系统,并提供源程序供读者参考.其测量的温度精度达到0.1度,测量的温度的范围在-20度到+50度之间,用4位数码管显示出来。 硬件电路原理图 图2 AT89S52与DS18B20组成的测温系统原理图 工作原理 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20产品的特点 (1)、只要求一个I/O口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任
[单片机]
AT89C52单片机与<font color='red'>DS18B20</font>的接口电路及源代码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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