1、1.前言 随着人们生活水平不断提高,单片机控制无疑是人们追求目的之一,它所给人带来以便也是不可否定,其中数字温度计就是一种典型例子,但人们对它规定越来越高,要为当代人工作、科研、生活、提供更好更以便设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本保温箱温控系统所简介与老式温度计相比,具备读数以便,测温范畴广,控制精确,负载广泛,有LED显示相应工作方式,其输出温度采用数字显示,重要用于对测温比较精确场合,或科研实验室使用,该设计控制器使用单片机 STC89C51,测温传感器使用 DS18B20,用四位一体共阳极 LED 数码管显示数据,用继电器驱动负载,用PNP三极管驱
2、动。2.系统概述单片机技术已经普及到咱们生活,工作,科研,各个领域,已经成为一种比较成熟技术,本文将简介一种基于单片机保温箱温控系统研究,本恒温箱属于多功能多用途,可以设立上下控制温度,当温度不在设立范畴内时,可以驱动相应负载工作,同步声光报警。随着当代工农业技术发展及人们对生活环境规定提高,人们也迫切需要检测与控制温度。本文通过采用继电器作为温度重要控制元件,它可以直接驱动2500W功率负载,可以应用于家庭、小型工厂等小电量用电设备,亦可以用继电器来控制交流接触器线圈等,就可以实现对大功率负载控制,应用十分广泛。采用蜂鸣器作为电声元件报警,LED发光批示相应加热或制冷工作。这种保温箱温控系统
3、构造简朴,可操作性强,应用广泛。工作时,温度控制范畴为上下限之间,当前环境温度若超过设定临界温度,由单片机发出控制和报警信号,从而负载控制温度变化。基于单片机保温箱温控系统大某些使用是在实验室、工业、医药、农业中。在实验室中特别是生物实验室,咱们为了得到更加准的确验数据,对于恒温实验环境规定严格。因此针对实验室来说,恒温箱作用显得相称重要。在工业生产过程中咱们对于恒温箱规定也相对更加严格,例如产品热解决、冷解决等,直接影响着产品质量。在医药方面医用恒温箱重要用于药物和试剂储存、运送,疫苗、血液冷藏保温,透析液加温、生理盐水加温等。 由以上咱们可以明显看出恒温箱重要作用。在农业温室大棚中,温控系
4、统对于农作物生长至关重要,对于农业方面,以至于生活中各个方面温控系统永远处在相称重要地位。核心词:STC89C51单片机 温度控制 恒温箱 DS18B20 3 设计规定与方案论证一方面明确设计规定,再整体讨论和拟定方案,一一攻破设计难点。3.1 设计规定基本范畴0-99 ;精度误差不大于 0.1 ;数码管直读显示;可以温度控制;扩展功能:可以任意设定温度上下限控制及报警功能,可以驱动加热和制冷负载。3.2 系统基本方案选取和论证 3.2.1 单片机芯片选取方案和论证由于单片机具备如下诸多长处,被咱们选定为制作该作品首选芯片单片机特点:(1)高集成度,体积小,高可靠性 单片机将各功能部件集成在一
5、块晶体芯片上,集成度很高,体积自然也是最小。芯片自身是按工业测控环境规定设计,内部布线很短,其抗工业噪音性能优于普通通用CPU。单片机程序指令,常数及表格等固化在ROM中不易破坏,许多信号通道均在一种芯片内,故可靠性高。 (2)控制功能强 为了满足对对象控制规定,单片机指令系统均有极丰富条件:分支转移能力,I/O口逻辑操作及位解决能力,非常合用于专门控制功能。 (3)低电压,低功耗,便于生产便携式产品 为了满足广泛使用于便携式系统,许多单片机内最低工作电压仅为1.8V3.6V,而工作电流仅为数百微安。 (4)易扩展 片内具备计算机正常运营所必须部件。芯片外部有许多供扩展用三总线及并行、串行输入
6、/输出管脚,很容易构成各种规模计算机应用系统。 (5)优秀性价比 单片机性能极高。为了提高速度和运营效率,单片机已开始使用RISC流水线和DSP等技术。单片机寻址能力也已突破64KB限制,有已可达到1MB和16MB,片内ROM容量可达62MB,RAM容量则可达2MB。由于单片机广泛使用,因而销量极大,各大公司商业竞争更使其价格十分低廉,其性能价格比极高。 方案一:采用STC89C51芯片作为硬件核心。STC89C51内部具备4KB ROM 存储空间,512字节数据存储空间,带有2K字节EEPROM存储空间,与MCS-51系列单片机完全兼容,STC89C51可以通过串口下载。方案二:采用AT89
7、S51。AT89S51片内具备4K字节程序存储空间,256字节数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具备在线编程可擦除技术。两种单片机都完全可以满足设计需要,STC89C51相对ATS89C51价格便宜,且下载简朴以便。考虑到以便因素,因而选用STC89C51。3.2.2 温度传感器设计方案论证运用物质各种物理性质随温度变化规律把温度转换为电量传感器。这些呈现规律性变化物理性质重要有体。温度传感器是温度测量仪表核心某些,品种繁多。按测量方式可分为接触式和非接触式两大类,按照传感器材料及电子元件特性分为热电阻和热电偶两类。当代信息技术三大基本是信息采集(即传感
8、器技术)、信息传播(通信技术)和信息解决(计算机技术)。温度传感器发展大体经历了如下三个阶段;(1)老式分立式温度传感器(含敏感元件);(2)模仿集成温度传感器/控制器;(3)智能温度传感器。国际上新型温度传感器正从模仿式向数字式、由集成化向智能化、网络化方向发展。在20世纪90年代中期最早推出智能温度传感器,采用是8位A/D转换器,其测温精度较低,辨别力只能达到1C。国外已相继推出各种高精度、高辨别力智能温度传感器,所用是912位A/D转换器,辨别力普通可达0.50.0625C。由美国DALLAS半导体公司新研制DS1624型高辨别力智能温度传感器,能输出13位二进制数据,其辨别力高达0.0
9、3125C,测温精度为0.2C。为了提高多通道智能温度传感器转换速率,也有芯片采用高速逐次逼近式A/D转换器。当前,智能温度传感器总线技术也实现了原则化、规范化,所采用总线重要有单线(1-Wire)总线、I2C总线、SMBus总线和spI总线。温度传感器作为从机可通过专用总线接口与主机进行通信。方案一:由于本设计是测温电路,可以使用热敏电阻之类器件运用其感温效应,在将随被测温度变化 电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据解决,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路,感温电路比较麻烦。方案二:进而考虑到用温度传感器,在单片机电路设计中
10、,大多都是使用传感器,因此这是非常容易想到,因此可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计规定。从以上两种方案,两种都完全可以满足设计需要,很容易看出,采用方案二,电路比较简朴,软件设计也比较简朴,故采用了方案二。 3.2.3 显示模块方案论证方案一:1602液晶模块1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等显示模块它有若干个5X7或者5X11等点阵字符位构成,每个点阵字符位都可以显示一种字符。每位之间有一种点距间隔每行之间也有间隔起到了字符间距和行间距作用,正由于如此因此她不能显示图形 它长处是微功耗
11、、体积小、显示内容丰富、超薄轻巧。方案二:数码管显示 数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一种发光二极管单元(多一种小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管:按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管阳极接到一起形成公共阳极(COM)数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管阴极为低电平时,相应字段就点亮,当某一字段阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管阴极接到一起形成公共阴极(COM)数码
12、管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管阳极为高电平时,相应字段就点亮,当某一字段阳极为低电平时,相应字段就不亮。由于它价格便宜使用简朴在电器特别是家电领域应用极为广泛。综上所诉:LCD1602虽然显示较全;但数码管以完全能显示温度值,价格也差6倍之多,数码管更适合本设计,固本设计用数码管作为显示模块。3.3 电路设计最后方案决定综上各方案所述,对本次作品方案选定:采用STC89C51单片机作为主控制系统;采用DS18B20为传感器;采用数码管作为显示屏件。4重要元件简介4.1 STC89C51简介STC89C51是由宏晶科技公司生产与工业原则MCS-51指
13、令集和输出管脚相兼容单片机。(1)中央解决器(CPU)中央解决器是单片机核心,完毕运算和控制功能。8051CPU能解决8位二进制数或代码。(2)内部数据存储器(内部RAM)8051芯片中共有256个RAM单元,但其中后128单元被专用寄存器占用,能作为寄存器供顾客使用只是前128单元,用于存储可读写数据。因而普通所说内部数据存储器就是指前128单元,简称内部RAM。(3)内部程序存储器(内部ROM)8051共有4KB掩膜ROM,用于存储程序、原始数据或表格,因而,称之为程序存储器,简称内部ROM。(4)定期/计数器8051共有两个16位定期/计数器,以实现定期或计数功能,并以其定期或计数成果对
14、计算机进行控制。 (5)并行I/O口 MCS-51共有4个8位I/O口(P0、P1、P2、P3),以实现数据并行输入/输出。(6)串行口8051单片机有一种全双工串行口,以实现单片机和其他设备之间串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。(7)中断控制系统8051单片机中断功能较强,以满足控制应用需要。8051共有5个中断源,即外中断两个,定期/计数中断两个,串行中断一种。所有中断分为高档和低档共两个优先级别。 (8) 时钟电路8051芯片内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。系统容许晶振频率普通为6 MH
15、z和12 MHz。从上述内容可以看出,MCS-51虽然是一种单片机芯片,但作为计算机应当具备基本部件它都涉及,因而,事实上它已是一种简朴微型计算机系统了。4.1.1 STC89C51重要功能及PDIP封装STC89C51重要功能如表1所示,其PDIP封装如图1所示重要功能特性兼容MCS51指令系统8K可重复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定期/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设立睡眠和唤醒功能表1:STC89C51重要功能4.1.2 S
16、TC89C51引脚简介 主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路输入端XTAL2(Pin20):片内振荡电路输出端控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上浮现2个机器周期高电平将使单片机复位。ALE/PROG(Pin30):地址锁存容许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)STC89C51单片机有4组8位可编程I
17、/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7图1:STC89C51封装图4.1.3 单片机最小系统:当在STC89C51单片机RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作,按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端通过电阻
18、与电源VCC接通而实现。最小系统如图2所示。图2 单片机最小系统电路(1)内部方式时钟电路在8051芯片内部有一种高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一种稳定自激振荡器,这就是单片机时钟电路,如图3-3所示。时钟电路产生振荡脉冲通过触发器进行二分频之后,才成为单片机时钟脉冲信号。请读者特别注意时钟脉冲与振荡脉冲之间二分频关系,否则会导致概念上错误。普通地,电容C1和C2取30pF左右,晶体振荡频率范畴是1.212MHz。晶体振荡频率高,则系统时钟频率也高,单片机运营速度也就快。805
19、1在普通应用状况下,使用振荡频率为6MHz或12MHz。图 2-3 时钟振荡电路(2)外部方式时钟电路在由多片单片机构成系统中,为了各单片机之间时钟信号同步,应当引入惟一公用外部脉冲信号作为各单片机振荡脉冲。这时,外部脉冲信号是经XTAL2引脚注入,其连接如图3-4所示。图 2-4 外部时钟源接法(3) 时序时序是用定期单位来阐明。8051时序定期单位共有4个,从小到大依次是:节拍、状态、机器周期和指令周期。它们之间关系如下:1)一种振荡脉冲周期为节拍;2)一种状态就包括两个节拍;3)一种机器周期宽度为6个状态;4)一条指令周期由若干个机器周期构成。 (4) 单片机复位电路单片机复位是使CPU
20、和系统中其她功能部件都处在一种拟定初始状态,并从这个状态开始工作,复位后PC=0000H,使单片机从第一种单元取指令。单片机复位条件是:必要使RST/VPD 或RST引脚加上持续两个机器周期(即24个振荡周期)高电平。若时钟频率为12 MHz,每机器周期为1s,则只需2s以上时间高电平,在RST引脚浮现高电平后第二个机器周期执行复位。单片机复位期间不产生ALE和PSEN信号,即ALE=1和PSEN=1。这表白单片机复位期间不会有任何取指操作。复位后,内部各专用寄存器状态如下:PC: 0000H TMOD:00HACC: 00H TCON: 00HB: 00H TH0: 00HPSW: 00H
21、TL0: 00HSP: 07H TH1: 00HDPTR: 0000H TL1: 00HP0P3:FFH SCON: 00HIP: *00000B SBUF: 不定IE: 0*00000B PCON: 0*0000其中,*表达无关位。注意:(1)复位后PC值为0000H,表白复位后程序从0000H开始执行,这一点在实训中已简介。(2)SP值为07H,表白堆栈底部在07H。普通需重新设立SP值。(3)P0P3口值为FFH。P0P3口用作输入口时,必要先写入“1”。单片机在复位后,已使P0P3口每一端线为“1”,为这些端线用作输入口做好了准备。电路以STC89C51单片机最小系统为控制核心,测温电
22、路由DS18B20提供,输入某些采用三个独立式按键S1、S2、S3。数码管显示某些。详细电路连接,详见附录1。4.2 DS18B20传感器简介4.2.1 DS18B20概述在当代检测技术中,传感器占据着不可动摇重要位置。主机对数据解决能力已经相称强,但是对现实世界中模仿量却无能为力。如果没有各种精准可靠传感器对非电量和模仿信号进行检测并提供可靠数据,那计算机也无法发挥她应有作用。传感器把非电量转换为电量,通过放大解决后,转换为数字量输入计算机,由计算机对信号进行分析解决。从而传感器技术与计算机技术结合起来,对自动化和信息化起重要作用。采用各种传感器和微解决技术可以对各种工业参数及工业产品进行测
23、控及检查,精确测量产品性能,及时发现隐患。为提高产品质量、改进产品性能,防止事故发生提供必要信息和更可靠数据。由于系统工作环境比较恶劣,且对测量规定比较高,因此选取适当传感器很重要。当前,国际上新型温度传感器正从模仿式向数字式、从集成化向智能化和网络化方向飞速发展。智能温度传感器DS18B20正是朝着高精度、多功能、总线原则化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技方向迅速发展。因而,智能温度传感器DS18B20作为温度测量装置已广泛应用于人民寻常生活和工农业生产中。美国DALLAS公司生产 DS18B20可组网数字温度传感器芯片外加不锈钢保护管封装而成,具备耐
24、磨耐碰,体积小,使用以便,封装形式多样,合用于各种狭小空间设备数字测温和控制领域。有独特单线接口方式,DS1820在与微解决器连接时仅需要一条口线即可实现微解决器与DS1820双向通讯;其测温范畴 55125,固有测温辨别率0.5;支持多点组网功能;各种DS1820可以并联在唯一三线上,实现多点测温;工作电源为35V/DC;在使用中不需要任何外围元件。18B20共有三种形态存储器资源,它们分别是:ROM 只读存储器,用于存储DS18B20ID编码,其前8位是单线系列编码(DS18B20编码是19H),背面48位是芯片唯一序列号,最后8位是以上56位CRC码(冗余校验)。数据在出产时设立不由顾客
25、更改。DS18B20共64位ROM。RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后数据值信息,第3、4个字节是顾客EEPROM(惯用于温度报警值储存)镜像。在上电复位时其值将被刷新。第5个字节则是顾客第3个EEPROM镜像。第6、7、8个字节为计数寄存器,是为了让顾客得到更高温度辨别率而设计,同样也是内部温度转换、计算暂存单元。第9个字节为前8个字节CRC码。EEPROM 非易失性记忆体,用于存储长期需要保存数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以以便顾
26、客操作。DS18B20性能特点如下:(1) 采用DALLAS公司独特单线接口方式:DS18B20与微解决器连接时仅需要一条口线即可实现微解决器与DS18B20双向通讯; (2)在使用中不需要任何外围元件;(3)可用数据线供电,供电电压范畴:+3.0V+5.5V;(4)测温范畴:-55+125。固有测温辨别率为0.5。当在-10+85范畴内,可保证测量误差不超过0.5,在-55+125范畴内,测量误差也不超过2;(5)通过编程可实现912位数字读数方式;(6)顾客可自设定非易失性报警上下限值;(7)支持多点组网功能,各种DS18B20可以并联在唯一三线上,实现多点测温(8)负压特性,即具备电源反
27、接保护电路。当电源电压极性反接时,能保护DS18B20不会因发热而烧毁,但此时芯片无法正常工作;(9)DS18B20转换速率比较高,进行9位温度值转换只需93.75ms;(10)适配各种单片机或系统;(11)内含64位激光修正只读存储ROM,扣除8位产品系列号和8位循环冗余校验码(CRC)之后,产品序号占48位。出厂前产品序号存入其ROM中。在构成大型温控系统时,容许在单线总线上挂接多片DS18B20。4.2.2 DS18B20引脚简介图3:DS18B20引脚各引脚功能为:I/O为数据输入/输出端(即单线总线),它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。UDD是可供选用外部电源端,不
28、用时接地,GND为地,NC空脚。4.2.3 DS18B20内部构造DS18B20内部构造重要涉及7某些:寄生电源、温度传感器、64位激光(loser)ROM与单线接口、高速暂存器(即便筏式RAM,用于存储中间数据)、TH触发寄存器和TL触发寄存器,分别用来存储顾客设定温度上下限值、存储和控制逻辑、位循环冗余校验码(CRC)发生器。图4:DS18B20内部构造4.2.4 DS18B20程序流程图否是发出温度转换命令写入18B20读温度前复位显示测温点位置18B20复位开始18B20存在?延时发出读温度命令写入18B20读入温度值数据返回延时图5程序流程图4.3数码管简介数码管是一种半导体发光器件
29、,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一种发光二极管单元(多一种小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管; 按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管阳极接到一起形成公共阳极(COM)数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管阴极为低电平时,相应字段就点亮,当某一字段阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管阴极接到一起形成公共阴极(COM)数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管阳
30、极为高电平时,相应字段就点亮,当某一字段阳极为低电平时,相应字段就不亮。图5:数码管数码显示屏是一种由LED发光二极管组合显示字符显示屏件,它使用了8个Led发光二极管,其中七个用于显示字符,一种显示小数点,因此通称为七段发光二极管数码显示屏。4位一体数码管,其内部段已连接好,引脚如图所示(数码管正面朝自己,小数点在下方)。a、b、c、d、e、f、g、dp为段引脚,S1、S2、S3、S4分别表达四个数码管位。4.4继电器简介 电磁继电器普通由铁芯、线圈、衔铁、触点簧片等构成。只要在线圈两端加上一定电压,线圈中就会流过一定电流,从而产生电磁效应,衔铁就会在电磁力吸引作用下克服返回弹簧拉力吸向铁芯
31、,从而带动衔铁动触点与静触点(常开触点)吸合。当线圈断电后,电磁吸力也随之消失,衔铁就会在弹簧反作用力返回本来位置,使动触点与本来静触点(常闭触点)释放。这样吸合、释放,从而达到了在电路中导通、切断目。对于继电器“常开、常闭”触点,可以这样来区别:继电器线圈未通电时处在断开状态静触点,称为“常开触点”;处在接通状态静触点称为“常闭触点”。继电器普通有两股电路,为低压控制电路和高压工作电路。图6:继电器剖析图5程序流程图开始初始化读取当前温度显示当前温度判断SET与否按下正常范畴否是否加减键与否按下当前温度与上下限位关系不大于下限不不大于上限是下限继电器工作,蜂鸣器闪响上限继电器工作,蜂鸣器闪响
32、相应解决上下限位While循环返回图7:程序流程图6.结束语通过对自己在大学两年时间里所学知识回顾,并充分发挥对所学知识理解和对毕业设计思考及书面表达能力,最后完毕了本设计。为了更好地完毕这个设计,我和同窗一起买了这个设计需要用到零件,并且和我同窗积极参加到实践之中,在焊接过程中,由于对焊接技术掌握不好和对电路分析不明确,导致自己焊接出产品无法达到预期效果。通过这次设计,使我深深地懂得了知识必要和实践相结合,只有掌握夯实知识和丰富实践经验,才干学好单片机。才干将知识更好地运用于现实生活中。7参照文献 1 陈权昌,李兴富.单片机原理及应用M.广州:华南理工大学出版社,.841022 李庆亮.C语
33、言程序设计实用教程M.北京:机械工业出版社,.32583 杨志忠.数字电子技术M.北京:高等教诲出版社,.1251324 及力.Protel 99 SE原理图与PCB设计教程M.北京:电子工业出版社,.891505 徐江海.单片机实用教程M.北京:机械工业出版社,.1281566 胡宴如.模仿电子技术M.北京:高等教诲出版社,.601047 汪文,陈林.单片机原理及应用M.湖北:华中科技大学出版社,.36688 康华光.电子技术基本数字某些M.北京:高等教诲出版社,.2032099 杨欣电子设计从零开始M.北京:清华大学出版社,.281028.附录1 C语言程序#include #define
34、 uint unsigned int#define uchar unsigned char /宏定义sbit SET=P31; /定义调节键sbit DEC=P32; /定义减少键sbit ADD=P33; /定义增长键sbit BEEP=P36; /定义蜂鸣器sbit ALAM=P12;/定义灯光报警sbit ALAM1=P14;sbit DQ=P37; /定义DS18B20总线I/Obit shanshuo_st; /闪烁间隔标志bit beep_st; /蜂鸣器间隔标志sbit DIAN = P05; /小数点uchar x=0; /计数器signed char m; /温度值全局变量u
35、char n; /温度值全局变量uchar set_st=0; /状态标志signed char shangxian=38; /上限报警温度,默认值为38signed char xiaxian=5; /下限报警温度,默认值为5/uchar code LEDData=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff;uchar code LEDData=0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B;/=/=DS18B20=/
36、=/*延时子程序*/void Delay_DS18B20(int num) while(num-) ;/*初始化DS18B20*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 Delay_DS18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 Delay_DS18B20(80); /精准延时,不不大于480us DQ = 1; /拉高总线 Delay_DS18B20(14); x = DQ; /稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay_DS18B20(20);/*读一种字节*/unsi
37、gned char ReadOneChar(void) unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; Delay_DS18B20(4); return(dat);/*写一种字节*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8;i0;i-) DQ = 0; DQ = dat&0x01; Delay_DS18B20(5); DQ =
38、1; dat=1; /*读取温度*/unsigned int ReadTemperature(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号操作 WriteOneChar(0x44); /启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号操作 WriteOneChar(0xBE); /读取温度寄存器 a=ReadOneChar(); /读低8位 b=Rea
39、dOneChar(); /读高8位 t=b; t=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; /放大10倍输出并四舍五入 return(t);/=/=/=/*延时子程序*/void Delay(uint num) while( -num );/*初始化定期器0*/void InitTimer(void)TMOD=0x1;TH0=0x3c;TL0=0xb0; /50ms(晶振12M)/*读取温度*/void check_wendu(void)uint a,b,c;c=ReadTemperature()-5; /获取温度值并减去DS18B20温漂误差a=c/100;
40、/计算得到十位数字b=c/10-a*10; /计算得到个位数字m=c/10; /计算得到整数位n=c-a*100-b*10; /计算得到小数位if(m99)m=99;n=9; /设立温度显示上限 /*显示开机初始化等待画面*/void Disp_init(void) P0 = 0x80; /显示-P2 = 0x7F;Delay(200);P2 = 0xDF;Delay(200); P2 = 0xF7;Delay(200);P2 = 0xFD;Delay(200);P2 = 0xFF; /关闭显示/*显示温度子程序*/void Disp_Temperature(void) /显示温度P0 = 0
41、x98; /显示CP2 = 0x7F;Delay(400);P0=LEDDatan; /显示个位P2 = 0xDF;Delay(400);P0 =LEDDatam%10; /显示十位DIAN = 0; /显示小数点P2 = 0xF7;Delay(400);P0 =LEDDatam/10; /显示百位P2 = 0xFD;Delay(400);P2 = 0xff; /关闭显示/*显示报警温度子程序*/void Disp_alarm(uchar baojing)P0 =0x98; /显示CP2 = 0x7F;Delay(200);P0 =LEDDatabaojing%10;/显示十位P2 = 0xDF;Delay(200);P0 =LEDDatabaojing/10;/显示百位P2 = 0xF7;Delay(200);if(set_st=1)P0 =0xCE;else if(set_st=2)P0 =0x1A;/上限H、下限L标示P2 = 0xFD;Delay(200);P2 = 0xff; /关闭显示/*报警子程序*/void Alarm()if(x=10)beep_st=beep