基于ds18b20温度传感器的显示及报警系统设计内容摘要:

ms(tconv) 当 DS18B20 接收到温度转换命令后,开始启动转换。 转换完成后的温度值就以 16位带符号扩展的二进制补码形式存储在高速暂存存储器的第 2 字节。 单片 机 可通过单线接口读到该数据,读取时低位在前 、 高位在后,数据格式以 ℃ /LSB 形式表示。 温度值 格式如下: Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 LS Byte 23 22 21 20 21 22 23 24 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 MS Byte S S S S S 26 25 24 这是 12 位转化后得到的 12 位数据,存储在 DS18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 即可得到实际温度; 如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 即可得到实际温度。 格式 中, S 表示位。 对应的温度计算:当符号位 S=0 时,表示测得的温度植为正值, 直接将二进制位转换为十进制;当 S=1 时, 表示测得的温度植为负值, 先将补码变换为原码,再计算十进制值。 例如 +125℃ 的数字输出为 07D0H,+℃ 的数字输出为 0191H, ℃ 的数字输出为 FF6FH, 55℃ 的数字输出为FC90H。 DS18B20 完成温度转换后,就把测得的温度值与 RAM 中的 TH、 TL 字节内容 作比较,若 TTH 或 TTL, 则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。 因此,可用多只 DS18B20 同时测量温度并进行告警搜索。 在 64 位 ROM 的最高有效字节中存储有循环冗余校验码 (CRC)。 主机根据 ROM 的前 56 位来计算 CRC 值,并和存入 DS18B20 中的 CRC 值做比较,以判断主机收到的 ROM 数据是否正确。 温度采集电路 设计的温度采集电路如图 所示 : 0 R1 R0 1 1 1 1 1 — 10 — 图 温度采集电路图 LED 数码管的操作 LED 数码管,也叫 LED 数码显示器,由于 它具有很高的性能价格比、显示清晰、亮度高、使用方便、电路简单、寿命长等诸多优点,长期以来一直在各类电子产品和工程控制中得到非常广泛的应用。 LED 数码管的基本组成是半导体发光二极管,它是将若干个发光二极管,按照一定的笔段组合起来构成的一个整体。 LED 数码管能显示 0~ 9 十个数字及部份英文字母。 常见的八段 LED 数码管结构如图 所示。 图 数码管的内部结构 根据 8 个发光二极管的不同连接形式,可以将 LED 数码管分成共阳极和共阴极两种。 — 11 — (如图 所示 )。 图 LED 数码管共阳极和共阴极链接 如果加到各笔段对应发光二极管阳极上的代码不同,则就能控制 LED 数码管显示不同的字符和数字,这个代码称为段码。 通常将这个段码用单片机系统 中的一个字节进行存储,正好这个字节中的 8 个二进制位 (D D D D D D D D0),依次对应LED 数码管的 8 个笔段 dp、 g、 f、 e、 d、 c、 b、 a。 温度显示电路 显示电路采用 4 个共阴 极 LED 数码管,从 P0 口并行输出段码,用 ~ 四 个端口输出选择脉冲,控制数码管的点亮。 — 12 — 图 数码管显示电路 — 13 — 第 四 章 系统的软件设计 软件设计关键在于 DS18B20 的使用。 DS18B20 属于单线式器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议,来对读写 数据提出严格的时序要求,而STC89C52 单片机并不支持单线传输,因此必须采用软件的方法来模拟单线的协议时序。 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。 主程序 主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量的当前温度值,温度测量每 1s 进行一次。 这样可以在一秒之内测量一次被测温度,其程序流程见图 所示。 N Y Y Y N N Y N 图 主程序流程图 图 读温度流程图 读出温度子程序 初始化 1S 到。 初次上电 读出温度值,温度计算处理显示数据刷新 发温度转换开始命令 调用子程序 发 DS18B20复位命令 发跳转 ROM命令 发读取温度命令 读取操作, CRC校验 移入温度暂存器 9字节完。 CRC校验正确。 结束 — 14 — 读出温度子程序的主要功能是读出 RAM 中的 9 字节,在读出时需进行 CRC 校验,校验有错时不进行温度数据的改写。 其程序流程图如图 所 示。 图 温度转换流程图 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令,当采用 12 位分辨率时转换时间约为 750ms,在本程序设计中采用 1s 显示程序延时法等待转换的完成。 温度转换命令子程序流程图如上图,图 所示。 计算温度子程序 计算温度 子程序将 RAM 中读取值进行 BCD 码的转换运算,并进行温度值正负的判定,其程序流程图如图 所示。 图 计算温度流程图 图 显示数据刷新流程图 显示数据刷新子程序 开始 温度零下 ? 温度值取补码置“ — ”标志 计算小数位温度 BCD值 计算整数位温度 BCD值 结束 置“ +”标志 N Y 温度数据移入显示寄存器 十位数 0。 百位数 0。 十位数显示符号百位数不显示 百位数显示数据(不显示符号) 结束 N N Y Y 发 DS18B20 复位命令 发跳过 ROM 命令 发温度转换开始命令 结束 — 15 — 显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为 0 时将符号显示位移入下一位。 程序流程图如图 所示。 控制源程序 /****************此部分为 18B20 的驱动程序 *****************/ include include sbit D18B20=P3^7。 define NOP() _nop_() /* 定义空指令 */ define _Nop() _nop_() /*定义空指令 */ void TempDelay (unsigned char idata us)。 void Init18b20 (void)。 void WriteByte (unsigned char idata wr)。 //单字节写入 void read_bytes (unsigned char idata j)。 unsigned char CRC (unsigned char j)。 void GemTemp (void)。 — 16 — void Config18b20 (void)。 void ReadID (void)。 void TemperatuerResult(void)。 bit flag。 unsigned int idata Temperature。 unsigned char idata temp_buff[9]。 //存储读取的字节 , read scratchpad为 9 字节, read rom ID 为 8 字节 unsigned char idata id_buff[8]。 unsigned char idata *p,TIM。 unsigned char idata crc_data。 unsigned char code CrcTable [256]={ 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, — 17 — 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 1。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。