版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
水浴加热温度控制器设计引言随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化测温仪器的要求越来越高。特别是近年来,温度控制系统已经应用到人们生活的各个方面,是一个与人们生活息息相关的实际问题。单片机对温度的控制是工业生产中经常使用的方法。单片机将微处理器、存储器、定时/计数器、I/O接口电路等集成在一个芯片上的大规模集成电路,本身即是一个小型化的微机系统。单片机技术与传感测量技术、信号与系统分析技术、电路设计技术、微机接口技术等相结合,使单片机应用非常广泛。本设计所介绍的数字温度水浴加热控制器与传统的温度加热器相比,具有读数方便、测量范围广、测温准确并能控制加热所需的温度值并保持恒温且将当前温度显示在显示屏上的特点,可广泛的应用在生活中,提高人们生活的幸福指数。因此,从总体看,该课题从立意到研制是可行的。第1章概论1.1研究背景及意义现如今温度控制技术可以说是无所不在。温度是物理科学和技术的重要研究量之一,温度控制在日常生活及化学领域应用的相当广泛。我们都知道,某些化学反应必须在特定的温度下才能进行反应,不同的温度对化学反应的速率也有一定的影响。而在普通的化学实验室,加热控制通常是通过酒精灯进行加热的,而这个加热方式的缺点就是不能调控温度,如何对温度的控制是一个难题。在日常生活中,有些名贵的药材不能直接加热使其沸腾,这样可能会使营养价值的流失,需用特定的温度加热慢慢熬制。我们通常希望口渴时喝到的水是温度适宜的,不希望太冰也不希望烫嘴。因此,本课题的研究有助于解决这一系列的问题。将水温保持在设定的温度,当温度太低时,自动加热;当温度太高时发出声光报警,停止加热。这样我们就可以通过提前设定温度值来获得我们理想的水温,增加生活的幸福指数。1.2研究思路本文设计了一种基于STC12C5A60S2单片机与DS18B20传感器的温度控制系统。该设计通过STC12C5A60S2单片机驱动数字温度传感器DS18B20进行温度数据采集、读取、处理并通过LCD12864显示屏显示出来。电路板接通电源时,系统开始工作,通过外接按键设定水浴加热所需温度值的上限值和进入保温状态的下限值,确定按键将设定的温度值存储到指定单片机的地址空间,温度传感器启动实时监测,调用显示子程序显示监测结果,将当前显示的温度值与初始设定的温度值相比较,如果当前显示温度低于初始设定的值就通过继电器启动加热装置,直至加热到所需的预设温度值,之后进行保温,如果该温度高于上限值则进行报警。1.3章节设置1.第一章主要叙述此次毕业设计的研究背景、意义及思路;2.第二章进行了整体的方案设计并选取合适的器件用于设计中;3.第三章对硬件系统进行分析,设计具体电路,制作PCB板;4.第四章对器件初步调试,设计流程图,编写程序;5.第五章调试及设计结果展示与问题分析;6.结论总结此次毕业设计的内容;感谢恩师;参考文献;7.附录一为设计程序;附录二为硬件设计电路图。第2章方案设计2.1整体设计本次设计的主要思路是通过对单片机编程将由温度传感器DS18B20采集到的温度外加驱动电路显示出来,包括对继电器的控制,进行升温,当温度到达上下限值时用蜂鸣器进行报警,如图2-1为系统工作的原理图。系统硬件部分由单片机电路、温度采集电路、键盘电路、LCD12864显示电路、继电器控制电路组成。软件部分从设计思路、软件系统框图出发,逐一分析各模块程序算法的实现,通过C语言编程写出满足任务需求的程序。图2-1系统原理图本系统由+5V的电源供电给各个模块,通过对键盘的输入设置预定的温度,由温度传感器DS18B20监测水温并输入到单片机内进行当前温度与预设温度比较,并通过显示屏LCD12864显示读数,若当前温度高于预设温度则由声光报警电路进行报警并断开继电器;若当前温度低于预设温度则继电器动作,继续加热水的温度。2.2器件选型2.2.1单片机STC12宏晶科技公司生产的STC12C5A60S2/AD/PWM系列单片机是具有(1T)机器周期的单片机,所需指令代码完全兼容传统的8051系列且新一代的STC12系列具有高速、低功耗、超强抗干扰能力为一体的特点,不仅如此,在速度方面,STC12系列单片机也比传统的8051系列快8-12倍。该系列单片机内部集成有MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),广泛应用于电机和强干扰场合。STC12C5A60S2单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。单片机STC12的优点是:1.性价比高。采用STC12系列单片机可以省掉复位电路、外部数据存储器(如24Cxx系列芯片),某些场合还可以省掉晶振,电路简单、价格低廉。2.速度快。STC12系列单片机为单时钟/机器周期(1T),一些指令执行速度是传统8051的24倍,最低的也是3倍。3.安全性好。目前,很难破译STC12系列单片机加密程序,加之用户数据可以保存到单片机内部,解密者很难通过用户数据分析单片机的运行状况。 图2-2STC12单片机引脚图2.2.2温度传感器DS18B20温度传感器是指能感受温度细微变化并将其转换成可用输出信号的传感器装置。DS18B20是常用的基于串行接口的单线数字式温度传感器,集成电路包括半导体温敏器件、A/D转换器、存储器等,具有体积小、硬件开销低、抗干扰性强、精度高、功耗低、耐磨、连接方便、连接口线少等特点,适应电压范围宽,在不同的应用场合中还可通过不同的封装形式改变外观以配合实际情况,因此满足设计需求。DS18B20采用单总线技术,即使系统中有多个DS18B20,也只需一根I/O线与单片机连接。DS18B20通过延时来读写时序和测温的原理与DS1820大体相同,只是得到的温度值的位数因分辨率的不同而造成差异,且温度转换的延时时间由2s大大缩减为750ms。高温度系数的晶振随温度的变化其振荡率明显发生改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预放置在一个基数值对应为-55℃的寄存器内。计数器1对低温度系数的晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置值将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数为0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2-3DS18B20封装2.2.3液晶显示LCD12864本设计采用带字库的LCD12864点阵液晶显示模块,它由128×64个液晶显示点组成一个128行×64列的阵列,因此命名为LCD12864。它的每个显示点都对应一位二进制数(0表示灭,1表示亮)。该模块由于灵活简单的接口方式和方便易掌握的操作指令,构成了全中文带图形的人机交流显示界面。该模块可以显示8×4行16×16点阵的汉字。存储这些点阵信息的RAM被称为显示数据存储器。如果要用该模块显示某个图形或某个汉字就是将相应的点阵信息写入与之相对应的存储单元中。该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论在硬件电路结构上还是在显示程序方面,LCD12864模块都要简洁得多,且该模块的性价比大大高于相同点阵的图形液晶模块。并且具有低电压低功耗的特点。第3章系统硬件方案设计3.1硬件设计软件——AltiumDesignerAltiumDesigner是软件开发商Altium公司推出的关于电子产品开发一体化的软件系统。它能设计原理图,绘制PCB电路板,而且还具备自动的走线等功能。掌握并熟练使用AltiumDesigner软件必将大大提高电路设计的质量和效率。当我们从开始菜单选择Programs→Altium→AltiumDesigner运行时实际是运行DXP.EXE。AltiumDesigner下的DXP平台可以使我们完成设计,应用接口自动地配置成适合工作的文本。例如,当打开一张原理图文件,工具栏、菜单和快捷键都被激活。这个功能表示建成一个PCB项目就意味着我们设计的电路原理图、PCB制作、生存BOM表、电路仿真等工作的工具栏菜单和快捷键都将激活,大大提高了软件的便捷性和可操作性。该软件的主要功能有:原理图设计;印刷电路板设计;FPGA的开发;嵌入式开发等。3.2模块介绍3.2.1温度传感器电路数字温度传感器DS18B20采用的是单总线协议方式,即仅用一根数据线实现数据的双向传输,可将温度信号直接转换成数字信号输入单片机。引脚说明a. VCC,电源5V。b. I/O,数字信号输入输出。c. GND,接地或电源负极。2、外接电路图3-1温度传感器电路3.2.2声光报警电路声光报警电路由蜂鸣器和LED灯组成。通常,我们所指的蜂鸣器是由压电陶瓷所组成。压电陶瓷的特点是将压力与电流相互转换的一种特殊陶瓷。当压电陶瓷在某个方向受到一定的压力时,其陶瓷内部会发生晶体结构的形变,从而产生一个微小的电流。该压力的变化会准确的转化成电流的变化。因此,利用这一特性,当通过一定频率的电流时会造成压电陶瓷产生的形变,这一形变带动了周围空气发生振动。通过调整电流的频率就可以产生被人耳听见的蜂鸣声。本设计的声光报警电路设计如图3-2所示。图中,MK1为发声元件,即蜂鸣器。在器两端施加电压或者方波就可以使其发声。三极管Q1为起开关的作用,要使蜂鸣器发声,必须使其基极的高电平使三极管呈饱和导通的状态;而蜂鸣器呈现停止发声状态时,需将基极用低电平使三极管关闭。图3-2声光报警电路3.2.3继电器电路能根据某种输入信号的变化调节从而控制电路接通或断开的功能,实现自动控制和保护电力系统的电器称为继电器。其输入的信号可以是电量如电压、电流;也可以是非电量如转速、时间、温度和压力等。故继电器在电路中起到自动调节、安全保护、转换电路等作用。继电器控制点操作说明如下:COM:Common,共同点。输出控制接电的共同接点。NC:NormalClose常闭点。以Com为共同点,NC与COM在平时是呈导通状态的。如图3-3中的2、4触点。NO:NormalOpen常开点。NO与COM在平时呈开路状态的,当继电器动作时,NO与COM导通,NC与COM则呈开路状态。如图3-3中的2、5触点。图3-3为继电器电路。当STC12单片机的P1.0输出高电平时,继电器不导通,反之当输出为低电平时,继电器导通,这样就激活了连接电路。由于单片机的I/O输出的电流很小,通常只有4~20mA,因此需要三极管2N3904来放大驱动电路。当三极管Q3从导通变为截止时,继电器产生了一个较大的自感电压与电源电压叠加后有可能击穿发射结(e-c)。通常反向并联抑制二极管1N4148在继电器线圈两端,来消除感生电动势的有害影响。自感电压与电源电压之和是正向偏压,使二极管导通形成环流。由回路释放感应的高电压,从而保证了三极管的安全。图3-3继电器电路3.2.4单片机电路单片机电路由复位电路、晶振电路等组成。复位电路及晶振电路如图3-4。理论上来说,振荡频率越高表示单片机运行速度越快,但同时对存储器的速度和印刷电路板的要求也就越高。如同木桶原理。同时单片机性能的好坏,不仅与CPU运算速度有关,而且与存储器的速度、外设速度等都有很大关系。因此一般晶振选用6~12MHZ。本设计中选用12MHZ晶振。并联谐振电路对电容的值没有严格要求,但会影响振荡器的稳定、振荡器频率高低、起振快速性等。所以一般C1、C2选值20~100pF,在60~100pF时振荡器有较高的频率稳定性。故本设计中采用电容为100pF。图3-4复位电路及晶振电路单片机是高电平复位,单片机加5V电源(上电)启动时的情况:这时电容充电相当于短路(电容特性:通交流,隔直流,上电瞬间相当于交流),可以认为RST上的电压就是VCC,此时单片机就是复位状态。随着时间推移电容两端电压升高,即造成RST上的电压降低,当低至阈值电压时,即完成复位过程。如果按下SW1,按钮把C短路了,这时电容放电,两端电压都是VCC,即RST引脚电压为VCC,如果超过规定的复位时间,单片机就复位了。当按钮弹起后,RST引脚的电压为0,单片机处于运行状态。3.2.5LCD电路基于LCD128×64液晶组成的实时温度及是否报警显示的电路部分,电路如图3-5。图3-5LCD电路LCD12864的引脚功能见表2-1所示。表2-1LCD12864模块引脚功能图编号名称说明编号名称说明1VSS公共接地端11DB4三态数据线2VDD电源正极12DB5三态数据线3V0对比度调整13DB6三态数据线4RS(CS)显示数据14DB7三态数据线5R/W读/写选择端(H/L)15PSB传输方式6E使能信号16NC悬空7DB0三态数据线17RESET复位端低电平8DB1三态数据线18VOUT驱动电压输出端9DB2三态数据线19A正极10DB3三态数据线20K负极LCD12864通过PSB选择串行模式还是并行模式,本设计为并行模式,可见DB0—DB7不连接,NC悬空,PSB=1,RS和RW的操作需要配合使能信号E,RS为片选,RW为数据,V0与VOUT接可调电阻。3.2.6键盘电路键盘是单片机应用系统中的主要输入设备,编码盘和非编码盘是单片机在使用中的两种主要分类。两种键盘有不同的作用和优点。编码键盘由于采用硬件线路,在按下一个键时能自动生成代码并有去抖功能。使用方便但其硬件线路较为复杂。而非编码键盘由程序识别按键的状态,在消除抖动的同时产生相应的代码。相比于编码键盘,非编码键盘的键数较少,硬件结构简单,在单片机中的采用更加广泛。图3-6为按键和STC12的接线图,共设有2个按键,每个按键由软件来决定其功能,2个按键功能分别为:SW2:加法按键(当前位加1)SW3:减法按键(当前位减1)图3-6键盘电路第4章系统软件设计4.1软件设计工具——KeilμVision4在汇编语言中,C语言从表达、理解、编程、维护等方面都具有很大的优势。在KeiLC51标准内具有C编译器,能够为8051微控制器提供了C语言程序编译的软件开发环境,而且兼容有汇编代码执行效率高,编写速度快的特点。C51编译器的功能在渐渐的扩增,使你可以更加了解及使用CPU及在它基础上设计的产品。支持所有的8051系列的芯片,还包括ARM处理器。Keil的开发环境主要包括C/C++编译器、RTX实时操作系统内核库、μVisionIDE开发环境及器件数据库、μVision调试器及分析工具和一个强大的器件仿真调试器,同时开发环境还提供针对不同MCU器件的开发例子和模版。Keil集成开发环境的uVision4IDE提供对汇编语言、C语言和C++语言的支持,大大加速了嵌入式软件的开发进程,自2009年2月推出KeilμVision4的IDE开发环境,截止到2013年,我们用到的都是KeilμVision4版本的IDE开发环境。Keil软件的优势有工程建立简单,调试方便(技巧有断点调试、寄存器调试、串口调试,用户还可以通过程序性能评估工具了解函数执行状况),检查严格(PC-Lint静态分析工具)。4.2软件组成编程软件采用的是keilμvision4软件,程序采用C语言编程。软件部分经本人调试可以运行,能够正确显示结果。具体模块由2个C主函数文件和4个h文件构成。如下所示:reg51.h(单片机的相关参数初始化)Intrins.h(伪本征函数)func.hLCD12864.h(LCD12864液晶显示函数)4.3主程序流程图本系统采用的是循环查询方式来显示和控制温度的。主要包括四段程序的设计:DS18B20读温度程序,LCD驱动程序,键盘程序,报警程序。主程序流程图如下图4-1。图4-1主程序流程图4.4各模块流程图4.4.1读取温度DS18B20模块的流程DS18B20单线通信功能是分时完成的,它有严格的时隙概念。因此系统对DS18B20的各种操作必须按协议进行。该操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储操作命令→处理数据DS18B20。该模块具有测温系统结构简单、测温精度高、连续使用方便、占用口线少等优点。DS18B20必须首先调用启动温度转换函数,根据数据手册上对应转换时间操作,如12位转换,则应该是最大750ms,另外在对DS18B20操作时,时序要求非常严格,因此最好禁止中断系统。由于DS18B20是在一根I/O口线上读写数据,因此,对读写的数据有严格的时序要求。DS18B20通过严格的通信协议来保证数据传输的正确性和完整性。所有时序都是将主机作为主设备,而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。系统程序设计主要包括三部分:读出温度子程序、温度转换命令子程序、显示温度子程序。图4-2为读取温度传感器DS18B20模块流程图。图4-2读取温度传感器流程图4.4.2LCD显示LCD12864显示屏的应用1.带字库的12864点阵型LCD的指令可以通过指令“功能设定”中的RE来确定,若RE为0时,使用的是基本指令集(11条指令),反之则为扩展指令集(7条指令)。BF标志表示的是内部工作的状况,若BF标志为0时,可以随时接受外部指令和数据,反之则不行。地址计数器(AC)是用来贮存显示RAM和字型产生RAM之一的地址,它可由设定指令暂存器来改变,之后读写显示RAM和字型产生RAM中的值,AC的值自动加1。显示RAM的地址80H~9FH(第一行:80H-87H;第二行:90H-97H第三行:88H-8FH;第四行:98H-9FH),可以显示字符、汉字、图形等内容。读写显示RAM如下表4-1所示。表4-1读写显示RAM指令指令码说明RSRWDB7DB6DB5DB4DB3DB2DB1DB0写数据到RAM10数据将数据D7——D0写入到内部的RAM(DDRAM/CGRAM/IRAM/GRAM)读出RAM的值11数据从内部RAM读取数据D7——D0(DDRAM/CGRAM/IRAM/GRAM)4.4.3LCD12864程序框图LCD12864程序框图如图4-3所示。图4-3LCD12864程序框图4.5控制算法PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差,将偏差比例、积分和微分通过线性组合构成控制量,对被控对象进行控制。比例(P)控制:比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差。积分(I)控制:在积分控制中,主要是反应系统的累计偏差,使系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,直至无误差。微分(D)控制:在微分控制中,反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,产生超前的控制作用,可改善系统的动态性能。在本次设计中用到的是比例(P)控制,该系统对加热速度要求不高,加热温度精度在±1℃内,故只选用比例(P)控制。本次设计的控制算法如图4-4所示。图4-4控制算法示意图第5章系统调试与分析单片机调试分为硬件调试与软件调试两部分,但是二者并不能完全分开单独调试。一般的调试方法是排除明显的硬件问题,然后再进行综合性调试,排除掉有可能的软件或者硬件故障,解除问题,让项目正常运作。5.1硬件调试5.1.1硬件调试方法拿到相应电子元器件后,在安装前要用万用表逐一的检测,测试元器件的数据,验证是否有不一样的地方。接着对加工质量进行检查,确保没有任何错误,比如:断路、短路等情况,特别是不能使电源短路。焊接完成后,应该先空载上电(先不要安插芯片),并且检查各个引脚的电位是不是正确的。如果一切正常,那么就可以在切断电源的情况下,把芯片插入芯片座。再一次检查各个引脚的的逻辑关系以及各引脚的电位。用万用表的探针插在单片机接电源的引脚上检查,看是否一切正常。5.1.2硬件电路板焊接根据设计的硬件系统电路图制作PCB板并焊接的电路,电路板的正面如图5-1所示,电路板的反面如图5-2所示。图5-1电路板正面示意图5-2电路板背面示意图5.2软件调试软件的调试一般是将重点放在分模块调试,每个分模块没问题了,再统一调试。软件的调试可以分为两种调试方式,在线调试和离线调试。在线调试需要仿真系统的支持,而离线调试不需要硬件仿真器,借助软件仿真器即可调试。本项目是借助Keil软件来进行程序的调试,通过调试各个分模块的程序,使得程序逐步向正确靠拢,最后全部一起统一调试。在确定程序没有问题后,将程序编译到系统核心STC12单片机内,检验软件与硬件是否协调工作,出现问题时我们需耐心的检查程序并作出适当的修改,直到软件系统完全契合硬件电路,那么,软件调试就成功了。5.3测试过程在调试前检查电路正确完整完好,元件安放正确,接入+5V电源,下载程序。将DS18B20温度传感器贴在加热锅内,实时测量温度。当设定水温低于当前水温,蜂鸣器和LED灯报警闪烁,LCD显示温度。当设定水温高于当前水温,LCD显示温度,继电器导通,继续加热。演示过程如图5-3。图5-3LCD显示图结论本设计“基于单片机的水浴加热温度控制器设计”运用单片机技术实现对水浴加热温度的控制,可以看出本设计操作方便,设计简单,又能解决日常生活中的问题,提升了人们生活的幸福感。设计主要运用单片机STC12C5A60S2以及温度传感器DS18B20进行监测控制,基本实现了所要设计的内容。此次的毕业设计,使得自己把大学3年多来所学的知识再一次的回顾了一遍且得到了很好的实践运用。同时在这过程中也感觉到了自己所掌握的知识有限,理论与实践仍有差距,所以需要对理论知识进行的提升,而且要将所学到的知识进行整合、深入理解以及将知识结合实践。此次的毕业设计不仅让我回顾理论知识、实践运用,还激发了创新思维,对问题的发现与解决能力。更是培养了我面对挫折、面对困难敢于去攻克的勇气,同时炼就了吃苦耐劳,专心投入的精神。面对以后的工作又多了一份能力、一份自信。为今后走上工作岗位积累了经验,提高了有效竞争力。致谢语本次毕业设计是在尤老师的耐心指导下完成的,在此我首先对尤老师表示诚挚的谢意。在我的整个学习阶段,从选题指导、论文框架到细节修改,尤老师都给予了细致的指导,提出了很多宝贵的意见与建议,弥补我在设计和知识方面的不足之处,纠正我在软件和硬件中出现的多处错误,督促我顺利完成毕业设计。再次感谢尤老师对我不倦的辅导。感谢所有授我以业的老师,让我学到了有用的知识,也学到了做人的道理。我也要感谢我的母校,是她为我们提供了良好的学习环境和生活环境,让我的大学多姿多彩,为我的人生留下精彩的一笔。再次,我要感谢我的家人以及我的朋友们,正是有了他们不断的鼓励、理解和帮助,才让我的大学生活更加精彩!参考文献[1]谭浩强.C程序设计教程[M].北京:清华大学出版社,2007.[2]林立,张俊亮.单片机原理及应用[M].北京:电子工业出版社,2013.[3]何宾.AltiumDesigner13.0电路设计、仿真与验证权威指南[M].北京:清华大学出版社,2014[4]王兆安,黄俊.电力电子技术[M].北京:机械工业出版社,2000.[5]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.[6]侯殿有.单片机C语言程序设计[M].北京:人民邮电出版社,2010.[7]陈正冲.C语言深度解剖[M].北京:北京航空航天大学出版社,2010.[8]强锡富.传感器[M].北京:机械工业出版社,2001.[9]王连英,吴静进著.单片机原理及应用[M].北京:化学工业出版社.2011.[10]贺敬凯,刘德新,管明祥.单片机系统设计、仿真与应用[M].西安:西安电子科技大学出版社.2011.附录一程序#include<reg51.h>#include<intrins.h>//#include<at89x51.h>#defineucharunsignedcharsbitLCD_RS=P2^6;//定义引脚sbitLCD_RW=P2^7;sbitLCD_E=P2^5;//sbitLCD_RS=P2^2;//定义引脚//sbitLCD_RW=P2^1;//sbitLCD_E=P2^0;sbitPSB=P3^6; //PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1sbitDQ=P2^3;sbitLED=P2^4;sbitUP=P2^0;sbitDOWN=P2^1;#defineLCD_DataP0#defineBusy0x80//用于检测LCD状态字中的Busy标识voidWriteDataLCD(unsignedcharWDLCD);voidWriteCommandLCD(unsignedcharWCLCD,BuysC);unsignedcharReadDataLCD(void);unsignedcharReadStatusLCD(void);voidLCDInit(void);voidLCDClear(void);voidLCDFlash(void);voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedchar*DData);voidDisplayImage(unsignedcharcode*DData);voidDelay5Ms(void);voidDelay400Ms(void);codeunsignedchaructech[]={"陈虹毕业设计"};codeunsignedcharnet[]={"MTI12017"};codeunsignedcharmcu[]={""};codeunsignedcharqq[]={""};ucharTempBuffer[9];ucharTempBuffer2[9];unsignedinttemp_value;unsignedinttemp_set=280;sbitTempCtr=P1^0;unsignedinttime_count=0;/***********ds18b20子程序*************************//***********ds18b20延迟子函数(晶振12MHz)*******/voiddelay_18B20(unsignedinti){ while(i--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); };}/**********ds18b20初始化函数**********************/voidInit_DS18B20(void){ unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(8);//稍做延时 DQ=0;//单片机将DQ拉低 delay_18B20(200);//精确延时大于480us DQ=1;//拉高总线 delay_18B20(15); x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败 delay_18B20(150); DQ=1;}/***********ds18b20读一个字节**************/unsignedcharReadOneChar(void){ uchari=0; uchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; delay_18B20(1); DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(20); } return(dat);}/*************ds18b20写一个字节****************/voidWriteOneChar(uchardat){ unsignedchari=0; for(i=8;i>0;i--) { DQ=0; delay_18B20(1); DQ=dat&0x01; delay_18B20(25); DQ=1; dat>>=1; _nop_();}delay_18B20(4);}/**************读取ds18b20当前温度************/voidReadTemp(void){ unsignedchara=0; unsignedcharb=0; unsignedchart=0; Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0x44); //启动温度转换 delay_18B20(500);//thismessageisveryimportant Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度 delay_18B20(200); a=ReadOneChar(); //读取温度值低位 b=ReadOneChar(); //读取温度值高位 //temp_value=b<<4; //temp_value+=(a&0xf0)>>4; temp_value=(b*256+a)*0.625;}voidtemp_to_str(void)//温度数据转换成液晶字符显示{unsignedinttemp=temp_value;TempBuffer[0]=temp/100+'0';//个位temp=temp%100;TempBuffer[1]=temp/10+'0';//个位temp=temp%10;TempBuffer[2]='.';TempBuffer[3]=temp+'0';//个位TempBuffer[4]='\'';//温度符号TempBuffer[5]='C';TempBuffer[6]='\0';}voidtemp_to_str2(void)//温度数据转换成液晶字符显示{unsignedinttemp=temp_set;TempBuffer2[0]=temp/100+'0';//个位temp=temp%100;TempBuffer2[1]=temp/10+'0';//个位temp=temp%10;TempBuffer2[2]='.';TempBuffer2[3]=temp+'0';//个位TempBuffer2[4]='\'';//温度符号TempBuffer2[5]='C';TempBuffer2[6]='\0';}voidDelayNus(unsignedintt){ unsignedintd=0; d=t; do { _nop_();_nop_();_nop_();_nop_();_nop_(); }while(--d>0);}voidtimer0_isr()interrupt1{ unsignedchartemp_num=30; time_count++; if(time_count==10) { ReadTemp();//开启温度采集程序 time_count=0; temp_to_str(); switch(temp_value) { case30:temp_num=40;break; case50:temp_num=45;break; case70:temp_num=50;break; case80:temp_num=55;break; } if(temp_value<temp_set-temp_num) { TempCtr=0; }else { TempCtr=1; } } }voidTimerInit(){ TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;}voidmain(void){ Delay400Ms();//启动等待,等LCD讲入工作状态 TimerInit(); LCDInit();//LCM初始化 Delay5Ms();//延时片刻(可不要) LCDClear(); //DisplayImage(tmp);//显示图形 Delay400Ms(); Delay400Ms(); Delay400Ms(); LCDClear(); DisplayListChar(0,1,uctech); //显示字库中的中文数字 DisplayListChar(0,2,net); //显示字库中的中文数字 temp_value=0; while(1){ temp_to_str();//温度数据转换成液晶字符 temp_to_str2(); if(UP==0) { DelayNus(10); if(UP==0) { temp_set+=10; if(temp_set>999) temp_set=999; while(UP==0); } } if(DOWN==0) { DelayNus(10); if(DOWN==0) { if(temp_set>10) temp_set-=10; while(DOWN==0); } } DisplayListChar(0,3,"设定温度:"); //显示字库中的中文数字 DisplayListChar(5,3,TempBuffer2); //显示字库中的中文数字 DisplayListChar(0,4,"当前温度:"); //显示字库中的中文数字 DisplayListChar(5,4,TempBuffer); //显示字库中的中文数字 Delay400Ms(); //LCDFlash(); //闪烁 }}//写数据voidWriteDataLCD(unsignedcharWDLCD){ReadStatusLCD();//检测忙LCD_RS=1;LCD_RW=0;LCD_Data=WDLCD;DelayNus(5);LCD_E=1;DelayNus(5);LCD_E=0;DelayNus(5);}//写指令voidWriteCommandLCD(unsignedcharWCLCD,BuysC)//BuysC为0时忽略忙检测{if(BuysC)ReadStatusLCD();//根据需要检测忙LCD_RS=0;LCD_RW=0;LCD_Data=WCLCD;DelayNus(5);LCD_E=1;DelayNus(5);LCD_E=0;DelayNus(5);}//读数据unsignedcharReadDataLCD(void){LCD_RS=1;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1; DelayNus(5);return(LCD_Data);}//读状态unsignedcharReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=1; DelayNus(5);while(LCD_Data&Busy){DelayNus(5);};//检测忙信号LCD_E=0;return(LCD_Data);}voidLCDInit(void)//LCM初始化{WriteCommandLCD(0x30,1);//显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x01,1);//显示清屏WriteCommandLCD(0x06,1);//显示光标移动设置WriteCommandLCD(0x0C,1);//显示开及光标设置}voidLCDClear(void)//清屏{WriteCommandLCD(0x01,1);//显示清屏WriteCommandLCD(0x34,1);//显示光标移动设置WriteCommandLCD(0x30,1);//显示开及光标设置}voidLCDFlash(void) //闪烁效果{WriteCommandLCD(0x08,1);//显示清屏Delay400Ms();WriteCommandLCD(0x0c,1);//显示开及光标设置Delay400Ms();WriteCommandLCD(0x08,1);//显示清屏Delay400Ms();WriteCommandLCD(0x0c,1);//显示开及光标设置Delay400Ms();WriteCommandLCD(0x08,1);//显示清屏Delay400Ms();}//按指定位置显示一个字符voidDisplayOneChar(unsignedcharX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版无息投资借款合同书示例3篇
- 2025版房地产项目土方挖填施工合同范本2篇
- 2025年度个人带车库带私人泳池房产交易合同
- 2025年全球及中国桡动脉止血器行业头部企业市场占有率及排名调研报告
- 2025年全球及中国多功能推车行业头部企业市场占有率及排名调研报告
- 2025年全球及中国液槽密封式高效送风口行业头部企业市场占有率及排名调研报告
- 2025-2030全球流程行业无线自动化行业调研及趋势分析报告
- 2025-2030全球并网型微型逆变器行业调研及趋势分析报告
- 2024年煤矿企业安全生产知识竞赛试题库及答案(共200题)
- 2025版智慧医疗项目共同垫资合作协议书3篇
- 通信工程单位劳动合同
- 国土空间生态修复规划
- 2024年医疗器械经营质量管理规范培训课件
- DB11T 1136-2023 城镇燃气管道翻转内衬修复工程施工及验收规程
- 零部件测绘与 CAD成图技术(中职组)冲压机任务书
- 2024年骑电动车撞伤人私了协议书范文
- 绘本教学课件
- 2024年计算机二级WPS考试题库380题(含答案)
- 高低压配电柜产品营销计划书
- 2024-2030年色素病变激光治疗行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 结构力学仿真软件:STAAD.Pro:桥梁结构建模与分析教程
评论
0/150
提交评论