




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子设计实验报告专 业 计 算 机 科 学 与 技 术 指导教师 董双元 学生组合 谢军 窦华华 葛昕 设计题目 采用 DS18B20 传感器的数字温 度计设计 2004 年 5 月 10 日目录0采用 DS18B20 温度传感器的数字温度计设计目 录基于 DS18B20 温度传感器的数字温度计设计 1基于 DS18B20 温度传感器的数字温度计设计 1摘要: .1关键字: .1The conception of the numerical thermometer based on DS18B20 11 引言 .22 总体设计 .22.1 方案论证 22.2 总体设计 33 硬件设计 .33.1 单片机系统 33.2 温度传感器模块 43.3 存储模块 73.4 液晶显示模块 93.5 串口通信模块 113.6 电源模块 124 软件设计 .134.1 主程序流程 134.2 DS18B20 模块程序设计 .134.3 HS1602 驱动程序设计 .164.4 AT24C08 存储模块程序设计 184.5 RS-232-C 串口通信模块程序设计 195 测试及结果分析 .226 附录 .237 参考资料 .24基于 DS18B20 温度传感器的数字温度计0采用 DS18B20 温度传感器的数字温度计设计谢军 窦华华 葛昕(河南科技大学计算机系)摘要:本文介绍了一种采用 DS18B20 的数字温度计设计方案。方案利用 AT89S52 单片机控制DS18B20 进行数据采集并由 HS1602 液晶显示模块显示结果,另外,采集结果可由 RS-232-C 接口送入计算机显示并存储。按键控制实现过界报警温度设定和实时监控,利用 AT24C08 芯片进行存储,实现温度测量存储与再现。关键字:温度采集,存储再现,过界报警,串行通信The conception of the numerical thermometer based on DS18B20Zhou Yanhua,Wang Xiaobin,Zhou Huanjun(Computer Science Department,HuBei Normal University)Abstract: In this page,we introduced a conception of the numerical thermometer based on DS18B20. The conception makes use of AT89S52 control DS18B20 to carry on the data collection,and displays the result use the HS1602 liquid crystal display module. Moreover, the result can be sent into the computer by the interface of RS-232- C to display and store. The key control carries out the temperature setting of over the boundary to alarm,and real-time monitoring. And makes use of the chip of AT24C08 carries on the storage, and carrying out the temperature measurement storage and reappearing.Keywords: Temperature collect, Storing to reappear, Over the boundary to alarm, Serial communication基于 DS18B20 温度传感器的数字温度计11 引言随着电子技术的发展,人们的生活日趋数字化,多功能的数字温度计可以给我们的生活带来很大的方便;支持“一线总线”接口的温度传感器简化了数字温度计的设计,降低了成本;以美国MAXIM/DALLAS 半导体公司的单总线温度传感器 DS18B20 为核心,以 ATMEL 公司的 AT89S52为控制器设计的 DS18B20 温度控制器结构简单、测温准确、具有一定控制功能的智能温度控制器。2 总体设计2.1 方案论证2.1.1 温度传感器方案一:采用热敏电阻可满足测温要求,但热敏电阻精度低,重复性和可靠性较差,对于精度要求较高的测温不适用,而且采用热敏电阻要求复杂的电路和算法,增加了设计复杂度。方案二:采用专用的集成温度传感器(如 AD590、LM35/LM45)和数字化温度传感器(DS18B20、DS1620)测温,数字化温度传感器具有接口简单、直接数字量输出、精确度高等优点。DS18B20 是 DALLAS 公司的最新单线数字温度传感器,它是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,它的测量温度范围为55125,在1085范围内,精度为0.5,现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等,DS18B20 支持 35.5V 的电压范围,使系统设计更灵活、更方便、更便宜、体积更小。DS18B20 可以程序设定 912 位的分辨率,精度为0.5,分辨率设定及用户设定的报警温度存储在 E2PROM 中,掉电后依然保存。因此,本方案选用 DS18B20 作为温度测量传感器。2.1.2 单片机系统目前比较流行 51 系列单片机和凌阳单片机。 AT89C51 单片机需要用仿真器来实现软硬件的调试,较为繁琐; AT89S52 八位单片机除具有 AT89C51 单片机所有的优点外,具有更大的程序存储空间,可在线仿真的功能,方便调试。凌阳十六位单片机虽然可以更好的完成控制功能,但较AT89S52 八位单片机价格昂贵,而且编程以及外围功能电路的设计都不及 AT89S52 成熟。因此,选用 AT89S52 八位单片机作为温度采集的控部分。2.1.3 电源模块采用普通的直流电源实现电路简单,而且采用集成电源芯片设计的直流电源电压比较稳定,完全满足系统各模块的供电要求,但是普通直流电源体积比较大,变压器的散热对测温精度也有影响,所以,选用锂离子手机充电电池和配套的锂电池充电器作为系统的供电模块。手机用的锂电池电压范围是 3.6V 到 4.2V,限定充电电压是 4.25V,完全满足 AT89S52 和 DS18B20 等各模块的工作电压范围。2.1.4 显示模块由于系统要求实现测量环境温度、测量体温、过界报警设置、温度存储再现等多种功能,要显示的信息不仅仅是温度值,所以采用数码管显示几乎不可能。另外,手机电池电量有限,而数码管耗电较大,不符合设计要求。因此,选用常见的 HS1602 液晶显示模块显示测温结果。基于 DS18B20 温度传感器的数字温度计22.1.5 确定方案为了不失通用性和智能性,本方案采用 AT89S52 单片机作为控制器,单总线温度传感器DS18B20 进行温度采集。电源部分没有采用普通的直流电源而利用锂离子手机充电电池和配套的锂电池充电器,手机用的锂电池电压范围是 3.6V 到 4.2V,限定充电电压是 4.25V,完全满足AT89S52 和 DS18B20 等各模块的工作电压范围。由于手机电池电量有限,所以显示模块使用HS1602 液晶显示模块而没有使用数码管。2.2 总体设计本方案设计的系统由按键控制模块、单片机系统、温度传感器模块、液晶显示模块、存储模块、串口通信模块和电源模块组成,其总体架构如图 1。单片机系统电源模块温度传感器模块液晶显示模块串口通信模块按键模块存储模块 程序控制图 1 系统总体设计3 硬件设计3.1 单片机系统方案采用 AT89S52 单片机作为控制器,完成所有的控制功能,包括: 温度传感器 DS18B20 的初始化和读去温度值 HS1602 液晶模块驱动 按键识别和控制 温度存储及读去 和 PC 机的串口通信基于 DS18B20 温度传感器的数字温度计3单片机系统的电路如图 2。图 2 单片机系统电路3.2 温度传感器模块3.2.1 DS18B20 原理DS18B20 采用 3 脚 PR-35 封装或 8 脚 SOIC 封装,管脚排列如图 3 所示。图中 GND 为地,DQ 为数据输入/输出端(即单线总线) ,该脚为漏极开路输出,常态下呈高电平,Vcc 是外部+5V 电源端,不用时应接地,NC 为空脚。基于 DS18B20 温度传感器的数字温度计4图 3 DS18B20 的外部结构DS18B20 内部主要包括寄生电源、温度传感器、64 位激光 ROM 单线接口、存放中间数据的高速暂存器(内含便笺式 RAM) ,用于存储用户设定的温度上下限值的 TH 和 TL 解发器存储与控制逻辑、8 位循环冗余校验码(CRC)发生器等七部分,内部结构如图 4。图4 DS18B20内部结构寄生电源由二极管 VD1、VD2 和寄生电容 C 组成,电源检测电路用于判定供电方式,寄生电源供电时,V DD 端接地,器件从单线总线上获取电源,在 DQ 线呈低电平时,改由 C 上的电压 Vc继续向器件供电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常电源时也能读 ROM。若采用外部电源 VDD,则通过 VD2 向器件供电。光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列码,如图 5 所示。开始 8 位(28H )是产品类型标号,接着的 48 位是 DS18B20 自身的序列号,最后 8位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1) 。光刻 ROM 的作用是使每一个 DS18B20都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的。主机操作 ROM 的命令有五种,如表 1 所示。图5 64 位ROM 的结构表1 DS18B20的ROM命令指令 说明读 ROM(33H) 读 DS1820 的序列号匹配 ROM(55H) 继读完 64 位序列号的一个命令,用于多个 DS1820 时定位跳过 ROM(CCH) 此命令执行后的存储器操作将针对在线的所有 DS1820搜 ROM(F0H) 识别总线上各器件的编码,为操作各器件作好准备报警搜索(ECH) 仅温度越限的器件对此命令作出响应DS18B20 测量温度时使用特有的温度测量技术。其内部的低温度系数振荡器能产生稳定的频率信号 f0,高温度系数振荡器则将被测温度转换成频率信号 f。当计数门打开时,DS18B20 对 f0 计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以被偿。测量结果存入温度寄存器中。一般情况下的温度值应为 9 位(符号点 1 位) ,但因符号位基于 DS18B20 温度传感器的数字温度计5扩展成高 8 位,故以 16 位被码形式读出,表 2 给出了温度和数字量的关系。表2 DS1820 温度数字对应关系表DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器 TH、TL 和结构寄存器。暂存存储器包含了 8 个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低 8 位,第二个字节是温度的高 8位,第三个和第四个字节是 TH、TL 的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新,第六、七、八个字节用于内部计算,第九个字节是冗余检验字节,如表 3 所示。表3 DS18B20暂存器分布寄存器内容 字节地址温度最低数字位 0温度最高数字位 1高温限制 2低温限制 3保留 4保留 5计数剩余值 6每度计数值 7CRC 校验 8该字节各位的意义为 TM R1 R0 1 1 1 1 1 ,低五位一直都是 1 ,TM 是测试模式位,用于设置DS18B20 在工作模式还是在测试模式,在 DS18B20 出厂时该位被设置为 0,用户不用改动,R1 和R0 用来设置分辨率,DS18B20 出厂时被设置为 12 位,分辨率设置如表 4 所示。 表4 分辨率设置表R1 R0 分辨率 温度最大转换时间0 0 9 位 93.75ms0 1 10 位 187.5ms1 0 11 位 375ms1 1 12 位 750ms基于 DS18B20 温度传感器的数字温度计6根据 DS18B20 的通讯协议,主机控制 DS18B20 完成温度转换必须经过三个步骤:每一次读写之前都要对 DS18B20 进行复位,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后释放,DS18B20 收到信号后等待 1660 微秒左右,后发出 60240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功。ROM 命令令和暂存器的命令如表 1 和表 5。表 5 DS18B20 暂存器的命令指令 说明温度转换(44H) 启动在线 DS1820 做温度 A/D 转换读数据(BEH) 从高速暂存器读 9bits 温度值和 CRC 值写数据(4EH) 将数据写入高速暂存器的第 2 和第 3 字节中复制(48H) 将高速暂存器中第 2 和第 3 字节复制到 EERAM读 EERAM(B8H) 将 EERAM 内容写入高速暂存器中第 2 和第 3 字节读电源供电方式(B4H)了解 DS1820 的供电方式3.2.2 DS18B20 电路连接由于 DS18B20 工作在单总线方式,其硬件接口非常简单,仅需利用系统的一条 I/ O 线与DS18B20 的数据总线相连即可,如图 6 所示。图 6 DS18B20 电路3.3 存储模块3.3.1 AT24C08 结构本方案利用 AT24C08 芯片进行存储,实现温度测量存储与再现。AT24C08 是 ATMEL 公司生产的串行 EEPROM(8K,10248) ,直接通过 I2C 总线的 SDA 中的器件地址码变更来变换读写功能,当从串行时钟线 SCL 输入正边缘时钟信号时,数据进入每一个 EEPROM 器件,在负边缘时数据从每个器件中输出,串行数据线 SDA 双向输送时,该脚用漏极开路驱动,1、2、3 脚作器件地址输入。其外部引脚及引脚功能如图 7 所示。基于 DS18B20 温度传感器的数字温度计7图 7 AT24C08 外部引脚及引脚功能AT24C08 内部主要由 EEPROM 存储阵列及其行和列译码电路、电源泵/定时、串行多路调制器、数据寄存器、I 2C 总线控制逻辑电路组成,如图 8 所示。电源泵的设置免除外设置的写入高压电源;数据寄存器保证了页写数据的装载空间;器件地址比较器用于辩识自己的从地址。图 8 AT24C08 内部结构图3.3.2 AT24C08 工作原理从地址选择AT24C08 片内的存储空间地址采用了一个字地址(WORDADR)字节的寻址,故片内寻址范围为 256 字节。页写功能EEPROM 写入时,总需要一定的写入时间(515ms) ,因此,在写入时无法连续写入多个数据字节,在 E2PROM 器件中设有一定容量的数据寄存器,用户一次写入 EEPROM 的数据字节不大于页写字节数时可按通常 RAM 的写入速度装载至 EEPROM 中的数据寄存器中,随后启动自动写入定时控制逻辑,经过 510ms 自动将数据寄存器中的数据同步写入 EEPROM 的指定单元中。AT24C08 的页写字节数为 16。页地址空间的“翻卷”对应于页写字节数,数据寄存器分别有 2、3、4 位页地址,为字地址的低位部分。在写入时,写入数据按照字地址(WORDADR)的最低部分,定为在数据寄存器的页地址空间、数据寄存器地址的低位部分,溢出时不会向字地址的高位部分进位,这就造成写入数据在地址的“翻卷”。EEPROM 的写周期时序由于页写功能的设置,I 2C 总线对 AT24C08 的操作只体现在对其数据寄存器的装载,在数据装载完毕,E2PROM 接收到 I2C 总线发送的停止位后,自动启动一个内部同步的写周期,将数据寄存基于 DS18B20 温度传感器的数字温度计8器中的数据写入 EEPROM 阵列中,在这个内部写入周期中所有输入皆无效。写周期结束后AT24C08 才允许对总线响应。3.3.3 AT24C08 的连接电路图 9 AT24C08 连接电路3.4 液晶显示模块HS1602 采用标准的 16 脚接口,其引脚如表 6 所示,其中 VSS 为地电源,VDD 接 5V 正电源,V0 为液晶显示模块对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,可以通过一个 10K 的电位器调整对比度。 RS 为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。RW 为读写信号线,高电平时进行读操作,低电平时进行写操作,当 RS 和 RW 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 RW 为高电平时可以读忙信号,当 RS 为高电平RW 为低电平时可以写入数据。E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。LEDA 和 LEDK 为背光电源,LEDA 接 5V 正电源, LEDK 接 GND。D0D7 为 8 位双向数据线。表 6 接口信号说明编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 Data I/O2 VDD 电源正极 10 D3 Data I/O3 VL 液晶显示偏压信号 11 D4 Data I/O4 RS 数据/命令选择端(H/L)12 D5 Data I/O5 R/W 读/写选择端(H/L) 13 D6 Data I/O6 E 使能信号 14 D7 Data I/O7 D0 Data I/O 15 BLA 背光源正极8 D1 Data I/O 16 BLK 背光源负极用 HS1602 液晶显示模块显示字符或字符串之前必须对其进行初始化,HS1602 液晶显示模块的初始化流程如下: 5.0 初始化过程(复位过程) 5.1 延时 15ms 5.2 写指令 38H(不检测忙信号) 5.3 延时 5ms 5.4 写指令 38H(不检测忙信号)基于 DS18B20 温度传感器的数字温度计9 5.5 延时 5ms 5.6 写指令 38H(不检测忙信号) 5.7(以后每次写指令、读/写数据之前均需检测忙信号) 5.8 写指令 38H:显示模式设置 5.9 写指令 38H:显示关闭 5.10 写指令 01H:显示清屏 5.11 写指令 06H:显示光标移动设置 5.12 写指令 0CH:显示开关及光标位置HS1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 128 个不同的点阵字符图形,如表 7 所示。 表 7 CGROM 中的字符代码与图形对应关系高低 0000 0010 0011 0100 0101 0110 01110000 CGRAM 0 P p0001 ! 1 A Q a q0010 ” 2 B R b r0011 # 3 C S c s0100 $ 4 D T d t0101 % 5 E U e u0110 K k 1100 , N n 1111 / ? O _ o HS1602 液晶模块内部的控制器共有 11 条控制指令,如表 8 所示。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。表 8 HS1602 液晶模块内部的控制器控制指令指令码 指令RS R/W D0 D1 D2 D3 D4 D5 D6 D7 说明 清屏 0 0 0 0 0 0 0 0 0 1 清显示,光标回位 光标返回 0 0 0 0 0 0 0 0 1 * ADD=0 时,回原位 输入方式 0 0 0 0 0 0 0 1 I/DS 决定是否移动以及移动方向 显示开关 0 0 0 0 0 0 1 D C B D-显示,C-光标,B-光标闪烁 移位 0 0 0 0 0 1 S/CR/L* * 移动光标及整体显示 功能设置 0 0 0 0 1 DL N F * * DL-数据位数,L-行数,F-字体CGRAM 地址设置 0 0 0 1 A5 A4 A3 A2 A1 A0 设置 CGRAM 的地址DDRAM 地址设置 0 0 1 A6 A5 A4 A3 A2 A1 A0 设置 DDRAM 的地址基于 DS18B20 温度传感器的数字温度计10忙标志/读地址计数器 0 1 BFAC6 AC5 AC4 AC3 AC2 AC1 AC0 读出忙标志位(BF)及 AC 值CGRAM/DDRAM 数据写 1 0 写数据 将内容写入 RAM 中CGRAM/DDRAM 数据读 1 1 读数据 将内容从 RAM 中读出HS1602 液晶显示模块可以和单片机 AT89C51 直接接口,电路如图 10 所示。图 10 AT89S52 和 HS1602 液晶模块连接电路液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表 9 是 HS1602 的内部显示地址。即第 1 行的显示地址应为 80H+显示位置,第 2 行的显示地址应为 C0H+显示位置。表 9 HS1602 的内部显示地址显示位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16第 1 行 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F第 2 行 C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF3.5 串口通信模块RS-232C 标准(协议)的全称是 EIA-RS-232C 标准,其中 EIA(Electronic Industry Association)代表美国电子工业协会,RS(recommended standard)代表推荐标准,232 是标识号,C 代表 RS232的最新一次修改,在这之前,有 RS232B、RS232A ,它规定连接电缆和机械、电气特性、信号功能及传送过程。RS-232C 适合于数据传输速率在 020000b/s 范围内的通信。PC 机常用 DB-9 连接器作为提供多功能 I/O 卡或主板上 COM1 和 COM2 两个串行接口的连接器,它只提供异步通信的 9 个信号,9 针串口功能见表 10,并且对电缆长度也有要求: RS-232C标准规定,若不使用 MODEM,在码元畸变小于 4%的情况下,DTE 和 DCE 之间最大传输距离为15m(50 英尺) 。可见这个最大的距离是在码元畸变小于 4%的前提下给出的,为了保证码元畸变小于 4%的要求,接口标准在电气特性中规定,驱动器的负载电容应小于 2500pF。 表 10 9 针串口功能一览表针脚 功能 针脚 功能1 载波检测 6 数据准备完成基于 DS18B20 温度传感器的数字温度计112 接收数据 7 发送请求3 发送数据 8 发送清除4 数据终端准备完成 9 振铃指示5 信号地线本方案对 RS-232-C 接口采用 3 线制(RXD、TXD、GND)软握手的零 MODEM 方式进行单片机和 PC 之间的数据通信,即 PC 机和单片机的发送数据线(TXD)与接收数据(RXD )交叉连接,二者的地线(GND)直接相连,其它信号线如握手信号线均不用,而采用软件握手。但由于RS-232-C 的逻辑电对地是对称的,与 TTL、MOS 逻辑电平完全不同,逻辑 0 电平规定为+5 +15V 之间,逻辑 1 是电平为-5 -15V 之间,因此利用 MAX232 芯片进行电平转换,电路连接如图11。图 11 RS-232-C 通信连接电路3.6 电源模块本方案采用锂离子手机充电电池和配套的锂电池充电器作为电源,手机用的锂电池电压范围是3.6V 到 4.2V,限定充电电压是 4.25V,完全满足各模块的工作电压范围。充电器在作为电源的同时也可以对锂电池进行充电,所以系统在离开市电时可正常工作。充电器电路如图 12 所示。基于 DS18B20 温度传感器的数字温度计12图 12 充电电路4 软件设计4.1 主程序流程软件部分包括五个部分,对应着系统的五种模式,程序流程如图 13 所示。初始化读最新温度 读最新温度 设定温度值 保存/删除数据读出数据刷新显示缓冲区数据判断是否刷新显示缓冲区数据刷新显示缓冲区数据保存数据并刷新显示缓冲区数据刷新显示缓冲区数据显示模式选择改状态指示 改状态指示 改状态指示 改状态指示 改状态指示State=0环境温度模式模式State=1体温计模式State=2设定模式State=4读出数据State=3保存/删除数据图 13 程序流程图基于 DS18B20 温度传感器的数字温度计134.2 DS18B20 模块程序设计4.2.1 程序流程DS18B20 模块程序主要完成 DS18B20 的初始化和温度的读去操作,程序流程如图 14 所示。4.2.2 程序源码uchar DataH;uchar DataL;unsigned long Data;void Delay (uchar us)while (-us);bit init_18b20() /1820 初始化uchar n=0;bit flag=0;DQ=1;_nop_();DQ=0;Delay(255);Delay(20); /550usDQ=1;Delay(55);if(DQ=0) flag=1; /detect 1820 success!else flag=0; /detect 1820 fail!Delay(100);DQ=1;return flag;void write1820_byte (uchar wr) /单字节写入uchar i;for (i=0;i=1; uchar read1820_byte (void) /读取单字节基于 DS18B20 温度传感器的数字温度计14uchar i,u=0;for(i=0;i=1;DQ=1;if(DQ=1)u|=0x80; Delay(18);/40usreturn(u); /对从 DS18B20 读出的温度值( ddh,ddl)进行处理,送显示缓冲区void DataCoding(unsigned char ddH , unsigned char ddL)Data = ddH * 256 + ddL;Data = Data * 625;void Get_temperarue(void)if (init_18b20 ()write1820_byte (0xcc); /skip romwrite1820_byte (0x44); /temp convertDelay(35);if (init_18b20 () write1820_byte (0xcc); /skip romwrite1820_byte (0xbe); /read tempDataL = read1820_byte();DataH = (read1820_byte()DataCoding( DataH, DataL );基于 DS18B20 温度传感器的数字温度计15DS18B20 初始化结束温度转换跳过 ROM 匹配延时DS18B20 是否存在?跳过 ROM 匹配读暂存器转换为显示码是否图 14 DS18B20 模块程序流程图4.3 HS1602 驱动程序设计4.3.1 程序流程HS1602 液晶驱动主要完成 HS1602 的初始化以及字符和字符串的显示,程序流程如图 15 所示。1602 液晶模块初始化开始显示图 15 HS1602 液晶驱动程序流程图4.3.2 程序源码/液晶初始化void lcd_init(void)delay_nms(15);基于 DS18B20 温度传感器的数字温度计16lcd_write_command(0x38,0);/显示模式设置三次(此时不管 lcd 空闲与否)delay_nms(5);lcd_write_command(0x38,0);delay_nms(5);lcd_write_command(0x38,0);delay_nms(5);lcd_write_command(0x38,1);/显示模式设置(从此之后均需 lcd 空闲)lcd_write_command(0x08,1);/显示关闭lcd_write_command(0x01,1);/显示清屏lcd_write_command(0x06,1);/显示光标移动设置lcd_write_command(0x0c,1);/显示开及光标设置/写指令函数: E=高脉冲 RS=0 RW=0/ command 为指令,wait_en 指定是否要检测 LCD 忙信号void lcd_write_command(unsigned char command,unsigned char wait_en) uchar xdata *dig;if(wait_en)wait_enable(); /若 wait_en 为 1,则要检测 LCD 忙信号,等待其空闲dig=*dig=command;/写数据函数: E =高脉冲 RS=1 RW=0void lcd_write_data(unsigned char char_data)uchar xdata *dig;dig=wait_enable(); /等待 LCD 空闲*dig=char_data;/正常读写操作之前必须检测 LCD 控制器状态/E=1 RS=0 RW=1;DB7: 0 LCD 控制器空闲,1 LCD 控制器忙。/检测忙信号,等待 LCD 空闲函数void wait_enable(void)lcd_RS=0;/RS=0lcd_RW=1;/RW=1_nop_();RD=0;/E=1lcd_E=1;while(busy);/等待 LCD_DB7 为 0RD=1;/E=0lcd_E=0;/指定位置显示一个字符:第一行位置 015,第二行 1631基于 DS18B20 温度传感器的数字温度计17/显示一个字符函数/参数 position 指定位置 031,char_data 为要显示的字符void display_a_char(unsigned char position,unsigned char char_data) unsigned char position_tem;if(position=0x10)position_tem=position+0xb0;elseposition_tem=position+0x80;lcd_write_command(position_tem,1);lcd_write_data(char_data);/指定一行显示连续字符串:0 显示在第一行,1 显示在第二行/字符串不能长于 16 个字符/显示一行连续字符串函数/参数 col 指定行,*ptr 指字符串数组的首指针void display_a_string(unsigned char col,unsigned char *ptr) unsigned char col_tem,i;/若 col 为 1(即在 LCD 第二行显示字符串), 先把 col 左移 4 位/使显示字符的首位置改到第二行首位,即位置 16col_tem=col data Then data = (Datah * 256 + Datal) * 0.0625data1 = (Datah * 256 + Datal) * 625) Mod 100) * 0.0001基于 DS18B20 温度传感器的数字温度计22Text1.Text = FormatNumber(Datah * 256 + Datal) * 0.0625 - data1), 2) + “data = (Datah * 256 + Datal) * 0.0625 - data1ElseText1.Text = FormatNumber(data, 2) + “Timer2.Enabled = TrueEnd IfElseIf Stop_flag Thendata1 = (Datah * 256 + Datal) * 625) Mod 100) * 0.0001Text1.Text = FormatNumber(Datah * 256 + Datal) * 0.0625 - data1), 2) + “tem = InfoText.Text InfoText.Text = InfoText.Text + tem + Chr(13) + Chr(10) tem = Text1.TextCall SaveInfo(InfoText.Text)Timer2.Enabled = TrueEnd IfEnd IfEnd SelectEnd Sub保存数据源代码:Public Sub SaveInfo(TextInfo As String)Dim Filenumber As StringDim FileName As StringFilenumber = FreeFileFileName = “zyh“Open FileName For Output As #FilenumberPrint #Filenumber, TextInfoClose #FilenumberEnd Sub5 测试及结果分析DS18B20 在 12 位转化时每一位的精度为 0.0625 度,我们取小数点后两位进行显示,即两位整数温度和两位小数温度数据,这样已经达到了很高的精度。在测试过程中,我们将家庭用的寒暑表和设计完成的数字温度计做比较发现,寒暑表反应速度比较快,但经过读数后的结果存在较大的误差,而我们设计完成的数字温度计测温然后显示的反应不及寒暑表,但是测温的精度远比寒暑表高,因为 DS18B20 测温精度可达 0.0625 度,并且经电子器件显示只存在取舍误差。6 附录6.1 函数及变量说明void lcd_init(void); /液晶模块初始化基于 DS18B20 温度传感器的数字温度计23void dis_now_T(void); /环境温度测量模式void dis_body_T(void); /体温模式测量模式void dis_set_T(void); /温度上限void dis_set_k(void); /温度下限void dis_save_data(void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年N1叉车司机试题及模拟考试试题(含答案)
- 2024年减灾防灾救灾演练计划
- 信管专业的毕业论文题
- 污水处理厂水质监测与调度方案
- 动漫专业毕业论文教程
- 2024年内蒙古自治区中级养老护理资格练习题(附答案)
- 房产现场销售知识培训总结
- 智慧城市建设中的城市管理信息平台开发与应用
- 小学开展防范电信网络诈骗安全教育活动总结
- 油气田开发与管理手册
- 人教版(2024新版)七年级上册数学第四章 整式的加减 单元测试卷(含答案)
- 小数乘除法竖式计算专项练习题大全(每日一练共23份)
- 幼小衔接-认识人体-课件
- XX集团公司合规管理体系建设实施方案
- 高职药学专业《药物化学》说课稿
- 婚纱店入股合同协议书范本
- 2024年云南省临沧市遴选公务员笔试真题及解析
- 幼教培训课件:《幼儿园如何有效组织幼儿户外自主游戏》
- 教育机构运营管理流程手册
- 立足单元视角 提升核心素养
- 运用PDCA循环管理提高手卫生依从性
评论
0/150
提交评论