(完整)基于51单片机的数字温度计设计

合集下载

基于MCS51系列单片机的数字温度计设计

基于MCS51系列单片机的数字温度计设计

基于MCS-51系列单片机的数字温度计设计基于MCS-51系列单片机的数字温度计设计摘要本文提出了基于MCS-51系列单片机的数字温度计的制作电路和编程思想。

该数字温度计以宏晶公司的STC89C52 单片机为主控,配以达拉斯公司的DS18B20数字温度传感器,采用1602双行英文字符液晶作显示。

实现了对温度的测量,显示,和报警等功能。

关键词:STC89C52单片机;数字传感器DS18B20;显示器LCD;目录摘要 (I)ABSTRACT ........................... 错误!未定义书签。

1 绪论 (4)1.1 选题的背景 (4)1.2 数字温度计简介 (4)1.2.1 数字温度计的特征 (4)1.2.2 设计实现的目标 (5)2 数字温度计的方案设计 (6)2.1 设计方案论证与比较 (6)2.1.1 显示电路方案 (6)2.1.2 测温电路方案 (6)2.2 系统总体方案 (6)3 数字温度计的硬件电路设计 (8)3.1 控制电路 (8)3.1.1 MCU简介 (8)3.2.2 最小系统模块 (9)3.3 温度传感器设计 (10)3.3.1 DS18B20简介 (10)3.3.2 温度传感器与单片机的连接 (12)3.3.3 复位信号及外部复位电路 (13)3.4 单片机与报警电路 (13)3.5 显示电路 (13)4 软件设计 (15)4.1 DS18b20的读操作 (15)4.2 DS18b20的温度数据处理 (16)4.3 1602显示部分 (17)5 数据测试 (20)参考文献 (22)附录1 程序源代码................ 错误!未定义书签。

1 绪论1.1 选题的背景随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

基于51的数显温度计设计

基于51的数显温度计设计

DS18B20内部结构:
64 位 ROM 和 单 线 接 口
存储器与控 制逻辑
温度传感 器 高 速 缓 存 高温触发 器TH
C
低温触发器 TL
配置寄存 器
Vdd
8位CRC发生 器
DS18B20内部结构主要由四部分组成:64位光刻 ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。
温度传感武器选择
DS18B20 最大的特点是单总线数据传输方式,数据
I/O 均由同一条线来完成。 DS18B20 的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行双向通信 ●无须外部器件(DS18B20在使用中不需要任何外围元件,全部传感元 件及转换电路集成在形如一只三极管的集成电路内); ●适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数 据线供电; ●温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃ ●零待机功耗 ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正 常工作;
方案比较
• 方案一(热电偶温差电路测温)
热电偶由两个焊接在一起的异金属导线所组成,如图:
热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参 考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集 可以通过A/D通道转化,利用单片机进行数据处理,在显示电路上显示出来。 优点:工作温度范围非常宽,且体积小 不足:存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点, 并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。
• 从以上两种方案,容易看出方案一的测温装置可 测温度范围宽、体积小,但是线性误差较大。方 案二的测温装置电路简单、精确度较高、实现方 便、软件设计也比较简单,故本次设计采用了方 案二。 • 系统器件选择

基于51单片机的数字温度计

基于51单片机的数字温度计

引言:数字温度计是一种基于51单片机的温度测量装置,它通过传感器感知环境的温度,并使用单片机将温度值转换为数字形式,并显示在液晶屏上。

本文将详细介绍数字温度计的设计原理、硬件连接、软件编程以及应用领域。

概述:数字温度计基于51单片机的设计理念,其基本原理是通过传感器将温度转换为电信号,然后通过ADC(模数转换器)将电信号转换为数字信号,最后使用单片机将数字信号转换为温度值。

同时,数字温度计还将温度值显示在液晶屏上,方便用户直观地了解环境温度。

正文内容:1. 硬件连接:1.1 使用温度传感器感知环境温度:常用的温度传感器有NTC热敏电阻和DS18B20数字温度传感器。

通过将传感器连接到51单片机的引脚上,可以实现对环境温度的感知。

1.2 连接ADC进行模数转换:ADC是将模拟信号转换为数字信号的关键部件。

通过将51单片机的引脚连接到ADC芯片的输入端,可以将模拟的温度信号转换为数字信号。

1.3 连接液晶屏显示温度值:通过将51单片机的引脚连接到液晶屏的控制引脚和数据引脚,可以将温度值以数字形式显示在液晶屏上。

2. 软件编程:2.1 初始化引脚和ADC:在软件编程中,需要初始化51单片机的引脚设置和ADC的工作模式。

通过设置引脚为输入或输出,以及设置ADC的参考电压和工作模式,可以确保硬件正常工作。

2.2 温度测量算法:根据传感器的工作原理和电压-温度特性曲线,可以编写相应的算法将ADC测得的电压值转换为温度值。

例如,对于NTC热敏电阻,可以使用Steinhart-Hart公式进行温度计算。

2.3 温度值显示:将温度值以数字形式显示在液晶屏上。

通过设置液晶屏的控制引脚和数据引脚,可以控制液晶屏的显示内容,并将温度值以数字形式显示在屏幕上。

3. 基于51单片机的数字温度计应用:3.1 家庭温度监测:数字温度计可以安装在家庭中的不同区域,实时监测室内温度,并通过数字显示提供直观的温度信息。

这对于家庭的舒适性和节能都有重要意义。

基于51单片机数字温度计设计

基于51单片机数字温度计设计

课题:基于51单片机数字温度计设计专业:电子信息工程班级:(1)班学号:姓名:峰指导教师:周冬芹设计日期:成绩:重庆大学城市科技学院电气学院基于51单片机数字温度计设计一、设计目的1、掌握单片机电路的设计原理、组装与调试方法。

2、掌握LED数码显示电路的设计和使用方法。

3、掌握DS18B20温度传感器的工作原理及使用方法。

二、设计要求1、本次单片机课程设计要求以51系列单片机为核心,以开发板为平台。

2、设计一个数字式温度计,要求使用DS18B20温度传感器测量温度。

3、经单片机处理后,要求用4位一体共阴LED数码管来设计显示电路,以显示测量的温度值。

4、另外还要求在设计中加入报警系统,如果我们所设计的系统用来监控某一设备,当设备的温度超过或低于我们所设定的温度值时,系统会产生报警。

5、要求在设计中加入上下限警报温度设置电路。

三、设计的具体实现1数字温度计设计的方案在做数字温度计的单片机电路中,对信号的采集电路大多都是使用传感器,这是非常容易实现的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

采集之后,通过使用51系列的单片机,可以对数据进行相应的处理,再由LED显示电路对其数据进行显示。

2系统设计框图温度计电路设计总体设计方框图如下图所示,控制器采用单片机A T89C51,温度传感器采用DS18B20,用4位一体共阴LED数码管以串口传送数据实现温度显示。

此外,还添加了报警系统,对温度实施监控。

3主控器AT89C51芯片对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。

AT89C51 以低价位单片机可为提供许多高性价比的应用场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。

单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS—51的CMOS产品。

51单片机数字温度计的设计与实现

51单片机数字温度计的设计与实现

51单片机数字温度计的设计与实现温度计是一种广泛使用的电子测量仪器,它能够通过感知温度的变化来提供精准的温度数值。

本文将介绍如何使用51单片机设计并实现一款数字温度计。

一、硬件设计1. 采集温度传感器温度传感器是用来感知环境温度的关键器件。

常见的温度传感器有DS18B20、LM35等。

在本次设计中,我们选择DS18B20温度传感器。

通过电路连接将温度传感器与51单片机相连,使51单片机能够读取温度传感器的数值。

2. 单片机选型与连接选择适合的51单片机型号,并根据其引脚功能图对单片机进行合理的引脚连接。

确保温度传感器与单片机之间的数据传输通畅,同时保证电源和地线的正确连接。

3. 显示模块选型与连接选择合适的数字显示模块,如数码管、液晶显示屏等。

将显示模块与51单片机相连,使温度数值能够通过显示模块展示出来。

4. 电源供应为电路提供稳定的电源,保证整个系统的正常运行。

选择合适的电源模块,并根据其规格连接电路。

二、软件设计1. 温度传感器读取程序编写程序代码,使用单片机GPIO口将温度传感器与单片机连接,并通过相应的通信协议读取温度数值。

例如,DS18B20采用一线制通信协议,需要使用单总线协议来读取温度数值。

2. 数字显示模块驱动程序编写程序代码,通过单片机的GPIO口控制数字显示模块的数码管或液晶显示屏进行温度数值显示。

根据显示模块的规格,编写合适的驱动程序。

3. 温度转换算法将温度传感器读取到的模拟数值转换为实际温度数值。

以DS18B20为例,它输出的温度数值是一个16位带符号的数,需要进行相应的转换操作才能得到实际的温度数值。

4. 系统控制程序整合以上各部分代码,编写系统控制程序。

该程序通过循环读取温度数值并进行数据处理,然后将处理后的数据送到数字显示模块进行实时显示。

三、实现步骤1. 硬件连接按照前文所述的硬件设计,将温度传感器、51单片机和数字显示模块进行正确的连接。

确保连接无误,并进行必要的电源接入。

基于51单片机的数字温度计设计及优化

基于51单片机的数字温度计设计及优化

基于51单片机的数字温度计设计及优化数字温度计是一种常见的电子测量设备,用于测量周围环境的温度,并将温度以数字形式显示。

本文将介绍一种基于51单片机的数字温度计的设计及其优化。

首先,为了设计一个基于51单片机的数字温度计,我们需要以下材料和器件:51单片机、温度传感器、LCD显示屏、电阻、电容、晶体振荡器等。

在电路设计方面,我们可以将温度传感器连接到单片机的模拟输入引脚上,通过读取模拟输入,可以获取传感器测量到的温度值。

接下来,我们可以通过串口通信将温度值发送到PC机,并通过PC机上的软件进行温度的实时显示和记录。

在软件设计方面,我们需要首先编写单片机的程序,以读取传感器的模拟信号,并将其转换为数字温度值。

然后,我们可以通过串口通信将温度值发送给PC机。

在PC机上的软件中,我们需要编写一个接收温度数据的程序,并通过图形界面显示温度值。

为了进一步优化数字温度计设计,我们可以考虑以下几个方面:1. 精度优化:通过选用更高精度的温度传感器,可以提高温度测量的准确性。

此外,在单片机的程序中,我们可以进行数学运算和滤波算法的优化,以提高温度测量的精度。

2. 功耗优化:在设计数字温度计时,我们应该尽可能降低系统的功耗。

例如,可以选择低功耗的单片机,合理设置时钟频率和休眠模式,以减少系统能耗。

3. 可靠性优化:数字温度计在长时间使用时应保持可靠性,尽量减少出现故障的可能性。

为此,我们可以对电路进行严格的电气设计,使用高质量的电子元器件,并进行必要的温度校准和测试。

4. 功能扩展:基于数字温度计的设计还可以考虑添加一些额外的功能,如报警功能、记录功能和远程监测功能等。

这些功能可以通过扩展硬件和改进软件来实现。

总结一下,本文介绍了基于51单片机的数字温度计的设计及其优化。

通过合理的电路设计和软件编程,我们可以实现一个精度高、功耗低、可靠性强的数字温度计。

此外,我们还可以通过优化算法和添加额外功能来进一步提升数字温度计的性能。

基于51单片机的数字温度计

基于51单片机的数字温度计

基于AT89S51的温度计院系:电子和信息工程学院专业:电子信息科学和技术班级:09信本学生姓名:刘辉学号:093621059第一部分 设计要求:采用AT89C51单片机和LCD 液晶显示器设计一个数字温度计,当外界温度变化时,显示屏上的温度值也随着变化。

数字温度计的测温范围为-55°C 到125°C 之间。

第二部分 硬件原理框图:硬件部分主要分为晶振振荡电路、复位电路、LCD 液晶显示电路、DS18B20温度传感器采集电路、电源电路等部分组成。

第三部分 硬件原理图:硬件模块原理图:AT89C51单片机晶振振荡电路 复位电路 L CD 液晶显示电路温度传感器采集电路电 源 电 路一、晶振振荡电路该电路是由两个电容和一个晶振组成,晶振产生基本的时钟信号它给单片机提供时钟信号。

二、复位电路复位的主要作用是把特殊功能寄存器的数据刷新为默认数据,单片机在运算过程中由于干扰等外界原因造成寄存器中数据混乱不能使其正常继续执行程序或产生的结果不正确时均需要复位,以使程序重新开始运行。

三、LCD液晶显示电路经过温度传感器,将采集到的温度信息传给单片机,单片机处理后又将信息发给P0口,P0口和LCD的数据口相连接,液晶屏上会显示采集到的温度值。

四、温度传感器采集电路单线数字温度传感器DS18B20测量温度范围为-55°C~+125°C,-10~+85°C范围内,精度为±0.5°C。

DS1822的精度较差为± 2°C 。

DS18B20的管脚排列如下: DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM 指令,最后发送RAM 指令,这样才能对DS18B20进行预定的操作。

基于51单片机的数字温度计设计及应用

基于51单片机的数字温度计设计及应用

基于51单片机的数字温度计设计及应用数字温度计是一种测量环境温度的设备,它使用数字技术来转换和显示温度值。

基于51单片机的数字温度计设计及应用,我们将使用51单片机作为主控芯片,采集传感器的温度数据并将其转换为数字信号,然后通过数码管显示出来。

首先,我们需要选择合适的温度传感器。

常见的温度传感器有热敏电阻、热电偶和数字温度传感器等。

在本设计中,我们将使用DS18B20数字温度传感器。

DS18B20具有高精度、数字输出、通信简单等优点,非常适合于数字温度计的设计。

接下来,我们需要设计硬件电路。

首先,将DS18B20传感器连接到51单片机的GPIO引脚,并通过一条数据线进行通信。

接下来,将51单片机的引脚连接到数码管显示模块,用于将温度值显示出来。

此外,还可以添加其他功能,如按键开关用于控制菜单切换、蜂鸣器用于报警等。

在软件设计上,首先需要初始化51单片机的GPIO引脚,配置为输入或输出模式,通信时需要配置为模拟输入模式。

然后,利用51单片机的定时器模块生成一定频率的时钟信号,用于与DS18B20传感器通信。

在温度读取过程中,我们需要发送一系列的指令给DS18B20传感器,然后接收传感器返回的温度值。

根据DS18B20传感器的数据手册,我们可以编写相应的C语言代码进行数据的读取和解析。

接着,我们需要将读取到的温度值进行转换和显示。

由于DS18B20传感器输出的温度值为16位二进制补码形式,我们可以使用移位和逻辑运算等操作进行转换。

转换后的温度值可以直接显示在数码管上,通过扫描显示的方式实时更新温度数值。

在应用方面,基于51单片机的数字温度计可以广泛应用于各种温度测量场景。

例如,可以应用于室内温度测量,工业过程控制,农业温室监测等。

由于51单片机具有低功耗、成本低廉等优点,这种数字温度计可以在各种资源有限的环境中使用。

除了基本功能外,我们还可以进行功能扩展。

例如,可以添加存储功能,将温度数据保存到外部存储器中,以便进行后续分析和处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(完整)基于51单片机的数字温度计设计编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)基于51单片机的数字温度计设计)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)基于51单片机的数字温度计设计的全部内容。

基于51单片机的数字温度计设计一.课题选择随着时代的发展,控制智能化,仪器小型化,功耗微量化得到广泛关注。

单片机控制系统无疑在这方面起到了举足轻重的作用。

单片机的应用系统设计业已成为新的技术热点,其中数字温度计就是一个典型的例子,它可广泛应用与生产生活的各个方面,具有巨大的市场前景。

二.设计目的1.理解掌握51单片机的功能和实际应用。

2.掌握仿真开发软件的使用。

3.掌握数字式温度计电路的设计、组装与调试方法。

三.实验要求1.以51系列单片机为核心器件,组成一个数字式温度计.2.采用数字式温度传感器为检测器件,进行单点温度检测。

3.温度显示采用4位LED数码管显示,三位整数,一位小数。

四.设计思路1.根据设计要求,选择STC89C51RC单片机为核心器件。

2.温度检测采用DS18B20数字式温度传感器。

与单片机的接口为P3。

6引脚.3.采用usb数据线连接充电宝供电,接电后由按钮开关控制电路供电。

硬件电路设计总体框图为图1:五.系统的硬件构成及功能1.主控制器单片机STC89C51RC具有低电压供电和体积小等特点,有40个引脚,其仿真图像如下图所示:2.显示电路显示电路采用4位共阳LED数码管,从P3口RXD,TXD串口输出段码。

LED数码管在仿真软件中如下图所示:3.温度传感器DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:1.独特的单线接口仅需一个端口引脚进行通讯.2.简单的多点分布应用.3.无需外部器件.4.可通过数据线供电.5.零待机功耗。

6.测温范围—55~+125摄氏度。

其电路图如下图所示:在仿真软件中如下图所示:DS18B20的测温原理图如下图所示:在正常测温情况下,DS18B20的测温分辨力为0.5摄氏度,可采用下述方法获得高分辨率的温度测量结果。

:首先用DS18B20提供的读暂存器指令(BEH)读出以0。

5摄氏度为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再利用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。

考虑到DS18B20测量温度的整数部分以0.25、0.75摄氏度为进位界限的关系,实际温度Ts可以用下式计算:Ts=(Tz-0.25)+(CD-Cs)/CD六.系统整体硬件电路根据设计要求与设计思路,硬件电路设计框图如下图所示,在仿真软件Proteus上完成,其中LED数码管以动态扫描法实现温度显示,由四个PNP型晶体管Q2,Q3,Q4,Q5和8个电阻组成。

基极与单片机的P1。

0,P1.1,P1。

2连接,DS18B20的数据I/O端与单片机P3。

6引脚连接。

外部晶振为12MHZ。

七.系统程序设计数字式温度计的应用程序主要包括主程序,温度检测程序,温度转换程序,LED显示程序等.其思路如下图所示:八.测量及其结果分析1.Proteus仿真结果软件方面,在Proteus编译下进行,源程序编译及仿真调试。

在软件中选定传感器后可对其进行环境温度设置,如下图,将环境温度设为34。

9.2.硬件测试结果在硬件测试方面,检查电路板及焊接的质量情况,在焊接无误后通电检查LED显示器.其中成品图如图所示:通电后,室温下LED的示数如图所示九.设计心得体会本次实验对我们组来说是一次难得的经历,首先是第一次接触了仿真软件Proteus,在使用时经历了很多次失败,因为这款软件与以前使用过的软件有很大不同,使用时不停出错,接线时由于原件放置不合理而接的杂乱无章,输入源程序时还算顺利,显示结果比较满意。

其次是程序设计,我们在参考别人成功先例的基础上根据自己设计的需要进行编程,其中经历了不少曲折,最后我的收获是编程一定要细心,针对每一个细节,稍有疏忽程序就不能正常运行。

在这次的实践与学习中,尽管期间困难重重,但我们还是从中学习了不少新的知识和技能,也体会到了经历失败最终成功的喜悦。

总之,通过这次电工电子综合设计,我收获了很多,我希望自己在今后的各项研究工作中也坚持这种精神。

十.附录源程序#include〈reg52。

h〉#include 〈intrins.h>#define uchar unsigned char#define uint unsigned intsbit DATA = P1^1; //DS18B20接入口uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极字型码int temp;//温度值int ss; //中间的一个变量int dd;int j;uchar data b;//定时器中断次数uchar data buf[4];//字型显示中间变量int alarmH=320; //默认报警值int alarmL=100;//定义开关的接入口sbit k1=P2^5;//+sbit k2=P2^6;//—sbit k3=P2^7;//确认sbit k4=P2^4; //切换sbit bell=P1^0; //蜂鸣器sbit HLight=P1^2; //正温指示灯sbit LLight=P1^3; //负温度指示灯sbit warn=P1^4;//报警指示灯sbit Red=P1^6; //温度上限设置指示灯sbit Green=P1^7; //温度下限设置指示灯bit set=0; //初始化bit Flag=0; //设置标志int n;//函数的声明区void key_to1();void key_to2();void delay(uint);void key();void Show();//函数的定义区/*延时子函数*/void delay(uint num){while(num—-) ;}//DS18b20温度传感器所需函数,分为初始化,读写字节,读取温度4个函数Init_DS18B20(void) //传感器初始化{uchar x=0;DATA = 1; //DQ复位delay(10);//稍做延时DATA = 0; //单片机将DQ拉低delay(80); //精确延时大于 480us //450DATA = 1; //拉高总线delay(20);x=DATA;//稍做延时后如果x=0则初始化成功 x=1则初始化失败delay(30);}ReadOneChar(void) //读一个字节{uchar i=0;uchar dat = 0;for (i=8;i〉0;i-—){DATA = 0; // 给脉冲信号dat〉>=1;DATA = 1; // 给脉冲信号if(DATA)dat|=0x80;delay(8);}return(dat);}WriteOneChar(unsigned char dat) //写一个字节{uchar i=0;for (i=8; i〉0; i-—){DATA = 0;DATA = dat&0x01;delay(10);DATA = 1;dat>>=1;}delay(8);}int ReadTemperature(void) //读取温度{uchar a=0;uchar b=0;int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();//低位b=ReadOneChar();//高位t=b;t<〈=8;t=t|a;tt=t*0。

0625;t= tt*10+0.5;return(t);}void display00() //*********显示负值子函数{dd=—(temp—1);buf[1]=dd/100;buf[2]=dd/100;buf[3]=dd%100/10;buf[0]=dd%10;//动态显示for(j=0;j<5;j++){P2=0xff; // 初始灯为灭的P0=0x00;P2=0xfd; //显示小数点P0=0x80; //显示小数点delay(100);P2=0xff;// 初始灯为灭的P0=0x00;P2=0xf7; //片选LCD1P0=0x40;delay(100);P2=0xff;P0=0x00;P2=0xfb;//片选LCD2P0=table[buf[2]];delay(100);P2=0xff;P0=0x00;P2=0Xfd;//片选LCD3P0=table[buf[3]];delay(100);P2=0xff;P0=0x00;P2=0Xfe;P0=table[buf[0]]; //片选LCD4delay(100);P2=0xff;}}//显示正值子函数void display(){buf[1]=temp/1000;//显示百位buf[2]=temp/100%10;//显示十位buf[3]=temp%100/10;//显示个位buf[0]=temp%10; //小数位for(j=0;j<3;j++){P2=0xff;// 初始灯为灭的P0=0x00;P2=0xfd; //显示小数点P0=0x80; //显示小数点delay(300);P2=0xff;// 初始灯为灭的P0=0x00;P2=0xf7; //片选LCD1P0=table[buf[1]];delay(300);P2=0xff;P0=0x00;P2=0xfb;//片选LCD2P0=table[buf[2]];delay(300);P2=0xff;P0=0x00;P2=0Xfd;//片选LCD3P0=table[buf[3]];delay(300);P2=0xff;P0=0x00;P2=0Xfe;P0=table[buf[0]]; //片选LCD4delay(300);P2=0xff;}}void key() //按键扫描子程序{ if(k1!=1){delay(20);if(k1!=1){while(k1!=1){ key_to1();for(n=0;n<8;n++)Show();}}}if(k2!=1){delay(20);if(k2!=1){while(k2!=1){ key_to2();for(n=0;n〈8;n++)Show();}}}if(k3!=1){ TR0=1; //复位,开定时temp=ReadTemperature();}if(k4!=1){ delay(20);if(k4!=1){while(k4!=1);set=!set;if(set==0){ Red=0;Green=1;}else { Green=0;Red=1;}}}}void key_to1(){TR0=0; //关定时器temp+=10;if(temp>=1100){temp=-550;}if(set==0){alarmH=temp;}else {alarmL=temp;}}void key_to2(){TR0=0;//关定时器temp—=10;if(temp〈=—550){temp=1100;}if(set==0){ alarmH=temp;}else { alarmL=temp;}}void alarm(void){if(temp〉alarmH||temp<alarmL){//bell=1;//delay(50);//bell=0;Flag=1;}else {Flag=0;}}logo()//开机的Logo{P0=0x40;P2=0xf7;delay(50);P2=0xfb;delay(50);P2=0Xfd;delay(50);P2=0Xfe;delay(50);P1 = 0xff; //关闭显示}void Show()//显示函数,分别表示温度正负值{ if(temp>=0){HLight=1;LLight=0;display();}if(temp<0){HLight=0;LLight=1;display00();} }void main(){TCON=0x01; //定时器T0工作在01模式下TMOD=0X01;TH0=0XD8;//装入初值TL0=0XF0;EA=1; //开总中断ET0=1; //开T0中断TR0=1; //T0开始运行计数EX0=1; //开外部中断0for(n=0;n〈500;n++)//显示启动LOGo”- - ——"{bell=1;warn=1;logo();}Red=0;while(1){key();ss=ReadTemperature();Show();alarm();//报警函数if(Flag==1){bell=!bell;warn=!warn;} //蜂鸣器滴滴响else {bell=1;warn=1;}}}void time0(void) interrupt 1 using 1 //每隔10ms执行一次此子程序{ TH0=0X56;TL0=0XDC;temp=ss;}。

相关文档
最新文档