自制51单片机常用头文件(DS18B20)

发布者:科技先锋最新更新时间:2016-07-15 来源: eefocus关键字:51单片机  头文件  DS18B20 手机看文章 扫描二维码
随时随地手机看文章
/*--------------------------------------------------------------------------

TEMPERATURE.H

The user function is C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __TEMPERATURE_H__
#define __TEMPERATURE_H__

#define uchar unsigned char
#define uint unsigned int

sbit DQ = P3^3;     // ds18b20与单片机连接口

uchar data Tp[8];   // 温度显示数据

/******************************ds1820程序

***************************************/
/***************************************************** 
 函 数 名:void Delay_DS(uint useconds)
 功    能:DS18B20延时1微秒
 说    明:DS18B20时序延时
 入口参数:useconds 
 返 回 值:无  
 *****************************************************/
//延时 
void Delay_DS(uint useconds)//延时1微秒
{
  while (useconds--);
}

/***************************************************** 
 函 数 名:void Ow_Reset()
 功    能:DS18B20复位
 说    明:DS18B20使用时先要复位
 入口参数:无 
 返 回 值: 
 *****************************************************/
void Ow_Reset()
{  
 DQ = 1;          // DQ复位
 Delay_DS(4);     // 延时
 DQ = 0;          // DQ拉低
 Delay_DS(100);   // 精确延时大于480us
    DQ = 1;          // 拉高
 Delay_DS(40);  

/***************************************************** 
 函 数 名:uchar Read_byte()
 功    能:从 1-wire 总线上读取一个字节
 说    明:读总线上的数据有严格的时序
 入口参数: 
 返 回 值:value  
*****************************************************/  
uchar Read_byte()

 uchar i = 0;
 uchar value = 0;

 for (i=8; i>0; i--)
 {  
  DQ = 0;    // 给脉冲信号
  value >>= 1;
  DQ = 1;    // 给脉冲信号
  if(DQ)
  value |= 0x80;
  Delay_DS(10);
 }

   return (value);
}

/***************************************************** 
 函 数 名:void Write_Byte()
 功    能:向 1-WIRE 总线上写一个字节
 说    明:写总线上的数据有严格的时序
 入口参数:val 
 返 回 值:无  
*****************************************************/
void Write_Byte(uchar val)
{
    uchar i = 0;

    for (i=8; i>0; i--)
    { 
  DQ = 0;
  DQ = val & 0x01;
  Delay_DS(10);
  DQ = 1;
  val >>= 1;
   }
}

/***************************************************** 
 函 数 名:void Read_Temperature()
 功    能:读温度并放入显示数组中
 说    明:
 入口参数:xx,yy 
 返 回 值:无  
*****************************************************/  
void Read_Temperature() 
{
 uchar a,b;
 uchar tflag;                // 温度正负标志
 uint tvalue;                // 温度值
 
 Ow_Reset();    
 Write_Byte(0xcc);           // 跳过读序列号*
 Write_Byte(0x44);           // 启动温度转换
 
 Ow_Reset();    
 Write_Byte(0xcc);           // 跳过读序列号 
 Write_Byte(0xbe);           // 读取温度 
 
 a = Read_byte();            // 读出温度低8位
 b =  Read_byte();            // 读出温度高8位
 tvalue = b;
 tvalue <<= 8;
 tvalue = tvalue | a;

   if( tvalue < 0x0fff)
   {
       tflag = 0;
 }
    else
    {
      tvalue = ~tvalue + 1;
   tflag = 1;
    }

 tvalue = tvalue*(0.625);      // 温度值扩大10倍,精确到1位小数

 Tp[2] = tvalue%1000/100+0x30; // 十位数
 Tp[3] = tvalue%100/10+0x30;   // 个位数
 Tp[4] = 0x2e;                 // 显示小数点
 Tp[5] = tvalue%10+0x30;       // 显示温度小数位
 Tp[6] = 0x01;                 // 显示自定义字符
 Tp[7]= 0x43;                  // 显示字符"C"

 if (tflag == 0)
 {
  Tp[1] = 0x20;             // 正温度不显示符号
 }
 else
 {
  Tp[1] = 0x2d;             // 负温度显示负号:-
 }
 if (Tp[2] == 0x30)
 {
  Tp[2] = 0x20;             // 如果十位为0,不显示
 }
}

/***************************************************** 
 函 数 名:void Adjust_Res()
 功    能:温度分辨率调整
 说    明:此函数可以对温度的显示进行精度调节.
 入口参数:res 
 返 回 值:无  
 *****************************************************/
void Adjust_Res(char res)   // res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
                            //               0.5, 0.25, 0.125   
{
 Ow_Reset();             // 复位
 Write_Byte(0xcc);       // 跳过Rom
 Write_Byte(0x4e);       // 写暂存器

 Write_Byte(0x02);       // 写TH 
 Write_Byte(0x01);       // 写TL
 Write_Byte(res);        // 温度转换分辨率设置

 Ow_Reset();             // 复位
 Write_Byte(0xcc);       // 跳过Rom 
 Write_Byte(0x48);       // 把暂存器内容写到EPRam中
}

#endif

关键字:51单片机  头文件  DS18B20 引用地址:自制51单片机常用头文件(DS18B20)

上一篇:自制51单片机常用头文件(LCD1602)
下一篇:自制51单片机常用头文件(st7920串行方式)

推荐阅读最新更新时间:2024-03-16 15:00

PIC+DS18B20+LCD设计及程序过程中的问题
1、mcu:pic18f25k22 2、由于ds18b20的程序前面文章已经写过,所以暂不概述; 3、液晶显示采用sms太阳人的液晶显示屏; 4、实物图如下: 5、使用xc编译完成,调试过程中,当使用static bit 的时候不能进行函数传参,一直很头疼,最后使用强制类型转换;给变量定义绝对地址使用@这个特殊符号,具体写法:unsigned char a @ 0x40;当然这只是个简单的。在定义bit类型时,注意bit的类型只有全局和静态两种 否则会报错 6、使用pickit3烧写的程序,使用时注意打开项目属性,把power的对钩打上 电源3.3-5.5v自己订喽,其实都可以 当然越低越好, 7、程序就不留了 73
[单片机]
PIC+DS18B20+LCD设计及程序过程中的问题
80C51单片机实现专用寄存器位寻址的设计方案
80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0。 位寻址的范围,也就是哪些部份可以进行位寻址: 1、我们在第十二课学习51单片机的存储器结构时,我们已知道在单片机的内部数据存储器RAM的低128单元中有一个区域叫位寻址区。它的单元地址是20H-2FH。共有16个单元,一个单元是8位,所以位寻址区共有128位。这128位都单独有一个位地址,其位地址的名字就是00H-7FH。 这里就有一个比较麻烦的问题需要大家理解清楚了。我们在前面的学习中00H、01H。。。。7FH等等,所表示的都是一个字节(或者
[单片机]
80C<font color='red'>51单片机</font>实现专用寄存器位寻址的设计方案
msp430如何选择头文件?怎么添加?
  使用iar,如果没有头文件,编译肯定通不过,更加不用说继续设计了,本人使用IAR进行msp430开发,选择原因是因为ccs所需内存太大了,keil已经无法满足MSP430的某些功能了,对于IAR集成开发环境,我们从事一个项目开发,首先就是要添加头文件,头文件相信大家都不陌生,使用C语言开发的时候我们见到过无数的 “#include《》”和“#include”都可以添加头文件,说明一下:放在自己工程目录下的头文件要用#include “msp430g2553.h” ,系统目录下的头文件才用#include《iomsp430g2553.h》,当然你自定义的头文件可以在系统头文件库里面的。   再次使用时新版本的IAR5.31时
[单片机]
msp430如何选择<font color='red'>头文件</font>?怎么添加?
基于单片机DS18B20温度报警系统 无线蓝牙显示
一、系统方案 随着科学技术的不断发展带动着电子行业的地位越来越重,现在电子产品几乎在社会的各个领域都可以见到。这些技术的发展有效的带动着社会生产力的发展和信息化的提高,同时电子产品也越来越智能。 本设计采用AT89C51单片机为主控芯片,采用数字型防水温度传感器DS18B20制作温度检测报警器,通过四位数码管显示温度值,系统设立几个按键,可以通过按键进行设置温度的上、下限值,当所采集温度超过设定值时,系统会控制蜂鸣器和对应LED发出声光报警。这个设计简单、成本低、具有实用性。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是串口初始化: void Uart_init() { TMOD=0x20;//定时器0工作
[单片机]
基于单片机<font color='red'>DS18B20</font>温度报警系统 无线蓝牙显示
MCS-51单片机寻址方式总结
MCS-51单片机指令系统共使用7中寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址等。
[单片机]
MCS-<font color='red'>51单片机</font>寻址方式总结
51单片机-74HC595移位寄存器
1.74HC595芯片介绍 74HC595芯片是一个串行输入,并行输出设备。其内部包括一个8位移位寄存器、一个存储器以及三态输出门电路,其中移位寄存器和存储器都有相互独立的时钟,每当移位寄存器输入时钟SHCP上升沿来临之时,数据被移出。 1.1.引脚定义 引脚定义,怎么命名,并没有个统一的规则,所以每个人在绘制芯片引脚图时,根据个人习惯命名可能都不一样(如:14号引脚(DS/SER),10号引脚(MR/SCLR),11号引脚(SHCP/SCK),12号引脚(STCP/RCK)等);虽然命名可能不一样,但引脚的功能确是一样; 1.2.工作原理 工作方式1:将DS的数据,通过SHCP产生上升沿,一位位的移入移
[单片机]
<font color='red'>51单片机</font>-74HC595移位寄存器
51单片机与GPS串口通信
最近在考研调剂没有学校要, 找工作又找不到, 快崩溃了。 刚想找点乐子,忘掉烦恼。开了一下自己的工具箱,发现以前买了一块二手的车载GPS,因为一直没有资料就放在那没有用。 仔细看了一下GPS发现芯片的LOGO和型号还是看得出来的,这是一块用了索尼CXD2931R作为接收GPS信号的芯片,本来想到网上看看有没有现成的作品,可是很遗憾没能找到(可能已经别淘汰了),没办法只能到ALLDATASHEET上下了这份芯片的手册, 看了下手册,发现sony的这款GPS芯片很高档呀:集成32位处理器、DSP、RAM和ROM的容量也很大(怪不得GPS价格这么贵)。 原来GPS使用串口来给主机发送信息的,这块GPS的通信速
[单片机]
51单片机教程:单片机并行口结构
看一下图1,它是8031单片机管脚的说明,在P1.0旁边有P1.1,P1.2….P1.7,它们是否都能让灯亮呢?除了以P1开头的外,还有以P0,P2,P3开头的,数一下,一共是32个管脚,前面我们以学过7个管脚,加上这32个这39个了。它们都以P字开头,只是后面的数字不一样,它们是否有什么联系呢?它们能不能都让灯亮呢?在我们的实验板上,除了P10之外,还有P11 - P17都与LED相连,下面让我们来做一个实验,程序如下: MAIN: MOV P1,#0FFH LCALL DELAY MOV P1,#00H LCALL DELAY LJMP MAIN DELAY:MOV R7,#250 D1: MOV R6,#250
[单片机]
<font color='red'>51单片机</font>教程:单片机并行口结构
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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