1、 湖南机电职业技术学院湖南机电职业技术学院 毕业设计 课题名称 基于 DS18B20 的多路温度采集系统设计 院 系 电气工程学院 学生姓名 禹涛 专 业 机电一体化 班 级 机电 1202 指导老师 朱光耀 评阅老师 2023 年 10 月 23 日 目 录 毕业设计(论文)任务书.-3-毕业设计(论文)进度计划表.-4-摘 要.-5-1 绪论.错误错误!未定义书签。未定义书签。1.1 课题研究的背景和意义.-6-1.2 本设计的重要规定.-6-2 系统方案设计与选型.-7-3 重要硬件介绍.-8-3.1 DS18B20.-8-3.2 AT89C51.-12-3.3 LCD1602.-13-
2、3.4 DS1302.-14-3.5 24C02C.-15-4 软件介绍.-15-4.1 Proteus.-15-4.2 Keil.-16-5 硬件设计.-16-5.1 温度采集电路.-17-5.2 单片机最小系统.-18-5.3 按键输入电路.-19-5.4 报警电路.-20-5.5 LCD 显示电路.-20-5.6 24C02 存储电路.-21-5.7 DS1302 时钟电路.-22-5.8 串行通讯电路.-23-6 软件设计.-23-6.1 功能概述.-23-6.2 系统软件流程图.-24-7 实验结果.-25-7.1 温度显示仿真.-25-7.2 温度存储与串行通讯.-25-总 结.-
3、26-参 考 文 献.-27-致 谢.-28-附录 A 电路原理图.-30-附录 B 重要程序.-31-毕业设计(论文)任务书毕业设计(论文)任务书 题目:基于基于 DS18B20DS18B20 的多路温度采集系统设计的多路温度采集系统设计 任务与规定:以 MCS-51 系列单片机为解决器,运用数字式测温仪 DS18B20 实现对4路温度检测;运用显示装置显示4路温度,并能实现温度超限报警,便于送到计算机解决系统,进行必要的控制,重要技术指标有:1、采集路数,4 路;2、测温精度较高,达 0.10C;3、采样时间,每隔一秒采样一次;4、可以通过键盘设立系统参数,用四行汉字显示温度;5、温度可存
4、储。基本规定基本规定 1、硬件系统设计:涉及 MCS-51 的 I/O 接口,LED 显示电路,信号输入解决和输出驱动电路的设计。2、软件部分设计:涉及系统流程图,系统初始化编程和功能软件编程 3、系统调试:在硬、软件设计好的前提下,进行系统安装、调试并改善,直到达成控制规定为止 毕业设计(论文)进度计划表毕业设计(论文)进度计划表 日期 工作内容 执行情况 指导教师 签 字 9 9 月月 2525号号9 9 月月 2727号号 论述毕业设计的实行方案。9 9 月月 2 28 8号号9 9 月月 3030号号 查找 DS18B20 的多路温度采集系统方面知识,完毕初稿。1010 月月 7 7号
5、号1 10 0 月月 1 14 4号号 向导师提出可行想法,与导师共同拟定设计。通过实验和文献获取所需数据。1 11 1 月月 6 6号号1111 月月 1616号号 通过反复验证,拟定设计可行性,完善论文。1 11 1 月月 1717号号 1 11 1 月月2020 号号 完毕论文的最后作者声明部分,申请答辩交由导师打分。指导教 师对进 度计划 实行情 况总评 署名 年 月 日 摘摘 要要 本文基于 DS18B20 设计了一种多路温度数据采集系统,系统重要由单片机电路和一组 DS18B20 数字传感器构成,同时具有温度显示、数据存储和串行通讯模块。软件方面,我们采用 keil 软件对程序进行
6、编写以及调试,硬件方面,我们通过 Proteus 软件对硬件电路进行仿真以及测试,该系统结构简朴,功耗较低,测温范围为-55+125,通过 LCD1602 显示所测温度。同时,可以实现高低温报警,若所测温度超过设定范围,相关器件就会自动报警。我们也可以通过对按键的解决来改变显示不同通道的温度。我们还可以把测得的温度存储到24C02 芯片中,并且可以实现串行通讯,把温度传送到上位机。该系统硬件分为3 部分:DS18B20 温度测量模块、单片机模块、温度显示模块、数据存储模块、上位机与单片机通讯接口电路。系统的测温精度可以达成0.5,并且能稳定的与单片机和上位机通讯。关键词:关键词:DS18B20
7、DS18B20、多路温度测控多路温度测控、高低温报警、串行通讯、高低温报警、串行通讯 1 绪论绪论 1.1 课题研究的背景和意义 在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的重要被控参数。其中,温度控制也越来越重要。在工业生产的很多领域中,人们都需要对各类加热炉、热解决炉、反映炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制不仅具有控制方便、简朴和灵活性大等优点,并且可以大幅度提高被控温度的技术指标,从而大大提高产品的质量和数量。因此,单片机对温度的控制问题是工业生产中经常会碰到的控制问题。目前应用的温度检测系统大多采用由模拟温度传感器、多路模拟开关、AD 转换器
8、及单片机等组成的传输系统。这种温度采集系统需要大量的测温电缆,才干把现场传感器的信号送到采集卡上安装和拆卸繁杂,成本也高。同时线路上传送的是模拟信号,易受干扰和损耗,测量误差也比较大,不利于控制者根据温度变化及时做出决定。针对这种情况,本文提出一种采用数字化单总线技术的温度采集系统,并运用 Proteus 和 Keil 软件对设计电路进行综合虚拟仿真,实现了温度实时测量和显示。1.2 本设计的重要规定 设计一多路温度测控系统,能实现 8 路及以上的温度点测量和实时显示,可根据设定的上下限输出报警及显示,具有 RS485 或 RS232 总线接口。设计完整的电路原理图和编写相关程序。用 MCS-
9、51 系列单片机或其它 CPU 作为控制器设计一完整测控仪器,涉及以下内容:温度可采用标准系列热电耦或标准热电阻或 DS18B20;用 LCD1602 显示或用 LED 显示;用输入按键可以暂停、转换、通道的显示;日历时钟显示;数据记录存贮功能 RS485 或 RS232 通讯 PROTEUS 仿真以上一种功能 2 系统方案设计与选型系统方案设计与选型 系统重要由硬件和软件两大部分构成,当接受到系统发出的温度转换命令后,DS18B20开始进行温度转换操作并把转化后的结果放到16 位暂存寄存器中的温度寄存器内,然后与系统进行数据通信,系统将温度读出并驱动LCD显示。假如温度值低于设定下限值或高于
10、设定上限值,则自动启动报警装置。同时,基于本设计的设计规定,存储芯片选用了24C02C,时钟芯片选用了DS1302,显示模块选择的是LCD显示。由于 DS18B20 单总线通信功能是分时完毕的,它有严格的时隙概念,因此读写时序很重要。该系统结构图 图1、系统结构图 3 重要硬件介绍重要硬件介绍 3.1 DS18B20 DSl820数字温度计是美国Dallas公司生产的数字温度计,它提供9位(二进制)温度读数,指示器件的温度。信息通过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线。DSl820的电源可以由数据线自身提供而不需要外部电源。由于每一个DS
11、l820在出厂时已经给定了唯一的序号,因此任意多DSl820可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件。DSl820的测量范围从-55到+125,增量值为0.5,可在l s(典型值)内把温度变换成数字。每一个DSl820涉及一个唯一的64位长的序号,该序号值存放在 单 片 机 按 键 输 入电路 测温电路 时钟电路 显示电路 串行通讯 报警电路 DSl820内部ROM(只读存贮器)中。开始8位是产品类型编码(DSl820编码均为10H)。接着的48位是每个器件唯一的序号,最后8位是前面56位的CRC(CRC=X8+X5+X4+1)码。下图为DS18B20的实物图。图2、
12、DS18B20 DS1820方框图(图1)内部VDD 64 位 ROM和单线端口 电源探测 存储器和控制逻辑 暂存器 8 位 CRC产生器 温度传感器 上限触发 TH 下限触发 TL DS1820温度转换期间的强上拉供电(图2)+5V DS1820 +5V GND VDD 4.7K I/O 图3、DS18B20内部结构 温度/数据关系(表1)P 根据DS18B20的通讯协议,主机控制DS18B20完毕温度转换必须通过三个环节:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才干对DS18B20进行预定的操作。复位规定主CPU将数据线下拉500微
13、秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表达复位成功。指令 约定代码 功能 读ROM 33H 读DS1820ROM中的编码(即64位地址)符合ROM 55H 发出此命令之后,接着发出64位ROM编码,访问单线总线上与该编码相相应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。搜索ROM OFOH 用 于 拟 定 挂 接 在 同 一 总 线 上DS1820D的个数和辨认64位ROM地址,为操作各器件作好准备。TEMPERATURE DIGITAL OUTPUT (Binary)DIGITAL OUTPUT
14、(Hex)+125 0000 0111 1101 0000 07D0h+85 0000 0101 0101 0000 0550h*+25.0625 0000 0001 1001 0001 0191h+10.125 0000 0000 1010 0010 00A2h+0.5 0000 0000 0000 1000 0008h+0 0000 0000 0000 0000 0000h 0.5 1111 1111 1111 1000 FFF8h 10.125 1111 1111 0101 1110 FF5Eh 25.0625 1111 1110 0101 1111 FF6Fh 55 1111 1100
15、 1001 0000 FC90h 跳过ROM OCCH 忽略64位ROM地址,直接向DS1820发温度变换命令,合用于单片工作。告 警 搜 索 命令 OECE 执行后,只有温度超过设定值上限或下限的片子才做出响应。指 令 约定代码 功能 温度变换 44H 启动DS1820进行温度转换,转换时间最长500m,(典型为200m),结果存入内部9字节RAM中。读暂存器 OBEH 读内部RAM中9字节内容 写暂存器 4EH 发出向内部RAM的第3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据 复制暂存器 48H 将RAM中第3、4字内容复制到EPRAM中 重调EPRAM OBBH
16、将EPRAM中内容恢复到RAM中的第3、4字节 读供电方式 OB4H 读DS1820的供电模式,寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。图4、DS18B20内部指令 3.2 AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通 用8位中央解决器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价
17、比的应用场合,可灵活应用于各种控制领域。ATC9C51实物图如图3。重要参数如下:与MCS-51产品指令系统完全兼容 4k字节可重擦写Flash闪速存储器 1000次擦写周期 全静态操作:0Hz24MHz 三级加密程序存储器 1288字节内部RAM 图5丶单片机 32个可编程IO口线 2个16位定期计数器 6个中断源 可编程串行UART通道 低功耗空闲和掉电模式 3.3 LCD1602 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。数字式接口液晶显示器都是数字式的,和单片机系统的接
18、口更加简朴可靠,操作更加方便。体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达成显示的目的,在重量上比相同显示面积的传统显示器要轻得多。功耗低相对而言,液晶显示器的功耗重要消耗在其内部的电极和驱动 IC 上,因而耗电量比其它显示器要少得多。LCD1602 的实物图如图 4,重要参数如下:显示容量:16 2 个字符 芯片工作电压:4.55.5V 图 6 丶 工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V 字符尺寸:2.95 4.35(W H)mm 3.4 DS1302 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟芯片,它可以对
19、年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个318 的用于临时性存放数据的 RAM 寄存器。DS1302 是 DS1202 的升级产品,与 DS1202 兼容,但增长了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。X1,X2 32.768kHz 晶振引脚 GND/RST 地/复位 SCLK 串行时钟 VCC1 电池引脚 VCC2 主电源引脚 3.5 24C02C 24C02是低工作电压的2K位串行电可擦除只读存储
20、器,内部组织为256个字节,每个字节 8 位,该芯片被广泛应用于低电压及低功耗的工商业领域。重要特性 工作电压:1.8V5.5V 输入/输出引脚兼容 5V 应用在内部结构:256x8(2K)二线串行接口 输入引脚经施密特触发器滤波克制噪声 双向数据传输协议 兼容 400KHz(1.8V,2.5V,2.7V,3.6V)支持硬件写保护 高可靠性:读写次数:1,000,000 次 数据保存:100 年 4 软件介绍软件介绍 4.1 Proteus Proteus 是英国 Labeenter electronics 公司研发的 EDA 工具软件。Proteus 不仅是模拟电路、数字电路、模数混合电路的
21、设计与仿真平台,更是目前世界最先进、最完整的多种型号微控制器系统的设计与仿真平台。它真正实现了在计算机上完毕从原理图设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成 PCB 的完整电子设计与研发过程。Proteus 产品系列也包含了革命性的 VSM 技术,可以对基于微控制器的设计连同所有的外围电子器件一起仿真。4.2 Keil Keil C51 美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil 提供了涉及 C 编译器、宏汇编、连接器、库管理
22、和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运营 Keil 软件需要 WIN98、NT、WIN2023、WINXP 等操作系统。假如你使用 C 语言编程,那么 Keil 几乎就是你的不二之选,即使不使用 C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。5 硬件设计硬件设计 系统硬件设计涉及温度采集设计、单片机控制电路设计、通信接口电路设计。采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机解决及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做
23、工业测温元件,此元件线形较好。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和单片机构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简朴,体积也不大。采用DS1302时钟芯片可以方便地得到系统时间并且输出方便。采用了24C02这种应用广泛的芯片进行数据存储。采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的 算术算法和逻辑控制,并且体积小,硬件实现简朴,安装方便。该系统运用单片机控制温度传感器DS18B20进行实时温度检测并显示,可以实现快速测量环境温度,并可以根据需要设定上下限报警温度。下面分别介绍了
24、各个硬件部分的电路连接图。5.1 温度采集电路 采用 DS18B20 一线制芯片,其中 1 脚接地,3 接电源,2 为数据传输线,每个传感器有一个独立的光刻地址,用于区分数据传输顺序。理论上说,这个电路最多能连接 8 个 DS18B20,但是要连接更多,DQ 端需要外加驱动电源。图 7.温度采集电路 5.2 单片机最小系统 单片机最小系统涉及 51 系列单片机、晶振电路、复位电路。如下所示:图 8.单片机最小系统 5.3 按键输入电路 按键输入如下,其中按下“开始/暂停”按钮 LCD 开始显示通道的温度,“通道+”用于向上切换测量通道,“通道-”用于向下切换测量通道。图 9.按键输入电路 5.
25、4 报警电路 如下所示,LED-H 为当高限报警时报警,LED-L 为当低限报警时的报警。图 10.报警电路 5.5 LCD 显示电路 本设计中,LCD 只用了四线,实现四线显示。图 11.LCD 显示电路 5.6 24C02 存储电路 图 12.24C02 电路 5.7 DS1302 时钟电路 图 13.DS1302 电路 5.8 串行通讯电路 图 14.串行通讯电路 图中模拟了一个上位机和一个 RS232 串行接口。6 软件设计软件设计 6.1 功能概述 本系统的软件由C语言编写,程序的重要功能是负责温度的实时测量、显示、存储并读出存储器中的当前温度值给上位机。6.2 系统软件流程图 图
26、15.系统软件流程图 开始 执行初始化程序 系统时间为 2MS 获取温度值 扫描按键 显示、发送、存储温度,并判断报警 系统时间为 2MS 系统时间为 2MS 系统时间为 2MS T0,T1 计数器 7 实验结果实验结果 7.1 温度显示仿真 图中可以看出,LCD 第一行显示“0 27.0”表达 0 通道的温度为 27.0 度,第二行显示“22:04:19”表达测量温度时的时间。图 16.温度显示仿真 7.2 温度存储与串行通讯 如图所示,左边对话框为 24C02 内存空间,其中“00 00 1B 00”意义是“00”为 0 通道,“00”为正温度,“1B”为十六进制温度(27),“00”为小
27、数部分为 0。右边对话框中模拟的是上位机显示,也是十六进制表达。图 17.温度存储与串行通讯 总总 结结 通过两周多的设计以及调试,实现实验的部分设计规定,能读出并显示DS18B20 采集的温度,并且可以实现高低温报警,可以实现温度数据的存储和串行通讯,能通过对按键的解决来切换需要显示的通道温度,使得 1 条总线上可以读取到 8 个温度传感器的温度值并将其依次显示在液晶屏幕上,同时液晶屏幕可以清楚显示温度传感器温度值的具体时间。我在这为期两周多的设计性实验中,我们在老师的指导下,有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。我希望自己能在此后
28、的进一步学习中设计出更好的,力求创新,努力地提高自己,寻求更大的进步!最后用一句话来结束吧。“实践是检查真理的唯一标准”。参 考 文 献 1DS18B20、lcd LM1602 说明书、DS1302 说明书、24C02 说明书;2 黄惟公等 单片机原理与应用技术 西安电子科大出版社 2023;3周润景等 基于 PROTEUS 的电路及单片机系统设计与仿真 北航出版社 2023.5 4常敏等 单片机应用程序开发与实践 电子工业出版社 2023;5马建国、孟宪元.电子设计自动化技术基础.清华大学出版,2023 6姜威.实用电子系统设计基础,2023 7姜威.单片机系统的 PROTEUS 设计与仿真
29、,2023 8陈小忠 等 单片机接口技术实用子程序.北京:人民邮电出版社 2023.9 9徐爱钧,彭秀华编著 Keil Cx51 V7.0 单片机高级语言编程与 Vision2应用实践 北京:电子工业出版 致致 谢谢 为期两周的课程设计也接近了尾声。本次课程设计的完毕,凝聚着许多人的关怀和帮助。一方面要感谢我敬爱的指导教师朱光耀。他们在学术上的精心指导和严格规定,在系统研究和调试过程中给予的及时帮助。在完毕设计期间给我许多帮助和建议,他们兢兢业业、对工作认真负责的态度为我们做出了好的表率,时刻鞭策着我们向他们学习。这些使我的课程设计得以顺利完毕,并激励着我们在此后的 人生道路上不断开拓进取,勇
30、往直前。在此,我再一次对老师的培养和关怀表达真挚的谢意!同时,非常感谢我的同学们,在与他们共同的学习、工作、生活过程中,他们给予了我及时的帮助和建议,开拓了我的思绪。我对他们致以真诚的谢意和衷心的祝福。最后,向所有帮助过我的人致以最真挚的谢意!附录附录 A 电路原理图电路原理图 附录附录 B 重要程序重要程序 IIC 驱动电路:驱动电路:#includeiic.h uchar slaw=0 xa0;uchar slar=0 xa1;void delay(uchar n)uchar i;for(i=0;in;i+)nop;/*功能:毫秒延时函数 参数:当晶振为 11.0592 时 x 为毫秒数*
31、/void delayms(unsigned int x)uchar j;while(x-)for(j=0;j113;j+);/*功能:起始信号函数 说明:*/void sta(void)SDA=0;SCL=1;SDA=1;delay(4);SDA=0;SCL=0;delay(4);/*功能:停止信号函数 说明:*/void stop()SDA=0;/SDA 初始化为低电平“0”_n SCL=1;/*这两句顺序不可以改变*/delay(4);SDA=1;delay(4);/*发送应答位函数*/void ack()SDA=0;SCL=1;nop;SCL=0;SDA=1;/*发送应答非位函数*/v
32、oid nack()SDA=1;SCL=1;nop;SCL=0;SDA=0;/*功能:应答检查 参数:返回检查值 =1 表达返回异常 说明:每次发送一个数据后,从即会发送一个 0 的信号应答 这里先让 SDA=1;没有返回值 则一直=1 应答异常 */bit cack()bit rdflag;SDA=1;/先释放 SDA SCL=1;nop;nop;if(SDA=1)rdflag=1;else rdflag=0;SCL=0;return rdflag;/*功能:写入当前位置的一个字节的函数 写入顺序 7-0;说明:调用此函数前使用 sta(void);已经让 SCL 为 0 在上升沿写入数据
33、*/void WrbytCurrent(uchar dat)uchar i;for(i=0;i8;i+)nop;SDA=(bit)(dat&0 x80);nop;SCL=1;dat=1;nop;nop;SCL=0;/*功能:在 address 写入一个字节的函数 写入位顺序 7-0;说明:调用此函数前使用 sta(void);已经让 SCL 为 0 在上升沿读取数据 */void wrbyt(uchar address,uchar dat)bit flag;do sta();/开始 WrbytCurrent(slaw);flag=cack();/应答 while(flag=1);WrbytCu
34、rrent(address);flag=cack();/应答 while(flag=1);WrbytCurrent(dat);flag=cack();/应答 while(flag=1);stop();delayms(5);void WriteSetN(uchar address,uchar wr,uchar n)uchar i;bit flag;do sta();/开始 WrbytCurrent(slaw);/器件地址 flag=cack();/应答 while(flag=1);/一直发送到应答成功 WrbytCurrent(address);/数据地址 flag=cack();/应答 whi
35、le(flag=1);for(i=0;in;i+)/从address开始写入 n 个字节数 WrbytCurrent(wri);flag=cack();/应答 while(flag=1);stop();delayms(5);/*功能:读取当前位置的一个字节的函数 读取顺序 7-0;说明:调用此函数前使用 sta(void);已经让 SCL 为 0 在下降沿读取数据 */uchar RdbytCurrent()uchar dat,i;for(i=0;i8;i+)SCL=1;nop;nop;dat=(dat1)|SDA;SCL=0;nop;nop;return dat;uchar ReadByte
36、(uchar address)uchar dat;sta();/开始 WrbytCurrent(slaw);/器件地址 ack();/应答 WrbytCurrent(address);/写入数据地址 ack();sta();/应答 WrbytCurrent(slar);/器件地址 ack();dat=RdbytCurrent();/读取数据 nack();stop();delayms(5);return dat;Timer.c 驱动函数:驱动函数:#include#includeconst.h#includeTimer.h bit g_systTime2Ms=0;bit g_time10Ms=
37、0;bit g_time50Ms=0;void Timer0_com_Init()TMOD=0X21;SCON=0 xd0;TH0=0XF8;TL0=0XCC;ET0=1;TR0=1;TH1=0 xfd;/波特率设立为 9600 TL1=0 xfd;TR1=1;/开定期器 T1 运营控制位 void Timer0()interrupt 1 static s_countFor10Ms=0;static s_countFor50Ms=0;TH0=0XF8;TL0=0XCC;g_systTime2Ms=1;if(+s_countFor10Ms=5)s_countFor10Ms=0;g_time10M
38、s=1;if(+s_countFor50Ms=25)s_countFor50Ms=0;g_time50Ms=1;主函数主函数 main.c:#includereg52.h#includeLCD1602_4.h /四线LCD#include18b20.h#includekey.h#includeTimer.h#includeds1302.h#includeiic.h sbit Hight_Warning=P20;sbit Low_Warning=P21;uchar DispArray6;/储存显示字符 char T_num;bit Start;uint8 data disp5;uchar RT_
39、data6;extern struct /定义日历时间结构 uint8 Second;uint8 Minute;uint8 Hour;uint8 Day;uint8 Week;uint8 Month;uint8 Year;CurrentTime;void LcdShow(uchar dat)/LCD 显示函数 uint8 temp;temp=dat/16*10+dat%16;disp0=temp/10+0 x30;disp1=temp%10+0;disp2=0;void Show_Time(void)v_ClockUpdata_f();LcdShow(CurrentTime.Hour);/显示
40、时间 LCD_Prints(0,1,disp);LcdShow(CurrentTime.Minute);LCD_Prints(3,1,disp);LcdShow(CurrentTime.Second);LCD_Prints(6,1,disp);static code unsigned char get_serial=/获取的八个 DS18B20 内部RAM 64 位序列号 185,0,0,0,184,197,49,40,224,0,0,0,184,197,50,40,/e0.0.0.0 b8,c5,32,28 b8,c5,32 romserial number 28 family number
41、 215,0,0,0,184,197,51,40,82,0,0,0,184,197,52,40,101,0,0,0,184,197,53,40,60,0,0,0,184,197,54,40,11,0,0,0,184,197,55,40,47,0,0,0,184,197,56,40,;void Get_Temperature(uchar n)/获取温度的函数 有关变量均为全局变量 Tm=read0(get_serial+n*8);void Show_Temperature(void)if(fushu=0)/判断是否加负号 DispArray0=T_num+0 x30;/通道号 DispArray
42、1=;/空格 DispArray2=;/温度正负 if(Tm%1000)/100=0)DispArray3=;if(Tm%1000)/100!=0)DispArray3=(Tm%1000)/100)+0 x30;DispArray4=(Tm%100)/10)+0 x30;DispArray5=(Tm%10)+0 x30;DispArray6=.;DispArray7=dian/10+0 x30;DispArray8=dian%10+0 x30;DispArray9=0;LCD_Prints(0,0,DispArray);if(fushu=1)/判断是否加负号 DispArray0=T_num+
43、0 x30;/通道号 DispArray1=;/空格 DispArray2=-;/温度正负 if(Tm%1000)/100=0)DispArray3=;if(Tm%1000)/100!=0)DispArray3=(Tm%1000)/100)+0 x30;DispArray4=(Tm%100)/10)+0 x30;DispArray5=(Tm%10)+0 x30;DispArray6=.;DispArray7=dian/10+0 x30;DispArray8=dian%10+0 x30;DispArray9=0;LCD_Prints(0,0,DispArray);void EErom_PC(vo
44、id)uchar i;RT_data0=T_num;/通道号 RT_data1=fushu;/温度符号 RT_data2=Tm;/温度整数 RT_data3=dian;/温度小数 WriteSetN(0 x00,RT_data,4);/发送到 eerom for(i=0;i50)/高报警 Hight_Warning=0;Low_Warning=1;else if(fushu=1)/低报警 Hight_Warning=1;Low_Warning=0;else /正常 Hight_Warning=1;Low_Warning=1;Show_Time();if(g_time10Ms)/每 10ms扫描按键 g_time10Ms=0;switch(GetKey()case(KEY_1|KEY_PRESS):Start=Start;break;case(KEY_1|KEY_LONG):Start=Start;break;case(KEY_2|KEY_PRESS):if(+T_num=8)T_num=0;break;case(KEY_2|KEY_LONG):if(+T_num=8)T_num=0;break;case(KEY_3|KEY_PRESS):if(-T_num0)T_num=7;break;case(KEY_3|KEY_LONG):if(-T_num0)T_num=7;break;
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100