DS18B20温度传感器使用方法以及代码.(优选.)
DS18B20智能温度控制器(附软件程序)

DS18B20智能温度控制器DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、 DS1822 “一线总线”数字化温度传感器同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为± 2°C 。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V 的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
温度传感器ds18b20(c语言版)函数以及头文件

//读温度值(低位放 tempL;高位放 tempH;) float ReadTemperature(void)
{
float sdate;
unsigned char tempL,tempH;
unsigned int tt;
//*********************** **写一个字节**************************// void WriteOneChar(unsigned char dat);
//读温度值(低位放 tempL;高位放 tempH;) float ReadTemperature(void) ; #endif
if(tempH>0x7f)
//最高位为 1 时温度是负
{ tempL=~tempL;
//补码转换,取反加一
tempH=~tempH+1;
fg=0;
//读取温度为负时 fg=0
}
tt=tempL+tempH*256;
sdate=tt*0.0625;
return sdate;
}
//头文件 #ifndef _ds18b20_h_ #define _ds18b20_h_
void delay(unsigned char i);
//***********************************************************
//
延时子程序
//************************************************************ void delay1ms();
DS18B20温度传感器设计原理图及c程序代码

/*******************代码部分**********************//*************** writer:shopping.w ******************/ #include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}sbit DQ = P3^3;sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;uchar code Temp_Disp_Title[]={"Current Temp : "};uchar Current_Temp_Display_Buffer[]={" TEMP: "};uchar code Temperature_Char[8] ={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};uchar code df_Table[]=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};uchar CurrentT = 0;uchar Temp_Value[]={0x00,0x00}; uchar Display_Digit[]={0,0,0,0};bit DS18B20_IS_OK = 1;void DelayXus(uint x){uchar i;while(x--){for(i=0;i<200;i++);}}bit LCD_Busy_Check(){bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN=0;return result;}void Write_LCD_Command(uchar cmd) {while(LCD_Busy_Check());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void Write_LCD_Data(uchar dat){while(LCD_Busy_Check());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void LCD_Initialise(){Write_LCD_Command(0x01);DelayXus(5);Write_LCD_Command(0x38);DelayXus(5);Write_LCD_Command(0x0c);DelayXus(5);Write_LCD_Command(0x06);DelayXus(5);}void Set_LCD_POS(uchar pos){Write_LCD_Command(pos|0x80); }void Delay(uint x){while(--x);}uchar Init_DS18B20(){uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);DQ = 1;return status;}uchar ReadOneByte(){uchar i,dat=0;DQ = 1;_nop_();for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;}return dat;}void WriteOneByte(uchar dat) {uchar i;for(i=0;i<8;i++){DQ = 0;DQ = dat& 0x01;Delay(5);DQ = 1;dat >>= 1;}}void Read_Temperature(){if(Init_DS18B20()==1)DS18B20_IS_OK=0;else{WriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value[0] = ReadOneByte();Temp_Value[1] = ReadOneByte();DS18B20_IS_OK=1;}}void Display_Temperature(){uchar i;uchar t = 150, ng = 0;if((Temp_Value[1]&0xf8)==0xf8){Temp_Value[1] = ~Temp_Value[1];Temp_Value[0] = ~Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;ng = 1;}Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);Display_Digit[3] = CurrentT/100;Display_Digit[2] = CurrentT%100/10;Display_Digit[1] = CurrentT%10;Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';Current_Temp_Display_Buffer[10] = '.';Current_Temp_Display_Buffer[9] = Display_Digit[1] + '0';Current_Temp_Display_Buffer[8] = Display_Digit[2] + '0';Current_Temp_Display_Buffer[7] = Display_Digit[3] + '0';if(Display_Digit[3] == 0)Current_Temp_Display_Buffer[7] = ' ';if(Display_Digit[2] == 0&&Display_Digit[3]==0)Current_Temp_Display_Buffer[8] = ' ';if(ng){if(Current_Temp_Display_Buffer[8] == ' ')Current_Temp_Display_Buffer[8] = '-';else if(Current_Temp_Display_Buffer[7] == ' ')Current_Temp_Display_Buffer[7] = '-';elseCurrent_Temp_Display_Buffer[6] = '-';}Set_LCD_POS(0x00);for(i=0;i<16;i++){Write_LCD_Data(Temp_Disp_Title[i]);}Set_LCD_POS(0x40);for(i=0;i<16;i++){Write_LCD_Data(Current_Temp_Display_Buffer[i]);}Set_LCD_POS(0x4d);Write_LCD_Data(0x00);Set_LCD_POS(0x4e);Write_LCD_Data('C');}void main(){LCD_Initialise();Read_Temperature();Delay(50000);Delay(50000);while(1){Read_Temperature();if(DS18B20_IS_OK)Display_Temperature();DelayXus(100);}}。
ds18b20详解及程序

最近都在学习和写单片机的程序, 今天有空又模仿写了一个与DS18B20基于单总线通信的程序.DS18B20 数字温度传感器(参考:是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。
DS18B20 产品的特点:(1)、只要求一个I/O 口即可实现通信。
(2)、在DS18B20 中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃; (5)、数字温度计的分辨率用户可以从9 位到12 位选择。
将12位的温度值转换为数字量所需时间不超过750ms;(6)、内部有温度上、下限告警设置。
DS18B20引脚分布图DS18B20 详细引脚功能描述:1、GND 地信号;2、DQ数据输入出引脚。
开漏单总线接口引脚。
当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常太下高电平. 通常要求外接一个约5kΩ的上拉电阻.3、VDD可选择的VDD 引脚。
电压范围:3~; 当工作于寄生电源时,此引脚必须接地。
DS18B20存储器结构图暂存储器的头两个字节为测得温度信息的低位和高位字节;第3, 4字节是TH和TL的易失性拷贝, 在每次电复位时都会被刷新;第5字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新;第9字节是前面8个字节的CRC检验值.0 R1 R0 1 1 1 1 1MSB LSBR0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位.温度值分辨率配置表R1 R0 分辨率最大转换时间(ms)0 0 9bit (tconv/8)0 1 10bit (tconv/4)1 0 11bit 375(tconv/2)1 1 12bit 750 (tconv)4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值)12位分辨率时的两个温度字节的具体格式如下:低字节:2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3 2^-4高字节:其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用C语言, 直接将结果赋值给一个int变量即可).DS18B20 的使用方法:由于DS18B20 采用的是方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
DS18B20温度传感器 1602液晶显示

单片机轻松入门之十DS18B20温度传感器+1602液晶显示本文旨在介绍单片机入门的基础知识,为初接触或即将接触单片的新手提供一个入门指导。
本文章会陆续推出,隔几天一个章节。
所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境下的注释,希望对广大即将接触单片机的人有所帮助,如果有错误欢迎回帖指出与本人交流或QQ 联系(QQ:56)。
DS18B20数字温度传感器是由美国DALLAS公司生产的,体积小,使用方便,测温范围-55℃~+125℃,测温分辨率0.5℃,工作电压DC3-5V,不需要任何外围元件,采用SPI单线接口方式,在与微处理器连接时仅需要一条口线即可实现双向通讯,广泛适用于各种温度控制领域。
原理图如下:程序如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit RS=P3^0;sbit EN=P3^2;sbit RW=P3^1;sbit wela=P3^3;sbit DQ=P3^4;uchar i;uint num;uint shi,ge,xiaoshu;uchar code t0[]="The temperature ";uchar code t1[]=" is ";uchar code wendu[]="09";void delay(uint x){uint m,n;for(m=x;m>0;m--)for(n=10;n>0;n--);}void delay1(uint x){uint a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}/*****************液晶写指令***************/void write_com(uchar com){wela=1;P2=com;wela=0;RS=0;EN=0;RW=0;delay(10);EN=1;delay(10);EN=0;}/*****************液晶写数据指令***************/void write_date(uchar date){wela=1;P2=date;wela=0;RS=1;EN=0;RW=0;delay(10);EN=1;delay(10);EN=0;}/*****************液晶初始化指令***************/void init(){write_com(0x38);delay(20);write_com(0x0f);delay(20);write_com(0x06);delay(20);write_com(0x80);for(i=0;i<16;i++){write_date(t0[i]);delay(0);}write_com(0x80+0x40);for(i=0;i<16;i++){write_date(t1[i]);delay(0);}}/*************DS18B20温度读取模块*************/void tmpDelay(int u) //延时函数{while(u--) ;}void Init_DS18B20() //初始化ds1820{unsigned char x=0;DQ = 1; //DQ复位tmpDelay(8); //稍做延时DQ = 0; //单片机将DQ拉低tmpDelay(80); //精确延时大于 480usDQ = 1; //拉高总线tmpDelay(14);x=DQ; //稍做延时后,如果x=0则初始化成功 x=1则初始化失败tmpDelay(20);}unsigned char ReadOneChar() //读一个字节{unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;tmpDelay(4);}return(dat);}void WriteOneChar(unsigned char dat) //写一个字节{unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;tmpDelay(5);DQ = 1;dat>>=1;}}unsigned int Readtemp() //读取温度{unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器a=ReadOneChar(); //连续读两个字节数据b=ReadOneChar();t=b;t<<=8;t=t|a; //两字节合成一个整型变量tt=t*0.0625; //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度t= tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
DS18B20温度传感器详细注解及驱动程序解析

DS18B20独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。
测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
工作电源:3.0~5.5V/DC(可以数据线寄生电源)在使用中不需要任何外围元件。
测量结果以9~12位数字量方式串行传送。
如果使用51单片机的话,那么中间那个引脚必须接上4.7K~10K的上拉电阻,否则,由于高电平不能正常输入/输出,要么通电后立即显示85℃,要么用几个月后温度在85℃与正常值上乱跳。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相符合ROM 55H对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。
用于确定挂接在同一总线上DS1820 的个数和识别64 位ROM 地址。
为搜索ROM FOH操作各器件作好准备。
跳过ROM CCH 忽略64 位ROM 地址,直接向DS1820 发温度变换命令。
告警搜索ECH 执行后只有温度超过设定值上限或下限的片子才做出响应。
RAM命令启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75m温度变换44Hs)。
结果存入内部第0、1字节RAM中。
1、复位操作复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
DS18B20实现测温功能
题目:室内温度检测系统<一> 实验要求:1. 用温度传感器DS18B20实现能检测室内环境温度(-10 o C~40o C),要求用2位或多位LED 显示;2. 要求能有报警功能,当温度超过报警上限时要能报警,报警上限要能通过键盘设定;3. 自己制作电路板。
(可考虑留有上传温度数据的接口)<二> 设计思想和说明:室内温度检测系统是由AT89C51单片机和温度传感器DS18B20和实现对温度检测。
由DS18B20将测得的温度通过DQ端传给单片机,再通过单片机在LED上显示,完成测温功能。
<三>器件清单器件名称数量AT89C51单片机 1温度传感器DS18B20 14位LED数码显示器 1晶振11.0592 Mhz 174LS245 1蜂鸣器 1三极管2N3904 5按钮 533 pf电容 210 uf电容 14.7k电阻710k电阻 50.1k电阻 11 k电阻 45V电源 1<四>硬件原理图<五>硬件原理图与其软件配合介绍DS18B20的DQ端与单片机的P2.0口相连,进行数据传送。
DSl8820内部结构主要由4部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
根据DSl8820的通信协议,主机控制DSl8820完成温度转换必须经过3个步骤:每一次读写之前都要对其进行复位,复位成功后发送1条ROM指令,最后发送RAM指令,这样才能对DSl8820进行预定的操作。
复位要求主CPU将数据线下拉500μs,然后释放,DSl8820收到信号后等待16~60μs左右,后发出60~240μs的存在低脉冲,主CPU收到此信号表示复位成功。
由于DSl8820采用的是单线进行控制与读取数据,因此对操作的时序要求非常严格,否则由于时序不匹配,将无法完成对器件的正确操作。
P0口与4位LED显示的“字型码”端相连,P1口的低四位与4位LED显示的“位”选择相连,实现将从DS18B20中读取的数据显示出来。
【最新编排】DS18B20的使用方法和注意事项
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出地-种改进型智能温度传感器。
与传统地热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单地编程实现9~12位地数字值读数方式。
可以分别在93.75 ms和750 ms内完成9位和12位地数字量,并且从DS18B20读出地信息或写入DS18B20地信息仅需要-根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接地DS18B20供电,而无需额外电源。
因而使用DS18B20可使系统结构更趋简单,可靠性更高。
他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大地改进,给用户带来了更方便地使用和更令人满意地效果。
DS18B20简介(1)独特地单线接口方式:DS18B20与微处理器连接时仅需要-条口线即可实现微处理器与DS18B20地双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:+3.0~ +5.5 V。
(4)测温范围:-55 ~+125 ℃。
固有测温分辨率为0.5 ℃。
(5)通过编程可实现9~12位地数字读数方式。
(6)用户可自设定非易失性地报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟-地三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
单线(1-wire)技术该技术采用单根信号线,既可传输时钟,也能传输数据,而且是双向传输!适用于单主机系统,主机能够控制-个或多个从机设备,通过-个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能释放该线,而让其他设备使用。
单线通常要求外接-个5K地上拉电阻,这样当该线空闲时!其状态为高电平!主机和从机之间地通讯分三个步骤:初始化单线器件!识别单线器件和单线数据传输!单线1-wire协议由复位脉冲,应答脉冲,写0,写1,读0,读1这几种信号类型实现,这些信号中除了应答脉冲其他都由主机发起!并且所有指令和数据字节都是低位在前!芯片图自己找!!!NC:1、2、6、7、8脚空悬空不使用VDD:可选电源脚,电源电压范围3--5.5V,当工作于寄生电源时,此脚必须接地DQ:数据输入/输出脚。
(完整版)读取DS18B20温度传感器的64位ID号方法及程序
#include <reg52.h>#define uchar unsigned char#define uint unsigned int/********************************************************************/ sbit DQ = P2^2; //温度传感器信号线sbit rs = P3^5; //LCD数据/命令选择端(H/L)位声明sbit lcden = P3^4; //LCD使能信号端位声明/********************************************************************/ //uint temp; //定义整型的温度数据//float f_temp; //定义浮点型的温度数据//uint warn_11 = 270; //定义温度设定值,是温度值乘以10后的结果//uint warn_12 = 250; //定义温度下限值//uint warn_h1 = 300; //定义温度上限值/********************************************************************/ void delay(uint z); //延时函数void DS18B20_Reset(void); //DQ18B20复位,初始化函数bit DS18B20_Readbit(void); //读1位数据函数uchar DS18B20_ReadByte(void); //读1个字节数据函数void DS18B20_WriteByte(uchar dat); //向DQ18B20写一个字节数据函数void LCD_WriteCom(uchar com); //1602液晶命令写入函数void LCD_WriteData(uchar dat); //1602液晶数据写入函数void LCD_Init(); //LCD初始化函数void Display18B20Rom(char Rom); //显示18B20序列号函数/**********************************************//* 主函数 *//**********************************************/void main(){ uchar a,b,c,d,e,f,g,h;LCD_Init();DS18B20_Reset();delay(1);DS18B20_WriteByte(0x33);delay(1);a = DS18B20_ReadByte();b = DS18B20_ReadByte();c = DS18B20_ReadByte();d = DS18B20_ReadByte();e = DS18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte();LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);}/***************************************************//* 延时函数:void delay() *//* 功能:延时函数 *//***************************************************/void delay(uint z)//延时函数{uint x,y;for( x = z; x > 0; x-- )for( y = 110; y > 0; y-- );}/***************************************************//* DS18B20函数:void DS18B20_Reset() *//* 功能:复位18B20 */ /***************************************************/void DS18B20_Reset(void)//DQ18B20复位,初始化函数{uint i;DQ = 0;i = 103;while( i > 0 ) i--;DQ = 1;i = 4;while( i > 0 ) i--;}/***************************************************//* DS18B20函数:void DS18B20_Readbit() *//* 功能:读1个字节数据函数 *//***************************************************/bit DS18B20_Readbit(void) //读1位数据函数{uint i;bit dat;DQ = 0;i++; //i++起延时作用DQ = 1;i++;i++;dat = DQ;i = 8;while( i > 0 )i--;return( dat );}/***************************************************//* DS18B20函数:void DS18B20_ReadByte() *//* 功能:读1个字节数据函数 */ /***************************************************/uchar DS18B20_ReadByte(void) //读1个字节数据函数{uchar i,j,dat;dat = 0;for( i = 1; i <= 8; i++ ){j = DS18B20_Readbit();dat = ( j << 7 ) | ( dat >> 1 );}return(dat);}/***************************************************//* DS18B20函数:void DS18B20_WriteByte() *//* 功能:向DQ18B20写一个字节数据函数 *//***************************************************/void DS18B20_WriteByte(uchar dat) //向DQ18B20写一个字节数据函数{uint i;uchar j;bit testb;for( j=1; j<=8; j++){testb = dat&0x01;dat= dat>>1;if(testb) //写1{DQ = 0;i++;i++;DQ = 1;i = 8;while(i>0)i--;}else{DQ = 0; //写0i = 8;while(i>0)i--;DQ = 1;i++;i++;}}}/***********************************************//* LCD函数:void LCD_WriteCom() *//* 功能:向LCD写入命令 *//***********************************************/void LCD_WriteCom(uchar com){rs = 0;P0 = com;delay(5);lcden = 0;delay(5);lcden = 1;delay(5);lcden = 0;}/***********************************************//* LCD函数:void LCD_WriteData(uchar dat) *//* 功能:向LCD写入数据 *//***********************************************/void LCD_WriteData(uchar dat){rs = 1; //选择LCD为写入数据状态lcden = 0;P0 = dat; //将待写入数据放到总线上delay(5);lcden = 1; //给LCD使能端一个脉冲delay(5); //信号将之前放到总线上lcden = 0; //的数据写入LCDdelay(5);}/***********************************************//* LCD函数:void LCD_Init() */ /* 功能:初始化LCD,设定LCD的初始状态 *//***********************************************/void LCD_Init(){LCD_WriteCom(0x38); //LCD显示模式设定delay(15);LCD_WriteCom(0x08); //关闭LCD显示delay(3);LCD_WriteCom(0x01); //LCD显示清屏delay(3);LCD_WriteCom(0x06); //设定光标地址指针为自动加1delay(3);LCD_WriteCom(0x0c); //打开LCD显示,但不显示光标}/**********************************************//* */ /* 显示18B20序列号 *//* *//**********************************************/void Display18B20Rom(char Rom){uchar h,l;l = Rom & 0x0f; //取低4位h = Rom & 0xf0; //取高4位h >>= 4;if( ( h >= 0x00 )&&( h <= 0x09 ) )LCD_WriteData(h+0x30); //取ASCII码elseLCD_WriteData(h+0x37); //取ASCII码if( ( l >= 0x00 )&&( l <= 0x09 ) )LCD_WriteData(l+0x30); //取ASCII码elseLCD_WriteData(l+0x37); //取ASCII码}。
第31课温度传感器DS18B20详解
工作时序分析及驱动函数DS1B20初始化时序图分析①首先给DQ赋值为低电平。 ②延时600μs(该时间范围可以在(480~960μs) ③接着给DQ赋值为高电平。 ④延时75μs。超过规定延时的15~60μs,准确的检测到DS18B20 的存在脉冲。 ⑤这时可以检测DQ的高低电平,如果为低电平,则表示DQ存在, 存在脉冲会持续60~240μs。高电平则复位失败。 ⑥从第4步开始,延时最小480μs。这时初始化过程结束。 ⑦最后给DQ赋值为高电平。
感谢您的关注
ds18b20引脚和封装ds18b20当分辨率为91011和12位时分别对应与05025012500625的温度增量ds18b20rom操作命令1读rom33h2匹配rom55h3跳过romcch4搜索romf0h5报警搜索romech功能命令1写暂存寄存器命令4eh2读暂存寄存器指令beh3复制暂存寄存器命令48h4启动温度转换命令44h5回传eeprom内容指令b8h6读电源类型指令b4h如何用ds18b20来采集温度单个ds18b20发命令顺序第一步
第31课温度传感器DS18B20 详解
如何用DS18B20来采集温度
访问一个DS18B20必须经过初始化、ROM命令和功能命令这三个步骤 。 单个DS18B20发命令顺序 第一步: DS18B20初始化----跳过ROM命令(CCH)----启动温度转换命令(44H) 第二步: DS18B20初始化----跳过ROM命令(CCH)----读暂存寄存器指令(BEH)
DS18B20写数据时序图分析
①首先给DQ赋值低电平。 ②延时确定时间15us。 ③对DQ赋值,向DS18B20写入相应的高低 电平。 ④再延时时间为45us。 ⑤最后给DQ置高电平。
DS18B20读数据时序分析