《基于单片机温度检测系统课程设计(24页).doc》由会员分享,可在线阅读,更多相关《基于单片机温度检测系统课程设计(24页).doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-基于单片机温度检测系统课程设计-第 21 页基于单片机温度检测系统设计【摘要】温度是表征物体冷却程度的物理量,也是一种最基本的环境参数。在农工业生产及日常生活中,对温度的测量及控制始终占据着极其重要的地位。目前,以DS18B20为代表的新型单总线数字是温度传感器和A/D转换器于一体,直接输出数字量,与单片机接口结构简单,广泛用于距离远,节点分布多的场合,具有较强的推广应用价值,采用单片机对它们进行控制不仅具有控制方便,简单灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品质量,因此,智能化温度传感技术正被广泛地采用。本温度设计采用现在流行的AT89C52单片机,配以
2、DS18B20数字温度传感器,该温度传感器可自行设置温度上下限,单片机将检测到的温度信号与输入的温度上,下限进行比较。本设计加入了1602液晶显示屏显示,使整个设计更加完整,灵活。随着社会经济的不断发展,现代农业生产离不开环境控制,本文在对国内外温室智能控制进行深入分析的基础上,针对温室智能化控制存在的诸多因子,将智能传感器监测和单片机控制相结合,提出了基于单片机的温度检测系统设计方案。本系统采用层次化、模块化设计,整个系统由数据采集系统、单片机控制系统、计算机监控系统组成。系统以单片机为核心,以多个温度、湿度传感器作为测量元件,通过单片机与智能传感器相连,采集存储智能传感器的测量数据。在单片
3、机系统中,还要实现程序的扩展存储、数据的实时显示、超限语音报警和数据辅助存储功能。单片机作为监控计算机与智能传感器连接的中心。本设计主要做了如下几方面的工作:一是确定系统的总体设计方案,包括其功能设计;设计原则;组成与工作原理;二是进行智能传感器的硬件电路设计;包括硬件电路构成及测量原理;温度传感器的选择;单片机的选择;输入输出通道设计;三是进行了调试和仿真,包括硬件仿真和软件仿真。 目 录第一章 引 言11.1设计目的11.2设计产品功能2第二章 总体设计方案2第三章 温度控制系统设计基础43.1温度传感器的历史发展43.2 DS18B20数字温度传感器简介53.2.1 温度传感器内部结构5
4、3.2.2 DS18B20产品的特点63.2.3 DS18B20引脚图及引脚功能介绍63.2.4 DS18B20的使用方法73.3 DS18B20的测温原理8第四章 系统总体设计94.1 1602液晶显示器和单片机接口技术94.1.1 1602液晶显示器简介94.1.2 功能管脚104.1.3 特性应用104.1.4 1602与单片机接口电路114.2 单片机单元114.2.1 AT89C51单片机简介114.2.2 晶振电路144.2.3复位电路144.3系统的硬件组成及设计原理15第五章 系统软件设计155.1程序流程图155.2程序16总 结26致 谢27参 考 文 献28附 录29第一
5、章 引 言随着社会的发展,科技的进步,以及测温仪器在整个领域的应用,智能化已实现待温度控制系统发展的主流方向。温度控制不好可能引起生产安全,产品质量和产量等一系列问题,智能温度控制是许多机器的重要构成部分,它的功能是将温度控制在所需要的温度范围内,然后进行共建的加工和处理,不论是在生活中还是工业生产过程中,温度的变化对生活,生产的某些细节环节都会造成不同程度的影响,所以适时地对温度进行控制,设计一个温度控制系统,具有广泛的应用前景与实际意义。温度是科技最基本的物理量之一,物理,化学,生物等学科都离不开温度,在工业生产和实验研究中,温度常常是表征对象和过程状态的最重要参数之一。比如,发电厂锅炉的
6、温度必须控制在一定范围之一;许多化学反应的工艺过程必须在适当的温度下才能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油,柴油,煤油等产品。没有合适的温度,许多电子设备就不能正常工作。因此,各行各业对温度控制的要求越来越高,可见温度的测量和控制是非常重要的。单片机在电子产品的应用已越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。随着温度控制器应用范围的日益广泛和多样性,各种适用于不同场合的智能温度控制系统应运而生。1.1设计目的本设计的内容是温度测试控制系统,控制对象是温度,温度控制在日常生活及工业领域相当广泛,比如温度,水池,发酵缸等场所的温度控制。而以往
7、温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止意外发生。针对此问题,本系统设计的目的是本课题综合了现代测控技术、电子信息、计算机技术专业领域方方面面的知识,具有综合性、科学性、代表性,可全面检验和促进学生的理论素养和工作能力。掌握一个显示屏和一个温度传感器的原理、性能、使用特点和方法,利用单片机对系统进行编程。实现一种可连续高精度调温的温度控制系统,它应用广泛、功能强大、小巧美观、便于携带,是一款既实用又廉价的控制系统。本课题的研究可以使学生更好的掌握基于单片机应用系统的分析与设计方法,培养创新意识、协作精神和理论联系实际的学风,提高电子产品研发素质、增强针对实际应用系
8、统设计制作的能力。1.2设计产品功能通过搭建51单片机最小系统及周边电路,可是本产品具有以下功能及特点:1. 实现温度计功能,可实现实时显示和报警。2. 实现数字万年历功能。3. 所有I/O口全部引出,方便进行二次开发。第二章 总体设计方案温度检测系统有着共同的特点:测量点多,环境复杂,布线分散,现场离控制室远等。若采用一般温度传感器采集温度信号,则需设计信号调理电路,A/D转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。这样,由于各种因素会造成检测系统较大的偏差;又因检测环境复杂,测量点多,信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降,所以
9、温度检测系统的设计关键在于两部分:温度传感器的选择和主控单元的设计。温度传感器应用范围广,使用数量庞大,也高居各类传感器之首。首先由温度传感器DS18B20采集温度数据,经AT8C52单片机中进行运算处理,并液晶屏显示当前温度,由单片机控制是否发出控制信号及报警信号,从而实现恒温监控。在整个过程中,温度始终得以显示,设定温度过程中显示设定温度值,以便于操作。设定完毕后,改为显示当前测定温度值。本系统的电路设计主要有六部分主成:主控制部分芯片采用单片机AT89C51显示部分采用1602液晶显示屏实现;温度采集部分采用DS18B20温度传感器;报警部分蜂鸣器的使用;供电部分;独立按键部分用于控制万
10、年历1. 主控制部分此部分是电路的核心部分,系统控制采用了单片机AT89C51,有Atmel公司生产的AT89C51是一种低功耗,高性能的微控制器,具有8K在线系统可编程Flash存储器,单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个就能满足电路系统的设计要求,很适合便携手持式产品的设计使用2显示电路采用技术成熟,价格便宜的1602液晶显示器作为输出显示。本次设计使用的1602液晶显示器为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置128个字符的ASCII字符集字库,只有并行接口,无串口接口。3. 温度采集部分DS18B20温度传感器是美国DALL
11、AS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。可直接读出被测温度。这一部分主要完成对温度温度信号的采集和转换工作,由DS18B20数字式温度传感器及其与单片机的接口部分主成,DS18B20数字式温度传感器把采集到的温度通过数据引脚传到单片机接受温度并存储,此部分只用到DS18B20和单片机,硬件很简单。DS18B20数字式温度传感器通常采用两种方式供电,一种是寄生电源供电方式,另一种是采用外部电源供电方式,此时DS18B20的1引脚接地,2引脚作为信号线,3引脚接电源,本设计采用
12、外部供电方式,外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。 图2-2 DS18B20与单片机接口电路4 报警部分此处三极管选取型号为8550的PNP型三极管,管脚排列见下图图2-3 蜂鸣器电路5. 独立按键部分图2-4 独立按键电路6. 单片机最小系统图2-5 最小系统第三章 温度控制系统设计基础3.1温度传感器的历史发展温度的测量是从热胀冷缩开始,水银温度计至今仍是各种温度计测量的计量标准,可是它的缺点是只能近距离观测,而且水银有毒玻璃管易碎,代替水银的有酒精温度计和金属簧片温度计,它们虽然没有毒性,但
13、测量精度较低,只能作为一个概略指示,不过在居民宅中使用已可满足要求,在工业生产和实验研究中心为了配合远传仪表指示,出现了许多不同的温度检测方法,常用的有电阻式、热电偶式、PN结型、辐射型、光纤式及石英谐振型等。它们都是基于温度变化引起其物理参数的变化的原理。随着大规模的集成电路工艺的提高,出现了多种集成的数字化温度传感器。然而测量温度的关键就是温度传感器,温度传感器的发展经历了三个发展阶段: 传统的分立式温度传感器;模拟集成温度传感器;只能集成温度传感器。目前典型的温度测控系统由模拟式温度传感器和单片机组成。由于模拟式温度传感器输出的模拟信号必须经过A/D转换环节获得数字信号后才能与单片机等微
14、处理器连接,因而使得硬件电路结构复杂,成本较高。因此目前国际上新型温度传感器正从模拟向数字式,从集成化向智能化,网络化的方向飞速发展,以DS18B20为代表的新型单总线数字式温度传感器集温度测量和A/D转换于一体,直接输出数字量,与单片机接口电路结构简单,广泛使用距离远、节点分布多的场合,具有较强的推广和应用价值。3.2 DS18B20数字温度传感器简介3.2.1 温度传感器内部结构DS18B20数字温度传感器是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。图 3-1温度
15、传感器内部结构3.2.2 DS18B20产品的特点 独特的单线接口仅需一个端口引脚进行通讯 简单的多点分布应用 无需外部器件 可通过数据线供电 零待机功耗 测温范围-55+125,以0.5递增。华氏器件-67+2570F,以0.90F 递增 温度以9 位数字量读出 温度数字量转换时间200ms(典型值) 用户可定义的非易失性温度报警设置 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件 应用包括温度控制、工业系统、消费品、温度计或任何热感测系统3.2.3 DS18B20引脚图及引脚功能介绍TO92封装的DS18B20的引脚排列见图3-2,其引脚功能描述见表3-1。图3-2 DS18
16、B20的引脚图表3-1 DS18B20详细引脚功能描述序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。3.2.4 DS18B20的使用方法由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B2
17、0有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能
18、完成。DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。3.3 DS18B20的测温原理DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55+125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出;其工
19、作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路.低温度系数晶振的震荡频率受温度的影响很小,用于产生固定频率脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,途中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数晶振器产生的时钟脉冲进行计数,进而完成温度测量,计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的一个基值,减法计数器1对低温度系数晶振产生的脉冲信号
20、进行减法计数。当减法计数器1的预值减到0时,温度寄存器的值将加1,减法计数器1的预值将从新被装入,减法计数器1从新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环,直到减法计数器2计数到0时,停止温度寄存器值得累加,此时温度寄存器中的数值即为所测温度。对于DS18B20的使用,多采用单片机实现数据采集,处理时,将DS18B20信号线与单片机一位口线相连,单片机可挂接多片DS18B20,从而实现多点温度检测系统。第四章 系统总体设计4.1 1602液晶显示器和单片机接口技术4.1.1 1602液晶显示器简介1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字
21、符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示
22、效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。4.1.2 功能管脚图4-1 1602管脚图1602采用标准的16脚接口,其中: 第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择
23、数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。4.1.3 特性应用+3.3V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。4
24、.1.4 1602与单片机接口电路系统显示电路由单片机AT89C51、字符液晶显示器LM016L和1Kx8的排阻构成。单片机实现对LCD命令和显示数据的读写控制功能,P0口作数据口,与LM016L的D0D7相接,在P0口D0D7数据线之间分别接8个上拉电阻,以确保电路能够正常显示。AT89C51的P1口作为LCD的控制线,P2.0P2.2分别接LM016L的RS、RW和E端;LM016L的其它三个控制端VDD和VSS、VEE分别接电源和地。系统显示电路组成如图所示。图4-2 1602与单片机接口4.2 单片机单元4.2.1 AT89C51单片机简介AT89C51是一种带4K字节闪烁可编程可擦除
25、只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。它的管脚图如下图所示。图4-3 AT89C52各引脚图1主要特性:(1)与MCS-51 兼容(2)42K字节可编程闪烁存储器(3)寿命:1000写/擦循环(4)数据保留时间(5)
26、10年全静态工作:(6)0Hz-24Hz三级程序存储器锁定(7)128*8位内部RAM(8)32可编程I/O线(9)5个中断源(10)可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路2管脚说明: VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收
27、输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功
28、能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选
29、通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外
30、,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。4.2.2
31、晶振电路振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。表4-1AT89C52主要功能特性主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式
32、软件设置睡眠和唤醒功能4.2.3复位电路复位操作有上电自动复位相按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图18(a)所示。这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图18(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图54(c)所示:(a)上电复位 (b)按键电平复位 (c)按键脉冲复位图3-3复位电路上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复
33、位信号高电平持续时间大于2个机器周期。本系统的复位电路采用图5-5(b)上电复位方式。4.3系统的硬件组成及设计原理多功能按键温度传感器复位电路AT89S52显示电路声光报警图3.-1硬件电路图第五章 系统软件设计5.1程序流程图5.2程序#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P25 ; /定义DS18B20端口DQ sbit BEEP=P27 ; /蜂鸣器驱动线bit presence ;sbit LCD_RS = P24 ; sbit LCD_RW = P21 ;sbi
34、t LCD_EN = P26 ;uchar code cdis1 = DS18B20 OK ;uchar code cdis2 = TEMP: . C ;uchar code cdis3 = DS18B20 ERR0R ;uchar code cdis4 = PLEASE CHECK ;unsigned char data temp_data2 = 0x00,0x00 ;unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00 ;unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x0
35、3,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;void beep() ; unsigned char code mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;void delay1(int ms)unsigned char y ;while(ms-)for(y = 0 ; y250 ; y+)_nop_() ;_nop_() ;_nop_() ;_nop_() ;/
36、*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */bit lcd_busy()bit result ;LCD_RS = 0 ;LCD_RW = 1 ;LCD_EN = 1 ;delayNOP() ;result = (bit)(P0&0x80) ;LCD_EN = 0 ;return(result) ; /*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */void lcd_wcmd(uchar cmd)while(lcd_busy() ;LCD_RS = 0 ;LCD_RW = 0 ;LCD_EN
37、= 0 ;_nop_() ;_nop_() ; P0 = cmd ;delayNOP() ;LCD_EN = 1 ;delayNOP() ;LCD_EN = 0 ; /*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */void lcd_wdat(uchar dat)while(lcd_busy() ;LCD_RS = 1 ;LCD_RW = 0 ;LCD_EN = 0 ;P0 = dat ;delayNOP() ;LCD_EN = 1 ;delayNOP() ;LCD_EN = 0 ; /* LCD初始化设定 */void lcd_init()delay1(1
38、5) ; lcd_wcmd(0x01) ; /清除LCD的显示内容 lcd_wcmd(0x38) ; /16*2显示,5*7点阵,8位数据delay1(5) ;lcd_wcmd(0x38) ; delay1(5) ;lcd_wcmd(0x38) ; delay1(5) ;lcd_wcmd(0x0c) ; /显示开,关光标delay1(5) ;lcd_wcmd(0x06) ; /移动光标delay1(5) ;lcd_wcmd(0x01) ; /清除LCD的显示内容delay1(5) ;/* 设定显示位置 */void lcd_pos(uchar pos)lcd_wcmd(pos | 0x80)
39、; /数据指针=80+地址变量/*自定义字符写入CGRAM */void writetab() unsigned char i ;lcd_wcmd(0x40) ; /写CGRAMfor (i = 0 ; i 0 ; i-)DQ = 0 ; / 给脉冲信号dat = 1 ;DQ = 1 ; / 给脉冲信号if(DQ)dat |= 0x80 ;Delay(4) ;return (dat) ;/* 写一个字节 */WriteOneChar(unsigned char dat)unsigned char i = 0 ;for (i = 8 ; i 0 ; i-)DQ = 0 ;DQ = dat&0x0
40、1 ;Delay(5) ;DQ = 1 ;dat=1 ;/* 读取温度 */Read_Temperature(void)Init_DS18B20() ;WriteOneChar(0xCC) ; / 跳过读序号列号的操作WriteOneChar(0x44) ; / 启动温度转换Init_DS18B20() ;WriteOneChar(0xCC) ; /跳过读序号列号的操作WriteOneChar(0xBE) ; /读取温度寄存器temp_data0 = ReadOneChar() ; /温度低8位temp_data1 = ReadOneChar() ; /温度高8位 /* 数据转换与温度显示 *
41、/Disp_Temperature()display4=temp_data0&0x0f ;display0=ditabdisplay4+0x30 ; /查表得小数位的值display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4) ;display3=display4/100+0x30 ;display1=display4%100 ;display2=display1/10+0x30 ;display1=display1%10+0x30 ;if(display3=0x30) /高位为0,不显示display3=0x20 ; if(display2=0x30)
42、/次高位为0,不显示display2=0x20 ;lcd_pos(0x48) ; lcd_wdat(display3) ; /百位数显示 lcd_pos(0x49) ; lcd_wdat(display2) ; /十位数显示 lcd_pos(0x4a) ; lcd_wdat(display1) ; /个位数显示 lcd_pos(0x4c) ; lcd_wdat(display0) ; /小数位数显示 /* 蜂鸣器响一声 */void beep()unsigned char y ;for (y=0 ;y100 ;y+)Delay(60) ;BEEP=!BEEP ; /BEEP取反BEEP=1 ;
43、 /关闭蜂鸣器Delay(40000) ;/* DS18B20 OK 显示菜单 */void Ok_Menu ()uchar m ;lcd_init() ; /初始化LCD lcd_pos(0) ; /设置显示位置为第一行的第1个字符m = 0 ;while(cdis1m != 0) /显示字符lcd_wdat(cdis1m) ;m+ ;lcd_pos(0x40) ; /设置显示位置为第二行第1个字符m = 0 ;while(cdis2m != 0)lcd_wdat(cdis2m) ; /显示字符m+ ;writetab() ; /自定义字符写入CGRAMdelay1(5) ;lcd_pos(0x4d) ;lcd_wdat(0x00) ; /显示自定义字符/* DS18B20 ERROR 显示菜单 */void Error_Menu ()uchar m ;lcd_init() ; /初始化LCD lcd_pos(0) ; /设置显示位置为第一行的第1个字符m = 0 ;while(cdis3m != 0) /显示字符lcd_wdat(cdis3m) ;m+ ;lcd_pos(0x40) ; /设置显示位置为第二行第1个字符m = 0 ;while(cdis4m !=
限制150内