版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 温度采集智能家居热水器郑州轻院轻工职业学院专科毕业设计(论文) 题 目 温度采集智能家居热水器学生姓名 专业班级 学 号 系 别 指导教师(职称) 完成时间 2016年3月20日 温度采集智能家居热水器摘 要 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、安全的实施方案。 C语言对单片机编程有诸多优点,
2、例如:便于移植、句法检查时错误少、坚固性好、头文件种类诸多,能够方便快捷使用各种函数等。本文采用STC89C52单片机作为控制器,使用C语言编写程序,设计了一款智能家用电热水器。使用按键键盘设定温度,温度可以精确到0.1摄氏度,并使用LED灯显示,能够精确提供用户所需温度的温水。采用DS18B20采集温度,使用LED灯显示,精确的显示出采集的水温。当所需温度高于当前采集的水温时,使用继电器控制外接加热源,当所需温度低于当前采集的水温时,继电器断开不加热。当所需温度高于采集温度时,继电器吸合开始加热。基本实现了智能控制功能。 关键字:18B20、STC89C52、热水器 ABSTRACT Wit
3、h the development of society, the progress of human science and technology, in all walks of life to make their products intelligent, digital, because the water heater using old-fashioned gas or natural gas is burned to heat water, adjust the temperature manually, not only can the user needs to be ac
4、curately determined, and there is some risk. Electric water heater is a kind of household appliances for bathroom and kitchen, restroom use, along with the improvement of people's living quality, household electric water heater modern have rejected the previous practice, and by using a more accu
5、rate, safe implementation plan. The C language has many advantages, such as: microcomputer programming for transplantation, syntax check error less, robust, head file type many, can be convenient to use a variety of functions. This paper adopts STC89C52 MCU as the controller, the use of C programmin
6、g language, designed a intelligent home electric water heater. Use the keyboard to set the temperature, the temperature can be accurate to 0.1 degrees Celsius, and the use of LED lights display, can accurately provide the required temperature of warm water. The DS18B20 collection temperature, the us
7、e of LED lights display, display the temperature precise acquisition. When the required temperature is higher than the acquisition of temperature, use the relay to control the external heating source, when the required temperature is lower than the current collecting water, relay off without heating
8、. When the required temperature is higher than the acquisition of temperature, relay starts heating. The basic realization of the intelligent control function. Key words: 18B20、STC89C52、目 录1 引言12 设计内容及性能指标13 系统方案比较、设计与论证23.1 主控制器模块23.2 温度测量23.3 设置温度33.4 显示模块43.5 电源选取44 系统器件选择55 硬件实现及单元电路设计65.1 主控制模块
9、65.2 显示模块电路65.3 数码管显示驱动电路75.4 温度传感器(DS18B20)电路75.4.1 DS18B20基本介绍75.4.2 DS18B20控制方法85.4.3 DS18B20供电方式85.5 继电器加热控制电路96 系统软件设计106.1 程序结构分析106.2 系统程序流图106.2.1 DS18B20初始化程序流程图126.2.2 读温度子程序流程图126.3 程序编写与调试136.6.1 Keil编译器软件简介136.3.2 使用Keil软件建立一个工程136.3.3 使用Debug进行调试177 系统的安装与调试197.1 安装步骤197.2 电路的调试197.3 本
10、章小结19结论19参考文献20附录1 整体电路原理图21附录2 部分源程序22VII 温度采集智能家居热水器1 引言 随着人们生活水平的提高,热水器在人们的生活中扮演着越来越重要的角色,越来越受到人们的青睐。由于燃气热水器易受水压限制,而且安全性较差。每年使用燃气热水器造成的爆炸、中毒等事故也屡有所闻。消费者对燃气热水器怀有一定的惧怕感,所以燃气热水器渐渐淡出市场。而智能电热水器越来越受到人们的认可。电热水器在中国的历史已经有10多年了,期间也经历了数次起落的过程,在上个世纪的最后几年,随着国外品牌的进入和国内一些大家电厂的目光转向电热水器,智能储水式电热水器能适应任何天气变化,普通家庭可直接
11、安装使用,长时间通电可以大流量供热水。使用时不产生废气,既安全又卫生。目前市场上销售的电热水器多数还带有防触电装置。干净卫生,不必分室安装,调温方便。在电热水器发展到如今的水平,已经可以基本满足生产生活中的需求。但为求精益求精,当今学者将目光放在了更好的调节控制水温水位上,尽可能得使其更智能化,能够做到更加的安全稳定舒适。我国在对电热水器水温水位系统的研究已取得很大的成就,并在不断地完善之中。智能电热水器水温水位检测器是采用数字化测量技术,把连续的模拟量(电信号)转换成不连续、离散的数字形式并加以显示的仪表仪器。传统的电热水器水温水位检测器功能单一、精度低,不能满足数字化时代的需求,然而采用单
12、片机的电热水器水温水位检测器功能多样化、精度高、抗干扰能力强。本文所研究的电热水器水温水位检测器是以STC89C52单片机作为主控制元件来能实现热水器里的水温显示在数码管。更进一步的采用继电器实现自动控制加热装置,是单片机应用在工业、农业、国防、医药、卫生等各行各业中的一个典型而普通的例子,随着科学技术的进一步发展,人们生活水平的不断提高,智能电热水器越来越受人们的青睐,同时节安全、节能、易操作也是不可缺少的。在本设计中,研究智能电热水器的水温检测器非常有意义。2 设计内容及性能指标 本设计采用51单片机+DS18B20温度传感器+数码管显示+继电器+功能按键组成。DS18B20温度传感器检测
13、水温并将水温信息转换成电信号传送给单片机,单片机将得到的数据进行处理、显示与控制。上电后数码管显示当前的水温温度,通过按键可设置水温值,当检测到的水温低于设置的水温值时,继电器吸合接通外部加热装置,使水温达到设定水温值。当水温值超过设定水温值时,继电器断开,停止加热。温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM中,按键还具有连加、减功能。3 系统方案比较、设计与论证 该系统主要由温度测量和温度设置及系统状态显示三部分电路组成,下面介绍实现此系统功能的方案。3.1 主控制器模块方案1: 采用可编程逻辑器件CPLD作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大
14、、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们放弃了此方案。方案2: 采用STC89C52单片机作为整个系统的核心,用其控制水温测量控制系统,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现水温的自动控制,而在这一点上,单片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。STC89C52单片机具有功能强大的位
15、操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是STC89C52单片机价格非常低廉。3.2 温度测量方案1: 采用数字温度芯片DS18B20 测量实际温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用
16、51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外STC89C52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。方案2: 采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(如下图),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流
17、采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。图1 热电偶电路图从以上两种方案,容易看出方案二的测温装置可测温度范围宽、体积小,但是线性误差较大。方案一的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案一。3.3 设置温度方案1: 采用键盘输入设置温度,键盘则可以用4个按键,一个复位键,一个功能设定键,一个加减一个减键。四个键比较常用
18、,而且用到的接口得到了极好的利用,仅需要4个接口。方案2: 可采用4*4矩阵键盘,该键盘需要8个接口,而我们不需这么多键。综上所述,我们选择第一种方案。3.4 显示模块方案1: 用数码管进行显示。数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。方案 2:用LCD液晶进行显示。LCD由于其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速而得到了广泛的应用。单对于此系统我们不需要显示丰富的内容,而且LCD液晶价格贵,因此我们放弃了此方案。 综上所述我们选择方案13.5 电源选取 由于本系统采用电池供电,我们考虑了如下几种方案为系统供电。方案1:采用5V蓄电池为系统供
19、电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。但是蓄电池的体积过于庞大,在小型电动车上使用极为不方便。因此我们放弃了此方案。方案2:采用3节1.5 V干电池共4.5V做电源,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。综上所述采用方案24 系统器件选择1.温度传感器的选择 由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。这里采用DALLAS公司的数字温度传感器DS18B20作为测温元件。 图2 外部封装形式 图3 传感器电路图5 硬件实现及单元电路设计5.1
20、主控制模块主控制最系统电路如图4所示。 图4 单片主控电路5.2 显示模块电路 显示采用四位数码管显示,当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。显示电路如图5图5 数码管显示5.3 数码管显示驱动电路三极管8550来驱动4位数码管,不仅简单,而且价格便宜。图6 驱动电路5.4 温度传感器(DS18B20)电路5.4.1 DS18B20基本介绍DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感
21、器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号处理器处理。DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。图7 温度传感器电路引脚图5.4.2 DS18B
22、20控制方法DS18B20有六条控制命令:温度转换 44H 启动DS18B20进行温度转换 读暂存器 BEH 读暂存器9个字节内容 写暂存器 4EH 将数据写入暂存器的TH、TL字节 复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中 重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节 读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU 5.4.3 DS18B20供电方式DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3.1所示单片
23、机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个三极管来完成对总线的上拉。本设计采用电源供电方式, P2.2口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的P2.2来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 s。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三状态的。主机控制DS18B20完成温度转换必须经过3个步骤:l 初始化。l ROM操作指令。l 存储器操作指令。5.5 继电器加热控制
24、电路 电路如图8主要是用来给外部加热源加热的。图8继电器加热电路6 系统软件设计6.1 程序结构分析主程序调用了3个子程序,分别是数码管显示程序、温度信号处理程序、按键设定报警温度程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码管的显示送数,控制系统的显示部分。按键设定程序:可以设定低温和高温报警可精确到0.1度。6.2 系统程序流图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的当前温度值,
25、与设定的报警温度比较,其程序流程见图9所示。通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。图9 DS18B20温度流程图6.2.1 DS18B20初始化程序流程图在DS18B20工作之前需要进行初始化,流程图如下: 图10 初始化程序流程图6.2.2 读温度子程序流程图 读温度子程序的主要功能是从DS18B20中读出温度数据,移入温度暂存器保存。其程序流程图如下: 图11 温度子程序流程图 6.3 程序编写与调试6.6.1 Keil编译器软件简介 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语
26、言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。图15 C51工具包整体结构图Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,如图3.1所示,其中uVision与
27、Ishell分别是C51 for Windows和for DOS的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。6.3.2 使用Keil软件建立一个工程 Kei
28、l是目前进行51单片机开发最常用的编译软件。关于Keil的使用,有很多的资料介绍,这里只介绍其整个编译过程,在最短时间内开始使用Easy 51DP-2开发板。对于Keil更详细的介绍,可以参考一些专门书籍资料。在Keil里,每一个完整的程序,都是以一个工程的形式建立的。一个工程里可以有一个或多个*.c文件和*.h文件,但只可以有一个main()函数。一般的做法是将包含main()函数的C文件加入到工程中,其他文件以#include头文件的形式加到这个C文件里。这样,在编译的时候,其他的文件会被自动的导入到工程里来。打开Keil软件后,出现(图16)所示界面。当然,如果Keil在上次关闭时有打开
29、的工程,再一次打开时它会自动加载上一次的工程文件。图16 Keil软件主界面 首先点击Project->New Project(Project->Open Project为打开一个已经存在的工程),如图17所示。图17 Keil软件打开新工程界面 点开后,在出现的对话框中选择工程存在路径,单击“保存”后,出现(如图18所示)界面。在此界面上选择电路板上所用的单片机型号:Atmel STC89C52(或者是AT89S52,视开发板上具体型号而定),单击“确定”。图18 选择电路板上所用的单片机型号 设置完成后,软件会提示“是否将8051上电初始化程序添加入工程?”如图19所示,这个一
30、般选择“否”。(关于STARTUP.A51的相关内容可查阅相应资料)图19 是否将8051上电初始化程序添加入工程 这样,就建立了一个空的51工程。接下来的事,就是在这个工程里面加入自己的程序代码。点击,或者File->New,便建立了一个空的文本框。现在,就可以开始在里面输入你的代码了。保存时注意:如果是用C语言写的程序,则将文本保存成*.c,如果是用汇编写的程序,则将文本存成*.asm。 到目前为步,我们已经建立了一个工程,也写了一个程序代码。但现在还不能开始编译。因为还没有将程序代码添加到工程里面去。 下一步就是将写完的程序添加到工程里面,如图20所示,在左边Project Wor
31、kspace里的Source Group 1上右击,选择Add Files to Group Source Group 1。在打开的对话框中,选择刚存的文件路径和对应的扩展名。这样,程序就添加进了这个工程。图20 添加文件到工程中 下一步,就开始编译刚输入进去的代码。点击工具栏中的按钮。接着,Keil会打出下面的提示:Build target 'Target 1'assembling led.asm.linking.Program Size: data=8.0 xdata=0 code=100"first" - 0 Error(s), 0 Warning(s
32、).其中“"first" - 0 Error(s), 0 Warning(s).”说明现在的工程编译通过,0个错误和0个警告。建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:单击,或者在Project Workspace里Target 1上右击,选择“Options for Target Target 1”。出现如图21所示对话框,选择“Output”按图示,将箭头所指的多选框勾上,点“确定”。现在再点击重新编译,系统提示:“creating hex file from "first".”。便会在工程所在文件夹里生成HEX文件。图21 生成
33、HEX文件6.3.3 使用Debug进行调试 Keil有很强大的调试功能,可以显示C程序的反汇编代码、可以计算代码运行的时间、可以显示程序中某一变量的值能用好这个调试工具对编写单片机程序会有很大的帮助。同样的,在这里,只对Debug进行简单应用介绍,更详细的使用方法可以参看相关书籍资料。图22 调试前设置窗口首先,单击,弹出如图22所示对话框,在Target页面上设置对应的晶振频率。其他不用作修改。设置完成后,单击,进入调试界面(如图23所示)。图23 Keil调试界面点击中对应的工具按钮则可以开始调试。另外,“View”下的三个工具在调试中会经常用到如.图24所示,“Disassembly
34、Window”显示C文件的反汇编程序;“Watch & Call Stack Window”可以显示程序中某一变量的值;“Memory Window”可以显示内存中某一地址的值。图24 三个常用的调试工具7 系统的安装与调试7.1 安装步骤1.检查元件的好坏按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。2.放置、焊接各元件按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊
35、接时间不要超过10s,注意芯片的安装方向。7.2 电路的调试首先烧入显示程序,看显示正不正常。在调试程序时,发现有的指令用的不正确,导致电路功能不能完全实现,另外软件程序中的延时有的过长、有的过短。类似的现象还有很多就不一一列举了。7.3 本章小结本章的主要内容是电路的测试和调试注意事项结 论 本设计采用51单片机+DS18B20温度传感器+继电器加热+数码管显示+功能按键组成。DS18B20温度传感器检测水温并将水温信息转换成电信号传送给单片机,单片机将得到的数据进行处理、显示与控制。上电后数码管显示当前的水温温度,通过按键可设置水温值,当检测到的水温低于设置的水温值时,继电器吸合接通外部加
36、热装置,使水温达到设定水温值。当水温值超过设定水温值时,继电器断开,停止加热。温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM中,按键还具有连加、减功能。本设计结构简单,调试方便,系统反映快速灵活,经实验测试,该温度系统设计方案正确、可行,各项指标稳定、可靠。参考文献1曹巧媛主编. 单片机原理及应用(第二版). 北京:电子工业出版社,20022全国大学生电子设计竞赛组委会编.第五届全国大学生电子设计竞赛获奖作品选编(2001), 北京:北京理工大学出版社,20033何力民编. 单片机高级教程. 北京:北京航空大学出版社,20004金发庆等编. 传感器技术与应用.北京机
37、械工业出版社,20025刘坤、宋戈、赵洪波、张宪栋编51单片机C语言应用开发技术大全,北京:人民邮电出版社,20086谭浩强著C程序设计北京:清华大学出版社,2007;7王忠飞,胥芳MCS-51 单片机原理及嵌入式系统应用M西安:西安电子科技大学出版社,2007P268-2738 Peter Van Der Linden著,徐波译.C专家编程,人民邮电出版社,2003附录1 整体电路原理图附录2 部分源程序#include <reg52.h>#include "eepom52.h"#define uchar unsigned char #define uint
38、unsigned int/* 本设计系统是18b20温度报警系统数码管显示,可设置温度上限高温报警和下限低温报警,报警温度可精确到0.1度,并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在30秒后自动退出设置界面,人性化的按键设置,按键还具有连加、减功能。*/数码管段选定义 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /断码/数码管位选定义uchar
39、code smg_we=0xef,0xdf,0xbf,0x7f;uchar dis_smg8 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;uchar smg_i = 3; /显示数码管的个位数sbit dq = P24;/18b20 IO口的定义sbit relay = P25; /继电器IO口定义sbit beep = P23; /蜂鸣器IO口定义uchar a_a;uint temperature ; /bit flag_300ms ;uchar key_can; /按键值的变量uchar menu_1; /菜单设计的变量uint t_high =
40、300,t_low = 100;bit flag_lj_en; /按键连加使能bit flag_lj_3_en; /按键连3次连加后使能 加的数就越大了 uchar key_time,flag_value; /用做连加的中间变量bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; /自动退出设置界面/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*小延时函数*/void delay_uint(uint
41、q)while(q-);/*数码显示函数*/void display()uchar i;for(i=0;i<smg_i;i+) P3 = smg_wei; /位选P1 = dis_smgi; /段选 delay_1ms(1); P3 = 0xff; /位选P1 = 0xff; /消隐 /*把数据保存到单片机内部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(0x2000, t_high % 256);byte_write(0x2001, t_high / 256);byte_write(0x2002, t_low % 25
42、6);byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);/*把数据从单片机内部eepom中读出来*/void read_eepom()t_high = byte_read(0x2001);t_high <<= 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low <<= 8;t_low |= byte_read(0x2002);a_a = byte_read(0x2055);/*18b20初始化函数*/void init_18b20()bi
43、t q;dq = 1;/把总线拿高delay_uint(1); /15usdq = 0;/给复位脉冲delay_uint(80);/750usdq = 1;/把总线拿高 等待delay_uint(10);/110usq = dq;/读取18b20初始化信号delay_uint(20);/200usdq = 1;/把总线拿高 释放总线/*写18b20内的数据*/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i+) /写数据是低位开始dq = 0; /把总线拿低写时间隙开始 dq = dat & 0x01; /向18b20总线写数据了d
44、elay_uint(5); / 60usdq = 1; /释放总线dat >>= 1;/*读取18b20内的数据*/uchar read_18b20()uchar i,value;for(i=0;i<8;i+)dq = 0; /把总线拿低读时间隙开始 value >>= 1; /读数据是低位开始dq = 1; /释放总线if(dq = 1) /开始读写数据 value |= 0x80;delay_uint(5); /60us读一个时间隙最少要保持60us的时间return value; /返回数据/*读取温度的值 读出来的是小数*/uint read_temp()
45、uint value;uchar low; /在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0x44); /启动一次温度转换命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0xbe); /发出读取暂存器命令EA = 0;low = read_18b20(); /读温度低字节value = read_18b20
46、(); /读温度高字节EA = 1;value <<= 8; /把温度的高位左移8位value |= low; /把读出的温度低位放到value的低八位中value *= 0.625; /转换到温度值 小数return value; /返回读出的温度 带小数/*定时器0初始化程序*/void time_init() EA = 1; /开总中断TMOD = 0X01; /定时器0、定时器1工作方式1ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时/*独立按键处理函数*/void key()static uchar key_new = 0,key_old = 0
47、,key_value = 0;if(key_new = 0) /按键松开的时候做松手检测if(P2 & 0x0f) = 0x0f)key_value +;else key_value = 0;if(key_value >= 10)write_eepom();key_value = 0;key_new = 1;flag_lj_en = 0;/关闭连加使能flag_lj_3_en = 0;/关闭3秒后使能flag_value = 0;/清零else if(P2 & 0x0f) != 0x0f)key_value +; /按键按下的时候else key_value = 0;if
48、(key_value >= 7)key_value = 0;key_new = 0;flag_lj_en = 1; /连加使能zd_break_en = 1; /自动退出设置界使能zd_break_value = 0; /自动退出设置界变量清零key_can = 20;if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; /自动退出设置界使能zd_break_value = 0; /自动退出设置界变量清零key_new = 0;key_old = 1;if(key_new = 0) && (key_old = 1)switch(P
49、2 & 0x0f)case 0x0e: key_can = 4; break; /得到k1键值case 0x0d: key_can = 3; break; /得到k2键值case 0x0b: key_can = 2; break; /得到k3键值case 0x07: key_can = 1; break; /得到k4键值 key_old = key_new; /*按键处理数码管显示函数*/void key_with()if(key_can = 4)menu_1 +;if(menu_1 >= 3)menu_1 = 0;if(menu_1 = 0)dis_smg0 = smg_dutemperature % 10; /取温度的小数显示dis_smg1 = smg_dutemperature / 10 % 10 & 0x7f; /取温度的个位显示dis_smg2 = smg_dutemperature / 100 % 10 ; /取温度的十位显示smg_i = 3;if(menu_1 = 1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 田忌赛马课件教学
- 2024一重集团融创科技发展限公司社会公开招聘8人易考易错模拟试题(共500题)试卷后附参考答案
- 传染病防控基本原理课件
- 2024年度光纤通信网络施工及维护合同3篇
- 考核19(西餐)试题
- 2024年度授权合同:某知名品牌授权生产许可
- 2024年度环保技术与研发合同
- 大学万圣节活动策划书14
- 开展同学聚会的策划方案
- 2024年度光伏项目中介担保合同
- 2024年江苏南京市玄武区社区工作者招聘笔试冲刺题(带答案解析)
- 【海南康养旅游现状和对策探究11000字(论文)】
- 2024年湖北荆州市城市发展控股集团有限公司招聘笔试参考题库含答案解析
- 小儿常见出疹性疾的课件
- 学生心理健康一生一策档案模板
- 初三孩子不想读书的心理教育
- PMP培训图解项目管理
- 报废机动车回收拆解企业技术规范
- 科学科普剧剧本小学
- 我的家乡石家庄元氏宣传介绍课件
- 老旧楼加装电梯方案
评论
0/150
提交评论