基于51单片机的数字温度计
基于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单片机的测温数字温度计的最小系统

●第一章设计目的——————————————3 ●第二章设计内容————————————— 3 ●第三章分析———————————————7 ●第四章示例程序——————————————7 ●第五章总结———————————————13一、设计目的:利用51单片机和ds18b20等元件设计一个实时的测量温度和报警的小系统。
系统可以通过数码管显示实时的温度值,显示的温度的精度是0.01℃。
然后,还可以利用按键进行最高温度值和最低温度值的设定,当温度超过设定的最高温度值的时候,蜂鸣器会响,并且会有一个led灯亮起;当温度值低于设定的最低温度值的时候,蜂鸣器会响,但是led灯不会亮。
二、设计内容:温度计电路设计总体设计方框图如图1所示,控制器采用单片机8051,温度传感器采用DS18B20,显示部分是一个四位一体的数码管,设置电路部分是3个按键和3个用于指示的led灯,报警电路部分是一个led灯和一个蜂鸣器。
图11、 温度传感器DS18B20与8051单片机连接非常简单,只需将DS18B20信号线与单片机一位I/O 线相连,且一位I/O 线可连接多个DS18B20,以实现单点或多点温度测量。
温度计仿真电路部分如图2所示。
图2单片机复位 时钟震荡主 控制 器数码管显示温度传感器报警电路设置电路Ds18b20需要严格的协议以确保数据的完整性。
协议包括集中单线信号类型:复位脉冲.存在脉冲.写0.写1.读0和读1。
所有这些信号,处存在脉冲外,都是由总线控制器发出的。
和ds18b20间的任何通讯都是需要以初始化序列开始,初始化序列见图3,一个复位脉冲跟着一个存在脉冲表明ds18b20已经准备好发送和接收数据。
图3Ds18b20的读写时序图如图4所示,Ds18b20的几个常用的功能命令如下: CCH 跳过ROM指令44H 温度转换指令BEH 读SRAM4EH 写SRAM三、分析:1.程序一开始测得温度并储存,然后对按键1进行判断,若按键1未按下则直接跳到第四步;2.若按键1按下,则开始设置最高温度,然后再判断按键2(3)是否按下,若按下,则对应设置十(个)位。
51单片机数字温度计设计与应用

51单片机数字温度计设计与应用数字温度计在现代生活中有着广泛的应用,它能够将环境温度转换为数字信号,提供直观、准确的温度数据。
本文将介绍基于51单片机的数字温度计的设计与应用。
设计思路:1. 硬件设计首先,我们需要选取一个合适的温度传感器,例如DS18B20。
该传感器具有高精度、数字输出、带有内部校准和非易失性存储器等特点,非常适合作为数字温度计的传感器。
其次,我们需要引入一个51单片机,常用的有AT89C51、AT89S52等。
单片机负责控制传感器和显示器,并处理温度数据。
接下来,我们需要一个LED数码管或液晶显示屏作为温度显示器。
数码管简单且易于操作,而液晶显示屏可以提供更多的信息显示。
最后,我们还需添加一些辅助电路,如稳压电路、时钟电路等,以确保正常的运行。
2. 软件设计在单片机的程序设计方面,我们需要考虑以下几个步骤:(1)初始化各个引脚和外部设备,如温度传感器和显示屏。
(2)读取温度传感器输出的数字信号,通过数据线将其与单片机相连。
(3)通过一系列算法将数字信号转换为实际的温度值。
因为DS18B20传感器提供数字输出,所以支持该类算法的编程非常简单。
(4)将计算得到的温度值通过数码管或液晶显示屏进行显示。
如果是数码管,可以通过数码管驱动芯片来实现多位数的显示。
(5)可选的增加报警功能,当温度超过一定阈值时,触发报警。
应用场景:数字温度计可以在许多场景中应用,下面介绍几个常见的应用场景:1. 家庭温度监测在家庭中,我们可以将数字温度计放置在客厅、卧室等常用区域,用于监测室内温度。
通过数字温度计,我们可以实时了解室内的温度状况,根据需要进行调节,提供舒适的生活环境。
2. 温室控制在温室种植中,保持适宜的温度对于植物的生长至关重要。
数字温度计可以帮助种植者实时监测温室内的温度,并及时采取相应的措施,维持温室内的温度在适宜的范围内。
3. 实验室温度监测实验室需要严格控制温度,以确保实验的准确性和稳定性。
基于51单片机的数字温度计设计与实现

基于51单片机的数字温度计设计与实现数字温度计是一种能够测量环境温度并将其以数字形式显示出来的仪器。
它被广泛应用于各种领域,例如家庭、工业和实验室。
本文将介绍基于51单片机的数字温度计的设计与实现。
首先,我们需要了解51单片机的基本知识。
51单片机是一种8位微控制器,具有强大的计算和控制能力。
它是目前应用最广泛的单片机之一。
接下来,我们需要选择合适的温度传感器。
常用的温度传感器有热电偶、半导体温度传感器和热敏电阻等。
在本设计中,我们将使用LM35半导体温度传感器。
LM35具有精确度高、响应快的特点,非常适合用于数字温度计。
设计硬件电路是实现数字温度计的重要一步。
电路的核心是将传感器输出的模拟电压转换成数字信号。
我们可以使用ADC(模数转换器)将模拟信号转换为数字信号。
51单片机的内部有一个8位ADC,可以用来实现此功能。
在编程方面,我们可以使用C语言来编写单片机的程序。
使用51单片机的开发环境,如Keil C等,可以帮助我们更方便地编写程序。
算法的编写是实现数字温度计的关键。
我们需要将ADC转换出的数字信号进行处理,得到具体的温度数值。
这个数值可以通过一些公式来计算得出。
以LM35传感器为例,根据其数据手册可以得知,输出电压与温度之间的关系为温度(℃)=(传感器输出电压-0.5)/0.01。
通过这个公式,我们可以将ADC转换出的数字信号转换为实际的温度数值。
最后,我们需要将得到的温度数值以数字形式显示出来。
此时,我们可以使用数码管来进行显示。
51单片机具有多个IO口,可以直接驱动数码管进行数字的显示。
综上所述,基于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单片机的数字温度计

基于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单片机数字温度计设计专业:电子信息工程班级:(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单片机的数字温度计,我们需要以下材料和器件:51单片机、温度传感器、LCD显示屏、电阻、电容、晶体振荡器等。
在电路设计方面,我们可以将温度传感器连接到单片机的模拟输入引脚上,通过读取模拟输入,可以获取传感器测量到的温度值。
接下来,我们可以通过串口通信将温度值发送到PC机,并通过PC机上的软件进行温度的实时显示和记录。
在软件设计方面,我们需要首先编写单片机的程序,以读取传感器的模拟信号,并将其转换为数字温度值。
然后,我们可以通过串口通信将温度值发送给PC机。
在PC机上的软件中,我们需要编写一个接收温度数据的程序,并通过图形界面显示温度值。
为了进一步优化数字温度计设计,我们可以考虑以下几个方面:1. 精度优化:通过选用更高精度的温度传感器,可以提高温度测量的准确性。
此外,在单片机的程序中,我们可以进行数学运算和滤波算法的优化,以提高温度测量的精度。
2. 功耗优化:在设计数字温度计时,我们应该尽可能降低系统的功耗。
例如,可以选择低功耗的单片机,合理设置时钟频率和休眠模式,以减少系统能耗。
3. 可靠性优化:数字温度计在长时间使用时应保持可靠性,尽量减少出现故障的可能性。
为此,我们可以对电路进行严格的电气设计,使用高质量的电子元器件,并进行必要的温度校准和测试。
4. 功能扩展:基于数字温度计的设计还可以考虑添加一些额外的功能,如报警功能、记录功能和远程监测功能等。
这些功能可以通过扩展硬件和改进软件来实现。
总结一下,本文介绍了基于51单片机的数字温度计的设计及其优化。
通过合理的电路设计和软件编程,我们可以实现一个精度高、功耗低、可靠性强的数字温度计。
此外,我们还可以通过优化算法和添加额外功能来进一步提升数字温度计的性能。
基于51单片机和DS18B20的数字温度计设计说明
基于51单片机和DS18B20的数字温度计设计说明
1.硬件设计:
-51单片机:选择合适的型号,如STC89C52或AT89C52等。
-DS18B20温度传感器:该传感器是一种数字温度传感器,具有单总线接口和高精度测量能力。
-接口电路:将51单片机和DS18B20传感器连接起来,要注意电平转换和信号线的阻抗匹配。
2.软件设计:
-初始化:在主函数中,首先对单片机进行初始化设置,包括时钟设置、串口配置等。
-DS18B20通信协议:使用单总线协议与DS18B20传感器进行通信,包括发送复位信号、读写数据等操作。
-温度测量:通过向DS18B20发送读取温度的命令,从传感器中读取温度值并保存。
-数据传输:将温度值转换为可显示的格式,如摄氏度或华氏度,并通过串口输出或LED显示。
3.程序流程:
-初始化单片机,设置时钟和串口参数。
-进入主循环,循环执行以下操作:
-发送复位信号,启动温度转换。
-等待转换完成,发送读取温度命令。
-读取温度值,并进行数据处理转换。
-输出温度值。
4.其他功能:
-可以添加LCD显示模块,将温度值显示在液晶屏上。
-可以添加按键输入模块,通过按键切换温度单位或进行其他操作。
需要注意的是,该设计只是一个简单的示例,实际应用中可能需要根据具体需求进行扩展和修改。
同时,在程序设计过程中,也要注意低功耗和数据稳定性等方面的考虑。
基于51单片机数字温度计系统设计与实现
基于51单片机数字温度计系统设计与实现数字温度计是一种可以测量环境温度并将结果以数字方式显示的设备。
在本次任务中,我们将基于51单片机设计和实现一个数字温度计系统。
本文将介绍数字温度计的原理、硬件设计、软件设计以及系统的实施过程。
首先,让我们来了解一下数字温度计的工作原理。
数字温度计通过传感器获取环境温度的模拟信号,然后将其转换为数字信号进行处理,并最终在数字显示器上显示温度值。
通常,我们使用的传感器是温度敏感电阻或数字温度传感器。
接下来,我们将讨论硬件设计。
在本次任务中,我们使用的是51单片机作为主控制器。
我们需要连接一个温度传感器来测量温度,并将温度值转换为数字信号。
同时,我们还需要连接一个数字显示器,用于显示温度值。
为了实现这些功能,我们需要设计一个电路板,并正确布局电子元件。
另外,我们还需要通过键盘或按钮来控制系统的操作,例如切换温度单位等。
在软件设计方面,我们需要编写程序来完成以下任务:首先,我们需要初始化51单片机的引脚和中断。
然后,我们需要编写一个温度转换的函数,将传感器输出的模拟信号转换为数字信号。
接下来,我们需要编写一个显示函数,将转换后的数字温度值显示在数字显示器上。
最后,我们还可以添加一些功能,例如设置温度单位(摄氏度或华氏度)和存储温度数据等。
在系统实施过程中,我们需要按照以下步骤进行操作:首先,进行硬件的连接和组装。
确保所有电子元件正确连接并固定在电路板上。
然后,烧录编写好的程序到51单片机中。
接下来,我们可以通过设置开关或按键来控制系统的操作。
最后,我们可以测试系统的功能和性能,确保数字温度计正常工作。
值得注意的是,在设计和实现数字温度计系统时,我们需要考虑一些问题。
例如,温度传感器的精度和响应时间,数字显示器的显示精度和分辨率,以及系统的稳定性和可靠性等。
通过合理的设计和选择高质量的元件,我们可以提高系统的性能和可靠性。
总结起来,本次任务中我们基于51单片机设计和实现了一个数字温度计系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于AT89S51的温度计院系:电气与信息工程学院专业:****班级:****学生姓名:****学号:****日期:2012年11月11号第一部分设计要求:采用AT89C51单片机和LCD液晶显示器设计一个数字温度计,当外界温度变化时,显示屏上的温度值也随着变化。
数字温度计的测温范围为-55°C到125°C之间。
第二部分硬件原理框图:AT89C51单片机LCD液晶显示电路晶振振荡电路复位电路温度传感器采集电路电源电路硬件部分主要分为晶振振荡电路、复位电路、LCD液晶显示电路、DS18B20温度传感器采集电路、电源电路等部分组成。
第三部分硬件原理图:硬件模块原理图:1、晶振振荡电路该电路是由两个电容和一个晶振组成,晶振产生基本的时钟信号它给单片机提供时钟信号。
2、复位电路复位的主要作用是把特殊功能寄存器的数据刷新为默认数据,单片机在运算过程中由于干扰等外界原因造成寄存器中数据混乱不能使其正常继续执行程序或产生的结果不正确时均需要复位,以使程序重新开始运行。
3、LCD液晶显示电路经过温度传感器,将采集到的温度信息传给单片机,单片机处理后又将信息发给P0口,P0口与LCD的数据口相连接,液晶屏上会显示采集到的温度值。
4、温度传感器采集电路单线数字温度传感器DS18B20测量温度范围为 -55°C~+125°C,-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为± 2°C 。
DS18B20的管脚排列如下: DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
5、电源电路设计中利用桥式整流和电容滤波以及7805集成稳压来输出+5V电压,以满足AT89C51、LCD1602、DS18B20等器件的工作需求,原理如下:第四部分程序流程图发温度转换开始命令结束图2 温度转换命令子程序流程图N图1 主程序流程图第五部分总结:在本次设计的过程中,我查阅了许多文献资料,从中学到了很多有关系统开发和程序调试方面等的知识。
在软件开发过程中掌握了一些技术难题的解决方法和技巧,巩固和加深了所学知识的理解,能够把所学的知识与实践相结合,培养了认真严谨的学习态度,为以后开发软件积累了大量的经验,提高了分析问题和解决问题的能力。
但是由于认识上的片面和不足,各方面的条件影响也很多,本设计还有待进一步的完善和优化,这些在以后的学习中要注重积累。
第六部分主要程序#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#definedelayNOP() {_nop_();_nop_();_nop_();_nop_();}//_nop_()为一个机器周期sbit DQ = P3^3;sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;uchar code Temp_Disp_Title1[]="Now Temperature:";//液晶第一行显示的字符uchar Temp_Display_Title2[]=" TEMP: ";//第二行前半部分显示的字符uchar code Temperature_Char[8] ={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};uchar CurrentT = 0;uchar TL,TH;uchar Display_Digit[]={0,0,0,0};bit DS18B20_IS_OK = 1;void DelayXus(uint x){uchar i;while(x--){for(i=0;i<200;i++);}}bit LCD_Busy_Check()//对LCD进行读写状态检测{bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN=0;return result;}void Write_LCD_Command(uchar cmd)//LCD写指令函数{while(LCD_Busy_Check());//当LCD_Busy_Check为1时 LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void Write_LCD_Data(uchar dat)//LCD写数据函数{while(LCD_Busy_Check());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void LCD_Initialise()//LCD初始化程序{Write_LCD_Command(0x01);//显示清屏DelayXus(5);Write_LCD_Command(0x38);//显示模式设置DelayXus(5);Write_LCD_Command(0x0c);//不显示光标DelayXus(5);Write_LCD_Command(0x06);//当写一个字符时整屏显示不移动 DelayXus(5);}void Set_LCD_POS(uchar pos)//设置LCD地址{Write_LCD_Command(pos|0x80);}void Delay(uint x){while(--x);}uchar Init_DS18B20()//初始化温度传感器,根据时序图操作命令{uchar status;DQ = 1;//将数据线电平拉高Delay(8);//延时约8us再将DQ拉低DQ = 0;Delay(90);//延时360usDQ = 1;//释放数据线,将数据线拉高Delay(8);//延时32usDQ=1;Delay(60);return status;//返回检测}uchar ReadOneByte()//读时序{uchar i;uchar dat=0;//存储读出的一个字节数据DQ = 1;//先将数据线拉高_nop_();//等待一个机器周期for(i=0;i<8;i++)//一个字节8位{DQ = 0;dat >>= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;}return dat;}void WriteOneByte(uchar dat)//写时序操作{uchar i;for(i=0;i<8;i++){DQ = 0;DQ = dat& 0x01;Delay(5);DQ = 1;dat >>= 1;}}void Read_Temperature()//读取温度函数{if(Init_DS18B20()==1)//如果Init_DS18B20()==1,需要继续检测 DS18B20_IS_OK=0;else //如果Init_DS18B20()!=1时{WriteOneByte(0xcc);//跳过读序列号操作WriteOneByte(0x44);//启动温度装换Init_DS18B20();//初始化DS18B20WriteOneByte(0xcc);//跳过读序列号操作WriteOneByte(0xbe);//读取温度寄存器,前两个分别是温度的高位和低位TL = ReadOneByte();TH= ReadOneByte();DS18B20_IS_OK=1;}}void Display_Temperature()//显示温度函数{uchar i;uchar t = 150, ng = 0;if((TH&0xf8)==0xf8)//符号位是5个1,此时为负温度{TL = ~TL;TH= ~TH+1;if(TL==0x00)TH++;ng = 1;}Display_Digit[0] = df_Table[TL&0x0f];CurrentT = ((TL&0xf0)>>4) | ((TH&0x07)<<4);Display_Digit[3] = CurrentT/100;Display_Digit[2] = CurrentT%100/10;Display_Digit[1] = CurrentT%10;Temp_Display_Title2[11] = Display_Digit[0] + '0';Temp_Display_Title2[10] = '.';Temp_Display_Title2[9] = Display_Digit[1] + '0';Temp_Display_Title2[8] = Display_Digit[2] + '0';Temp_Display_Title2[7] = Display_Digit[3] + '0';if(Display_Digit[3] == 0)Temp_Display_Title2[7] = ' ';if(Display_Digit[2] == 0&&Display_Digit[3]==0) Temp_Display_Title2[8] = ' ';if(ng){if(Temp_Display_Title2[8] == ' ')Temp_Display_Title2[8] = '-';else if(Temp_Display_Title2[7] == ' ')Temp_Display_Title2[7] = '-';elseTemp_Display_Title2[6] = '-';}Set_LCD_POS(0x00);for(i=0;i<16;i++){Write_LCD_Data(Temp_Disp_Title1[i]);}Set_LCD_POS(0x40);for(i=0;i<16;i++){Write_LCD_Data(Temp_Display_Title2[i]);}Set_LCD_POS(0x4d);Write_LCD_Data(0x00);Set_LCD_POS(0x4e);Write_LCD_Data('C');};void main(){LCD_Initialise();Read_Temperature();Delay(50000);Delay(50000);while(1){Read_Temperature();if(DS18B20_IS_OK)Display_Temperature();DelayXus(100);}}。