《基于STC89C52单片机的温度测量及报警电路设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的温度测量及报警电路设计.docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、沈阳理工大学学士学位论文摘 要摘要:在日常生活及工业生产过程中,常常要用到温度的检测及掌握,温度是生产过程和科学试验中普遍而且重要的物理参数之一。传统的测温元件有热电偶和二电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相比照较简单, 需要比较多的外部硬件支持。我们用一种相比照较简洁的方式来测量。承受美国 DALLAS 半导体公司推出的一种改进型智能温度传感器 DS18B20 作为检测元件,温度范围为-55125 C,最高区分率可达0.0625 C。DS18B20 可以直接读出被测温度值,而且承受三线制与单片机相连,削减了外部的硬件电路,具有低本钱和易使用的特点。基于 S
2、TC89C52 单片机的温度测量及报警电路,电路承受 DS18B20 作为温度监测元件,测量范围0-50,使用LCD 模块显示,能设置温度报警上下限。着重介绍软硬件系统的各局部电路,介绍了集成温度传感器 DS18B20 的原理,STC89C52 单片机功能和应用。该电路设计颖、功能强大、构造简洁。关键词:温度测量 报警DS18B20STC89C52XVIIIAbstractAbstract:In daily life and industrial production process, often used in the detection and control of temperature
3、, temperature is the production process and scientific experiments in general and one of theimportant physical parameter. Traditional thermocouple and temperature components are the second resistor. The thermocouple and thermal resistance are generally measured voltage, and then replaced by the corr
4、esponding temperature, these methods are relatively complex, requiring a relatively large number of external hardware support. We use a relatively simple way to measure.Use the United States following DALLAS Semiconductor DS1820 improved after the introduction of a smart temperature sensor DS18B20 a
5、s the detection element, a temperature range of -55 C 125 C, up to a maximum resolution of 0.0625 C. DS18B20 can be directly read out the temperature on the north side, and three-wire system with single-chip connected to a decrease of the external hardware circuit, with low-cost and easy use.The int
6、roduction of a cost-based STC89C52 MCU a temperaturemeasurement circuits, the circuits used DS18B20 high-precision temperature sensor, measuring scope 0 C+100 C, can set the warning limitation, the use of seven segments LCD that can be display the current temperature. The paper focuses on providing
7、a software and hardware system components circuit, introduced the theory of DS18B20, the functions and applications of AT89C51 .This circuit design innovative, powerful, can be expansionary strong.Key words: Temperature measurementwarningDS18B20STC89C52目 录1 绪论11.1 引言11.2 设计内容及要求11.3 主体的局部22 AT89S52
8、单片机介绍及应用42.1 AT89S52 的主要功能42.2 引脚构造及说明52.2.1 方框图62.2.2 引脚说明72.3 特别功能存放器102.4 存储器构造132.5 软件看门狗及串口142.5.1 WDT的使用142.5.2 掉电和空闲方式下的WDT152.5.3 定时器2152.6 其他功能介绍163 系统软件的设计233.1 程序设计语言233.2 主程序233.3 显示子程序243.4 定时器 T0 中断效劳程序253.5 T1 中断效劳程序253.6 调时功能程序253.7 时钟/秒表功能程序254 硬件电路的操作和显示264.1 硬件工作过程264.2 LED的性能特点27
9、5 其他外围电路设计2 85.1 时钟电路285.2 复位电路295.3 键盘电路30结 论32致 谢33参考文献34附录A 英文和翻译35附录B 电路原理图 .43第一章 绪论1.1 引言随着科技的进展,在工业、农业生产等重要领域对温度的掌握要求越来越高,因而对温度报警系统的要求也越来越高。如何设计一款本钱低廉、报警准确、操作简洁的智能温度报警系统成为一个重要问题。以STC89C52单片机为处理核心,通过数字温度传感器DS18B20将检测到的数据输入单片机进展处理,与声光报警电路组合就可以构成温度报警系统,这种设计系统的本钱较小,构造简洁、操作便利,并且测量也很准确,能够满足工业、农业生产对
10、温度要求不是特别高的地方。温度报警系统,在工业、农业自动化掌握中占有格外重要的地位。单片机系统的开发应用给现代工、农业测控领域带来了一次的技术革命,自动化、智能化均离不开单片机的应用。将单片机掌握方法运用到温度掌握系统中,可以抑制温度掌握系统中存在的严峻滞后现象,同时在提高采样频率的根底上可以很大程度的提高掌握效果和掌握精度。现代自动掌握越来越朝着智能化进展,在很多的小型系统中,处理机的本钱占系统本钱的比例高达 20%,而对于这些小型的系统来说,配置一个如此高速的处理机没有任何必要,由于这些小系统追求经济效益,而不是最在乎系统的快速性,所以用本钱低廉的单片机掌握小型的,而又不是很简单,不需要大
11、量简单运算的系统中是格外适合的。随着电子技术以及应用需求的进展,单片机技术得到了快速的进展,在高集成度,高速度,低功耗以及高性能方面取得了很大的进展。伴随着科学技术的进展,电子技术有了更高的飞跃,我们现在完全可以运用单片机和电子温度传感器对某处进展温度检 测,而且我们可以很简洁地做到多点的温度检测,假设对此原理图稍加改进,我们还可以进展不同地点的实时温度检测和掌握。设计内容及要求承受 STC 89C52 单片机作为处理器。STC 89C52 是一个超低功耗,和标准 51 系列单片机相比较具有运算速度快,抗干扰力量强,支持 ISP 在线编程,片内含 8k 空间的可反复擦写 1000 次的 Fla
12、sh 只读存储器,具有 256 bytes 的随机存取数据存储器RAM, 32 个 I/O 口,2 个 16 位可编程定时计数器。其指令系统和传统的8051 系列单片机指令系统兼容,降低了系统软件设计的难度,电路设计简洁、价格低廉,其准确度和运算速度也都完全符合系统的要求。本设计以 AT89S51 单片机为核心的温度掌握系统的工作原理和设计方法。温度信号由温度芯片 DS18B20 采集,并以数字信号的方式传送给单片机。该掌握系统的硬件局部,包括:温度检测电路、温度掌握电路、PC 机与单片机串口通讯电路和一些接口电路 。单片机通过对信号进展相应处理,从而实现温度掌握的目的承受干电池供电其次章 A
13、T89S52 单片机介绍及应用2.1 AT89S52 的主要功能AT89S52 是一种低功耗、高性能CMOS 8 位微掌握器,具有8K 系统可编程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上, 拥有灵活的 8 位 CPU 和在系统可编程 Flash,使得 AT89S52 在众多嵌入式掌握应用系统中得到广泛应用。1、与 MCS-51 单片机产品兼容;2、8K 字节在系统可编程 Flash 存储器;3、1000 次擦写周期;4、全静态操作:0Hz-33
14、MHz;5、三级加密程序存储器;6、32 个可编程 I/O 口线;7、三个 16 位定时器/计数器;8、8 个中断源;9、全双工 UART 串行通道;10、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符。2.2 引脚说明AT89S52 是一种低功耗、高性能 CMOS8 位微掌握器,具有 8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵活的 8 位 CPU 和在系统可编程 F
15、lash,使得 AT89S52 为众多嵌入式掌握应用系统供给高敏捷、超有效的解决方案。 AT89S52 具有以下标准功能: 8k 字节Flash,256 字节 RAM, 32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位 定时器/计数器,一个 6 向量 2 级中断构造,全双工串行口, 片内晶振准时钟电路。另外, AT89S52 可降至 0Hz 静态逻 辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停顿工作,允许 RAM、定时器/计数器、串口、中断连续工 作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。P0
16、口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻 辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时, P0 口也被作为低8 位地址/数据复用。在这种模式下,P0 不具有内部上拉电阻。在flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个 TTL规律电平。此外,P1.0 和 P1.1 分别作定时器/计数器 2 的外部计数输入P1.0/T2和定时器/计数器 2 的触发输入P1.1/T
17、2EX。 在 flash 编程和校验时,P1 口接收低 8 位地址字节。P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动4 个 TTL 规律电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的缘由,将输出电流IIL。 在访问外部程序存储器或用 16 位地址读取外部数据存储器例如执行 MOVX DPTR 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送 1。在使用 8 位地址如 MOVX RI访问外部数据存储器时,P2 口输出 P2 锁存器的内容。在 flash 编
18、程和校验时,P2 口也接收高 8 位地址字节和一些掌握信号。P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p3 输出缓冲器能驱动 4 个 TTL 规律电平。 P3 口亦作为 AT89S52 特别功能其次功能使用,如下表所示。 在 flash 编程和校验时,P3 口也接收一些掌握信号。端口引脚其次功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断 0)P3.3 INT1(外中断 1)P3.4 TO(定时/计数器 0)P3.5 T1(定时/计数器 1)P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通)此外,P3
19、 口还接收一些用于 FLASH 闪存编程和程序校验的掌握信号。复位输入。当振荡器工作时,RST 引脚消灭两个机器周期以上高电平将是单片机复位。XTAL1 振荡器反相放大器和内部时钟发生电路的输入端。XTAL2 振荡器反相放大器的输出端。2.3 存储器MCS-51 器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K 寻址。程序存储器:假设 EA 引脚接地,程序读取只从外部存储器开头。对于 89S52,假设EA 接 VCC,程序读写先从内部存储器地址为0000H1FFFH开头, 接着从外部寻址,寻址地址为:2023HFFFFH。数据存储器:AT89S52 有 256 字节片
20、内数据存储器。高 128 字节与特别功能存放器重叠。也就是说高 128 字节与特别功能存放器有一样的地址,而物理上是分开的。当一条指令访问高于 7FH 的地址时,寻址方式打算 CPU 访问高 128 字节 RAM 还是特别功能存放器空间。直接寻址方式访问特别功能存放器SFR。例如,下面的直接寻址指令访问 0A0HP2 口存储单元 MOV 0A0H , #data使用间接寻址方式访问高 128 字节 RAM。例如,下面的间接寻址方式中,R0 内容为 0A0H,访问的是地址 0A0H 的存放器,而不是 P2 口它的地址也是 0A0H。MOV R0 , #data 堆栈操作也是间接寻址方式。因此,高
21、 128 字节数据 RAM 也可用于堆栈空间。2.4 看门狗定时器WDT 是一种需要软件掌握的复位方式。WDT 由 13 位计数器和特别功能存放器中的看门狗定时器复位存储器WDTRST构成。WDT 在默认状况下无法工作;为了激活 WDT,用户必需往 WDTRST 存放器地址:0A6H中依次写入 01EH 和 0E1H。当 WDT 激活后,晶振工作,WDT 在每个机器周期都会增加。WDT 计时周期依靠于外部时钟频率。除了复位硬件复位或 WDT 溢出复位,没有方法停顿 WDT 工作。当 WDT 溢出,它将驱动 RSR 引脚一个高电平输出。WDT 的使用为了激活 WDT,用户必需向 WDTRST 存
22、放器地址为 0A6H 的 SFR依次写入01EH 和 0E1H。当WDT 激活后,用户必需向WDTRST 写入 01EH 和 0E1H 喂狗来避开 WDT 溢出。当计数到达81911FFFH时,13 位计数器将会溢出,这将会复位器件。晶振正常工作、WDT 激活后,每一个机器周期WDT 都会增加。为了复位WDT,用户必需向WDTRST 写入 01EH 和 0E1HWDTRST 是只读存放器。WDT 计数器不能读或写。当 WDT 计数器溢出时,将给 RST 引脚产生一个复位脉冲输出,这个复位脉冲持续 96 个晶振周期TOSC,其中 TOSC=1/FOSC。为了很好地使用WDT,应当在肯定时间内周期
23、性写入那局部代码,以避开 WDT 复位。掉电和空闲方式下的 WDT 在掉电模式下,晶振停顿工作,这意味这 WDT 也停顿了工作。在这种方式下,用户不必喂狗。有两种方式可以离开掉电模式:硬件复位或通过一个激活的外部中断。通过硬件复位退出掉电模式后,用户就应当给 WDT 喂狗,就如同通常AT89S52 复位一样。通过中断退出掉电模式的情形有很大的不同。中断应持续拉低很长一段时间,使得晶振稳定。当中断拉高后,执行中断效劳程序。为了防止WDT 在中断保持低电平的时候复位器件,WDT 直到中断拉低后才开头工作。这就意味着 WDT 应当在中断效劳程序中复位。为了确保在离开掉电模式最初的几个状态 WDT 不
24、被溢出,最好在进入掉电模式前就复位WDT。在进入待机模式前,特别存放器 AUXR 的 WDIDLE 位用来打算 WDT 是否连续计数。默认状态下,在待机模式下,WDIDLE=0,WDT 连续计数。为了防止 WDT 在待机模式下复位 AT89S52,用户应当建立一个定时器,定时离开待机模式,喂狗,再重进入待机模式。2.5 DS18B20 的介绍2.5.1 DS18B20 的主要特点温度传感器的种类众多,在高精度、高牢靠性的应用场合时DALLAS达拉斯公司生产的 DS18B20 温度传感器比较抱负。它体积小,硬件开消低,抗干扰力量强,精度高,附加功能强。与传统的热敏电阻等测温元件相比,它能直接读出
25、被测温度,并且可依据实际要求通过简洁的编程实现 912 位的数字值读数方式。它具有独特的单线接口仅需要一个端口引脚进展通信,并可通过数据线供电,电压范围为 3.05.5 。2.5.2 DS18B20 的构造TO92 封装的 DS18B20 的引脚排列见以下图。图 3.2.1其引脚功能描述见下表。DS18B20 实物图及封装表 3.2.1 DS18B20 具体引脚功能描述序号名称引脚功能描述1 GND接地信号2 DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在3 VDD寄生电源下,也可以向器件供给电源。可选择的 VDD 引脚。当工作于寄生电源时,此引脚必需接地。DS18B20 的内部构造示
26、意图如以下图所示。I/O64位存储器与掌握逻ROM 和单 线 接温度传感器口高高温触发器THC速缓低温触发器 TL存配置存放器Vdd8 位 CRC 发生器图 3.2.2 DS18B20 内部构造64 位 ROM 的构造起始位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最终位是前面 56 位的 CRC 检验码,这也是多个DS18B20 可以承受一线进展通信的缘由。温度报警触发器和,可通过软件写入户报警上下限。DS18B20 温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存器 RAM 由 9 个字节的存储器组成。第 0-1 个字节是温度的显示
27、位; 第 2 和第 3 个字节是 TH 和 TL,同时第 2 和第 3 个字节的数字可以更;第 4 个字节是配置存放器,同时第 4 个字节的数字也可以更;第 5、6、7 三个字节是保存的。第 8 字节读出前面全部字节的 CRC 码,可用来检验数据,从而保证通信数据的正确性。2.5.3 DS18B20 的测温原理DS18B20 的测温原理是这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显转变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门翻开时,DS18B20 就对低温度系数振荡器产生的
28、时钟脉冲进展计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来打算,每次测量前,首先将55所对应的一个基数分别置入减法计数器和温度存放器中。DS18B20 可以承受两种方式供电,一种是承受电源供电方式,此时 DS18B20 的 1 脚接地,2 脚作为信号线,3 脚接电源。另一种是寄生电源供电方式,如图3.2.3 所示单片机端口接单线总线,为保证在有效的 DS18B20 时钟周期内供给足够的电流,可用一个 MOSFET 管来完成对总线的上拉。.VCC单VCC片4.7K机DS18B20DS18B20DS18B20GNDGNDGND.图 3.2.3 DS18B20 的接口电路当 DS18B2
29、0 处于写存储器操作和温度 A/D 转换操作时,总线上必需有上拉,上拉开启时间最大为 10us。承受寄生电源供电方式时 VDD 端接地。由于单线制只有一根线, 因此发送接口必需是三态的。由于DS18B20 是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、写数据、读数据。全部时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开头,假设要求单总线器件回送数据,在进展写命令后, 主机需启动读时序完成数据接收。数据和命令的传输
30、都是低位在先。(1) DS18B20 的初始化时序1) 先将数据线置高电平 12) 延时该时间要求不是很严格,但尽可能短一点3) 数据线拉到低电平 04) 延时 750us该时间范围可以设定为 480-960us 范围内5) 数据线拉到高电平 16) 延时等待。假设初始化成功则在 15-60ms 内产生一个由 DS18B20 返回的低电平 0,据该状态可以确定它的存在。7) 假设 CPU 读到数据线上的低电平 0 后,还要进展延时,其延时的时间从发出高电平算起最少 480us8) 将数据线再次拉到高电平 1 后完毕(2) DS18B20 的写数据 数据线先置低电平 0 延时确定的时间为 15u
31、s 按从低位到高位的挨次发送数据一次只发送一位 延时时间为 45us 将数据线拉到高电平 1 重复 1-5 步骤,直到发送完整个字节 最终将数据线拉到(3) DS18B20 的读数据 将数据线拉高到 延时us 将数据线拉低到 0 延时 6us 将数据线拉高到 1 延时 4us 读数据线的状态得到一个状态位,并进展数据处理 重复 1-7 步骤,直到读取完一个字节2.6 LCD1602 的介绍LCD1602液晶显示器也叫1602字符型液晶显示器。它是一种特地用来显示字母、数字、符号等的点阵型液晶模块。它由假设干个5X7或者5X11等点阵字符位组成。每个点阵字符位都可以显示一个字符,每位之间有一个点
32、距的间隔,每行之间也有间隔, 起到了字符间距和行间距的作用。LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。管脚功能LCD1602引脚图LCD1602承受标准的16脚接口,其中: 第1脚:VSS 为电源地第2脚:VCC 接5V 电源正极第3脚:V0为液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高第4脚:RS 为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器第5脚:RW 为读写信号线,高电寻常进展读操作,低电寻常进展写操作。第6脚:E(或 EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚
33、或背灯电源。15脚背光正极,16脚背光负极。操作掌握1602液晶模块内部的字符发生存储器CGROM)已经存储了160个不同的点阵字符图形。这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等。每一个字符都有一个固定的代码,比方大写的英文字母“A”的代码是01000001B41H,显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”。由于1602识别的是 ASCII 码,试验可以用ASCII 码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如”A。指令集1602通过 D0D7的8位数据端传输数据和指令。显示模式设置: (初始化)0011 1000 0x3
34、8 设置162显示,57点阵,8位数据接口; 显示开关及光标设置: (初始化)0000 1DCB D 显示(1有效)、C 光标显示(1有效)、B 光标闪耀(1有效)0000 01NS N=1(读或写一个字符后地址指针加1&光标加1), N=0(读或写一个字符后地址指针减1&光标减1),S=1且 N=1(当写一个字符后,整屏显示左移) s=0当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)其他设置:01H(显示清屏,数据指针=0,全部显示=0);02H(显示回车,数据指针=0)。2.7 硬件设计2.7.1 硬件设计目标系统通
35、过温度传感器 DS18B20 的数据线 DQ 与主控芯片 51 单片机的 P3.3 相连接, DS18B20 将采集到的数据送给单片机,经过单片机处理后,显示在 8 位数据线与单片机 P0 口的液晶显示器 LCD 上。串口经过 MAX232 的电平转换后 R1 OUT 和 T1 IN 接到单片机的 RXD 与 TXD 来实现与用 C 语言编辑的计算机软件的界面间的通信。液晶 LCD 的 RS、RW、E 分别接到单片机的 P2.0P2.2 来实现单片机掌握液晶的读写命令和数据的显示掌握。2.7.2 硬件功能模块划分(1) STC89C52RC 单片机:实现对整个系统的掌握。(2) DS18B20
36、、LCD1602:温度传感器 DS18B20 的数据线 DQ 与主控芯片 51 单片机的P3.3 相连接,DS18B20 将采集到的数据送给单片机,经过单片机处理后,显示在 8 位数据线与单片机 P0 口的液晶 LCD 上。2.7.3 接口和连接方式1液晶 LCD1602 的数据和指令选择掌握端 RS 接到单片机的 P2.0,读写掌握R / W 接到单片节的 P2.1,数据读写掌握位 E 接到单片机的 P2.2,8 位数据线 DB0DB7 接到单片机的 P0 口。24 个按键 K1K4 分别接到单片机的 P1.0P1.3。3DS18B20 的DQ 接到单片机的P3.3.2.7.4 硬件仿真电路
37、第四章 软件设计程序介绍4.1 1602 液晶显示处理局部在本次设计系统中定义了 P22 口为1602 液晶的使能端; P20 为数据命令的选择端; P21 为读,写选择端。定义了有关的函数; write_com 向1602 写入命令码函数,write_date向1602 写入数据函数; display1602 显示函数; lcd_init 1602 初始化; lcd_display 1602 显示初始化。具体程序如下所示;void lcd_init/1602 初始化 write_com(0x38);/两行显示,5*7 点阵delayms(5);/延时 5 毫秒write_com(0x01);
38、/显示清屏delayms(5);write_com(0x0c);/开显示,不显示光标,光标不闪耀delayms(5);write_com(0x06);/当读或写一个字符后地址指针加一,且光标加一delayms(5);void lcd_display/1602 显示初始化lcd_init;/1602 初始化write_com(0x80);/第一行第一个字符开头显示display(str1);/第一行显示 temperature write_com(0xc0);/其次行第一个字符开头显示display(str2);/显示空白4.2 18B20 函数处理局部在本次设计系统中 P33 口用来单片机与温
39、度传感器通讯;它用到的相关函数如下;ds_init18B20初始化 ; ds_write向18B20中写入数据 ;ds_read由18B20 读取数据 ;ds_temp从18B20中读取温度值 ;ds_dis把温度值送入1602中显示。具体程序如下所示;void ds_init/18B20 初始化dq=1;delayus(4);/CPU 将总线拉高dq=0;delayus(480);/CPU 将总线拉低延时 480 微妙dq=1;delayus(60);/CPU 将总线拉高延时 60 微妙if(dq=0)delayus(240);/CPU 推断是否为低电平,是的话说明温度传感器在线上void
40、ds_write(uchar date1)/向18B20中写入数据留意写入是按从低位到高位的挨次发送数据一次只发送一位。uchar ds_read/由 18B20 读取数据,读的时候也是从最低位读uint ds_temp/从 18B20 中读取温度值 uchar a,b;ds_init;/初始化温度传感器ds_write(0xcc);/无视 ROM 指令ds_write(0x44);/开头温度转换ds_init;/初始化温度传感器ds_write(0xcc);/无视 ROM 指令ds_write(0xbe);/读取温度值a=ds_read;/读取低八位b=ds_read;/读取高八位tvalu
41、e=b;/tvalue=8;/tvalue=tvalue|a;/得到 16 位的温度值if(tvalue0x0fff)/推断温度大于 0 tflag=0;elsetvalue=tvalue+1;/假设温度小于 0,取反加一tflag=1;/tvalue=tvalue*(0.625);/乘以最小区分率得到温度值return(tvalue);/void ds_dis/把温度值送入 1602 中显示uchar flagdat; disdata0=tvalue/1000+0x30;/温度百位disdata1=tvalue%1000/100+0x30;/温度十位disdata2=tvalue%100/1
42、0+0x30;/温度个位disdata3=tvalue%10+0x30;/小数点后一位if(tflag=0)flagdat=0x20;/假设温度大于 0,不显示if(tflag=1)flagdat=0x2d;/假设温度小于 0 显示负号if(disdata0=0x30)disdata0=0x20;/百位为 0 不显示if(disdata1=0x30)disdata1=0x20;/十位为 0 不显示write_com(0xc0);write_date(flagdat);/其次行第一个显示温度正负write_com(0xc1);write_date(disdata0);/其次行其次个显示温度百位write_com(0xc2);write_date(disdata1);/其次行第三个显示温度十位write_com(0xc3);write_date(disdata2);/其次行第四个显示温度个位write_com(0xc4);/write_date(0x2e);/其次行第五个显示小数点write_com(0xc5);/write_date(disdata3);/其次行第六个显示小数点后一位void main/主程序lcd_display;/1602 显示初始化while(1)ds_temp;/从 18B20 中读取温度ds_dis;/1602 显示温度