毕业论文-基于51单片机的家用电热水器设计说明_第1页
毕业论文-基于51单片机的家用电热水器设计说明_第2页
毕业论文-基于51单片机的家用电热水器设计说明_第3页
毕业论文-基于51单片机的家用电热水器设计说明_第4页
毕业论文-基于51单片机的家用电热水器设计说明_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于51系列单片机的家用电热水器设计摘要随着社会的发展和人类科技的进步,各行各业都在让自己的产品智能化、数字化。由于老式热水器是用燃气或天然气燃烧加热水,人工调节温度,不仅无法准确确定用户所需的水温,而且很危险。电热水器是一种可以在浴室、卫生间、厨房使用的家用电器。随着人们生活质量的提高,现代电热水器摒弃了以往的做法,采用了更加精准安全的实施方案。c语言在单片机编程中有很多优点,如移植容易、语法检查错误少、健壮性好、头文件种类多、各种函数使用方便快捷等。本文采用AT 89C 52单片机作为控制器,用C语言编写程序,设计了一种智能家用电热水器。使用编队键盘输入温度,温度可精确到0.1摄氏度,并

2、使用LED灯显示,可精确提供用户所需温度的温水。DS18B20用于采集温度,LED灯用于准确显示采集的水温。当所需温度高于当前收集水温时,使用MOC3041芯片触发加热,当所需温度低于当前收集水温时,停止加热。智能控制功能基本实现。关键词:单片机;c)语言;收集;智力;家用电热水器目录 TOC o 1-3 h z u HYPERLINK l _RefHeading_Toc292314143 第1章绪论1 HYPERLINK l _RefHeading_Toc292314144 1.1 家用电热水器的现状1 HYPERLINK l _RefHeading_Toc292314145 1.2 TX-

3、1C单片机实验开发板简介1 HYPERLINK l _RefHeading_Toc292314146 第2章系统硬件设计2 HYPERLINK l _RefHeading_Toc292314147 2.1 系统硬件的组成部分2 HYPERLINK l _RefHeading_Toc292314148 2.2 系统硬件各部分的简介2 HYPERLINK l _RefHeading_Toc292314149 2.3 数码管显示3 HYPERLINK l _RefHeading_Toc292314150 2.3.1 数码管简介3 HYPERLINK l _RefHeading_Toc29231415

4、1 2.3.2 数码管的实现方法4 HYPERLINK l _RefHeading_Toc292314152 2.3.3 锁存器与数码管显示方法6 HYPERLINK l _RefHeading_Toc292314153 2.4 键盘输入设计7 HYPERLINK l _RefHeading_Toc292314154 2.4.1 键盘输入方法7 HYPERLINK l _RefHeading_Toc292314155 2.4.2 键盘输入的抖动与去抖的方法8 HYPERLINK l _RefHeading_Toc292314156 2.5 DS18B20温度采集9 HYPERLINK l _R

5、efHeading_Toc292314157 2.5.1 DS18B20技术性能与应用围9 HYPERLINK l _RefHeading_Toc292314158 2.5.2 DS18B20的初始化与读写操作10 HYPERLINK l _RefHeading_Toc292314159 2.5.3 DS18B20的指令与格式12 HYPERLINK l _RefHeading_Toc292314160 2.5.4 DS18B20寄生电源供电方式15 HYPERLINK l _RefHeading_Toc292314161 2.5.5 DS18B20改进的寄生电源供电方式16 HYPERLIN

6、K l _RefHeading_Toc292314162 2.5.6 DS18B20外部电源供电方式17 HYPERLINK l _RefHeading_Toc292314163 2.5.7 DS18B20寄生电源供电方式18 HYPERLINK l _RefHeading_Toc292314164 第3章系统软件设计20 HYPERLINK l _RefHeading_Toc292314165 3.1 键盘输入的程序20 HYPERLINK l _RefHeading_Toc292314166 3.2 DS18B20温度传感器设计21 HYPERLINK l _RefHeading_Toc2

7、92314167 3.3 主函数的分析25 HYPERLINK l _RefHeading_Toc292314168 3.4 显示函数的分析26 HYPERLINK l _RefHeading_Toc292314169 3.5 中断加热子函数的分析33 HYPERLINK l _RefHeading_Toc292314170 第4章功能简介与成品图片35 HYPERLINK l _RefHeading_Toc292314171 4.1 智能热水器具的功能35 HYPERLINK l _RefHeading_Toc292314172 4.2 成品图片35 HYPERLINK l _RefHead

8、ing_Toc292314173 第5章总结与展望38 HYPERLINK l _RefHeading_Toc292314174 附录程序41第一章引言单片机是一种与我们生活密切相关的控制器。它存在于很多地方,比如电子表、掌上游戏机、数码相机、录音机、电视遥控器等等。单片机主要由CPU、存储器和输入输出设备组成。它就像一台小型电脑。它可以执行人编写的程序,然后发出各种控制命令。与外部电路结合,可以完成各种功能。通过单片机,人们的生活将变得更加方便快捷。1.1家用电热水器现状我们的家用电热水器是一种可以在浴室、厕所、厨房使用的家用电器,根据人们所需的温度提供温水。市场上传统的机械式电热水器控制精

9、度低,可靠性差,甚至存在一些隐患。随着社会的发展和人们生活质量的提高,人们对电热水器的要求越来越智能化、数字化。这种老旧简陋的电热水器已经不能满足人们的需求。智能家用电热水器的出现正好适应了现代智能家电的趋势。它可以为用户提供方便快捷的数字输入方式,并且可以精确采集和控制环境中的水温,提供给用户,因此备受人们的关注。1.2 TX-1C单片机实验开发板简介XT-1C单片机开发板是天翔电子基于多年开发经验,在原TX-1B的基础上精心设计开发的多功能51单片机开发平台。该开发板集成了单片机、串口、USB口的常用外设资源,完全兼容ATMEL的51单片机。此外,它还具有无法解密、功耗低、速度快、可靠性高

10、、抗静电性强、抗干扰能力强等特点。TX系列单片机开发板可以作为各种51单片机的开发板,可以用汇编语言编程,也可以用C语言编程。使用STC公司的单片机时,用产品套件附带的串口线直接将开发板与电脑串口连接,按照STC单片机操作教程下载程序,下载速度比其他下载工具快很多。本文将使用TX-1C开发板完成数字式电热水器的设计。第二章系统硬件设计2.1系统硬件的组件设计硬件的原理结构如图2.1所示。该系统以高性价比的AT89C51单片机为核心,由键盘输入、DS18B20温度采集、数码管显示电路、电源时钟复位电路、双向可控硅驱动电路MOC3041和双向可控硅TLC336A作为加热器控制电路组成。图2.1系统

11、设计硬件原理和结构2.2系统硬件各部分介绍这里AT89C51是总控制器。MCU的P0端口与74HC573锁存器连接,这样可以节省MCU的端口,P0端口可以多次操作,这样既可以控制数码管的片选,也可以控制数码管的位选,从而节省了MCU的外部接口,扩展了功能。键盘输入由P3端口完成。第四章将介绍如何实现。时钟的复位电路如图2.2所示。RET接在单片机的复位接口上,主要完成单片机的复位功能。图2.2时钟复位电路温度采集芯片由DS18B20芯片完成。DS18B20的2号接口连接到单片机的P22端口,按照协议传输两个字节的温度数据。第三章将介绍具体的实现方法。加热模块如图2.3所示,MOC3041芯片的

12、2号接口与单片机的P22接口相连。当需要加热时,P22接口发送低电平,这可以触发加热器工作。图2.3加热模块2.3数码管显示2.3.1数码管介绍单片机系统中常用的监视器有:LED(发光二极管)显示器、液晶CD(液晶显示器)显示器、CRT显示器等。LED和LCD显示器有两种显示结构:分段显示(7段,M形等。)和点阵显示(58、88点阵等。).使用LED显示屏时,注意区分这两种不同的连接。为了显示数字或字符,数字或字符必须被编码。七个数码管加一个小数点组成八段。因此,为LED显示器提供的代码正好是一个字节。本设计采用的TX-C1实验板采用共阴极LED显示,根据电路连接图显示的十六进制数代码如表2.

13、1所示。表2.1十六进制数字的编码十六进制数字系统数码管显示值十六进制数字系统数码管显示值十六进制数字系统数码管显示值0 x3f00 x7d六0 x39C0 x06一个0 x07七0 x5eD0 x5b20 x7f八0 x79E0 x4f三0 x6f九0 x71F0 x66四0 x77A0 x00没有显示0 x6d五0 x7cB2.3.2数码管的实现方法数码管的显示由端口P0控制。有两点需要注意。第一点是哪个数码管应该亮,第二点是亮的数码管显示什么数字。所以数码管分为位选和段选。位选择在程序中用魏表示,7是单片机上的端口,即7在位选择操作时处于高电平。此时数码管上P0的八个端口的操作决定了哪些

14、数码管导通,P0操作完成后P2 7处于低电平,从而锁位选择。程序中段表示段选择,6是单片机上的端口。如同位选择一样,P2 6在操作期间处于高电平。这时,数码管上P0的八个端口的操作决定了几个明亮的谢妮管显示什么数字。在P0的操作完成之后,P2 6处于低电平,从而段选择被锁定。如图2.4所示,由于单片机只起控制作用,其输出电流很小,所以P0端需要连接上拉电阻和5V电源,通过电压的变化控制5V电源点亮。如果想让电流通过图中的a端,就要给P00一个低电平来触发上拉电阻两端的电位差,这样电流就可以流到a点,a端对应的LED灯就亮了。图2.4 MCU和数码管之间的硬件连接首先选择位选择,然后选择段选择。

15、uchar代码表=0 x3f,0 x06,0 x5b,0 x4f,0 x66、0 x6d、0 x7d、0 x07、0 x7f、0 x6f、0 xbf、0 x86、0 xdb,0 xcf,0 xe6,0 xed,0 xfd、0 x87、0 xff、0 xef、0 x00,0 x08,0 x 88 ;可以直接设置数码管显示每个数字的十六进制,也就是分配给端口P0的十六进制,方便操作。如上述数组,使用时只需将所需数组中的一个给端口P0,这样数码管就能方便直观地显示所需数字。当选位选片的过程相当快时,在人眼中显示为一排容易识别的十进制数,这就是数码管的动态显示。2.3.3锁存器和数码管显示方法这里先介

16、绍74HC573芯片,这是一款锁存器芯片。连接方法如图2.5所示。P2 7和P26分别控制位选择和段选择的l端。比如当P2 7(程序中的全局变量wei)为高电平时,74HC573的输入端口的值会直接传到74HC573芯片的输出端,当输入端发生变化时,输出端会在变低时,74HC573芯片会记住最后一个l端口为高电平时芯片输入端的8位,并输出。当输入改变时,输出不变。这里我们可以利用latch的特性,让P27起到控制数码管点亮的作用,让P26控制数码管点亮什么样的数字功能。图2.5 74hc 573芯片的连接下面的数码管显示了一些程序。P0 = 0 xff魏= 1;P0 = srtemp/wein

17、开启后低电平点亮。魏= 0;srtemp=_crol_(srtemp,1);P0 = 0 x00段= 1;P0 = tabledisI;段= 0;延迟(1);段= 1;P0 = 0 x00段= 0;注意位的选择(程序中的魏变量)。当位选择为低时,选择此数码管点亮。显示的时候很容易出现不需要亮的LED灯管微微亮起的问题。这是因为所选的位选择和段选择都由P0赋值。如果首先选择位选择的8位值,并且P0端口没有回复到0 x00,则在段选择P0端口的所需值给出之前,它将导致段选择锁存器被分配P0端口刚刚选择的8位值。这样,在很短的时间内,一些不必要的LED灯就会亮起,而在单片机中。2.4键盘输入设计2.

18、4.1键盘输入法本设计采用矩阵键盘,如图2.6所示。图2.6矩阵键盘S10至S19分别表示数字0至9。S20代表确认号,可以按下它来确认要输入的数字。从上到下,左边键盘上的针脚分别是P30到P3 7。第一行暂时不用,从第二行开始用。每条线,如P31,都与P34、P35、P36和P3 7相连,这是线与线之间的关系。因此,可以这样扫描图中的第二、第三和第四行。当扫描第一行时,P3端口被分配0 xfd,即P31端口被分配“0”,而其它P3端口被分配“1”。当第二行中没有按键时,P3 4、P3 5、P36和P37都将处于高电平“1”。一旦一个键被按下,由于线、P3 4和P3 5之间的关系,你可以通过依

19、次扫描三条线来不时地检查一个键是否被按下。2.4.2键盘输入抖动及抖动方法。2.4.1节讲了如何扫描键盘,但是理论和实践还是有一定差距的。按下键盘,检测到电压变化,实际存在一定的时间误差。经过这个时间误差后,电压会达到单片机可以检测到的范围,但在此期间,单片机可能已经完成了检测,如图2.7所示。图2.7抖动示意图如果抖动没有消除,微控制器就已经开始检测人按手指的瞬间。此时,电压尚未下降到稳定的关闭状态,因此无法检测到压力。同样,无论他们按还是放开,都会出现这样的情况,不利于操作。因此,应增加抖动消除操作。图的右边是用硬件去除抖动,除了硬件还可以用软件去除抖动。本设计采用了软件防抖的方法。原理是

20、检测两次。第一次检测到低电平时,会延迟一段时间再检测。如果还能检测到低电平,说明确实有按键被按下。具体程序如下:while(temp!=0 xf0)延迟(5);P3 = 0 x FD;temp = P3;temp = temp & 0 xf0while(temp!=0 xf0)上面的程序嵌套在两个while循环之间。第一个while()语句判断某个键被按下后,会延迟一段时间。如果第二次判断也认为按键被按下,可以确认确实是键盘操作,而不是晃动。按下后的具体操作可以写在下一个while循环中。2.5 DS18B20温度采集2 . 5 . 1 ds18b 20的技术性能和应用范围图2.8 ds18b

21、 20的外形和引脚图DS18B20是一款网络化数字温度传感器芯片,耐磨、耐碰撞、体积小、使用方便、封装形式多样。适用于各种狭小空间设备的数字化温度测量和控制。独特的单线接口方式,DS18B20与微处理器连接时,只需要一根端口线就可以实现微处理器与DS18B20的双向通信。测温范围为-55 +125,固有测温分辨率为0.5。支持多点联网功能。多个DS18B20可以在仅有的三条线路上并联,最多并联八个。如果DS18B20太多,电源电压会太低,导致信号传输不稳定,多点测温。电源为35V/DC。使用时不需要任何外围器件,测量结果以9-12位的形式串行传输。不锈钢保护管直径为 6,适用于DN1525、D

22、N40DN250各种介质的工业管道和狭小空间设备的温度测量。标准安装螺纹M10X1、M12X1.5、G1/2英寸是可选的。PVC电缆可直接引出或德国球型接线盒引出,方便与其他电气设备连接。负压特性:电源极性接反时,芯片不会因发热而烧毁,但不会正常工作。DS18B20的结构主要由四部分组成:64位光刻ROM、温度传感器、非易失性温度报警触发器TH和TL、配置寄存器。DS18B20的形状和引脚排列如图2.8所示。本产品适用于冷库、粮仓、储罐、电信机房、电力机房、电缆槽等温度测控领域。、轴瓦、气缸、纺织机械、空调等狭小空间内工业设备的温度测控、供热/制冷管道热计量、中央空调分户热计量及工业领域的温度

23、测控、汽车空调、冰箱、冷柜、中低温烘箱等。2 . 5 . 2 ds18b 20的初始化和读写操作1.ds18b20的初始化(1)首先将数据线设置为高电平“1”;(2)延迟(这个时间不是很严格,但是尽量短);(3)数据线拉至低电平“0”;(4)延迟750微秒(这个时间的时间跨度可以从480到960微秒);(5)数据线被拉到高电平“1”;(6)延时等待(如果初始化成功,DS18B20返回的低电平“0”会在15到60毫秒内产生。根据这个状态可以确定它的存在,但要注意不能无限期等待,否则会使程序进入无限循环,所以需要进行超时控制);(7)如果CPU读取到数据线上的低电平“0”,仍然需要延迟,延迟时间距

24、离高电平至少要有480微秒(从步骤(5)的时间算起);(8)再次将数据线拉高至高电平“1”并完成。DS18B20的初始化如图2.9所示。图2.9 ds18b 20的初始化2.DS18B20的写操作(1)首先将数据线设置为低电平“0”;(2)延时决定的时间是15微秒;(3)按低位到高位的顺序发送字节(一次只发送一位);(4)延迟时间为45微秒;(5)将数据线拉至高电平;(6)重复从(1)到(6)的操作,直到所有字节都被发送;(7)最后把数据线拉高。这里,应该注意的是(3),写数据总是以1比特分开传输。这里有两种情况。当需要发送“1”时,单片机应该给DS18B20芯片的DQ接口分配一个低电平。大约

25、15秒后,DQ将延迟大约45微秒释放到高电平。当需要传输“0”时,微控制器要给DS18B20的DQ接口一个低电平,并保持低电平至少60微秒,然后释放DQ到高电平,再延时15秒左右。DS18B20写操作的时序图如图2.10所示。图2.10 ds18b 20写操作的时序图3.DS18B20的读取操作(1)将数据线拉高“1”;(2)延时2微秒;(3)将数据线“0”拉低;(4)延迟15微秒;(5)将数据线拉高“1”;(6)延迟15微秒;(7)读取数据线的状态,得到状态位,进行数据处理;(8)延迟30微秒;这里只要按照上面的操作顺序存储状态位的位即可。DS18B20读操作的时序图见图2.11。图2.11

26、 ds18b 20读取操作的时序图ds18b20的指令和格式DS18B20温度格式图见图2.12。图2.12 DS18B20温度格式图这是经过12位转换后得到的12位数据,存储在DS18B20的两个8位RAM中。二进制中的前五位是符号位。如果测得的温度大于0,则这五位为0。只需将测量值乘以0.0625,即可得到实际温度。如果温度小于0,这五位就是1,测量值需要反过来加1,再乘以0.0625,才能得到实际温度。比如+125时的数字输出是07D0H,在+25.0625时是0191H,在-25.0625时是FE6FH,在-55时是FC90H。DS18B20温度传感器的存储器DS18B20温度传感器的

27、存储器包括一个临时存储RAM和一个非易失性电可擦EEPRAM,存储高温和低温触发器TH、TL和结构寄存器。配置寄存器中,该字节每个位的含义如表2.2所示。表2.2配置寄存器结构温度输出(二进制)输出(十六进制)+1250000 0111 1101 000007D0+850000 0101 0101 00000550+25.06250000 0001 1001 00010191+10.1250000 0000 1010 001000A2+0.50000 0000 0000 1000000800000 0000 0000 00000000-0.51111 1111 1111 1000FFF8-10

28、.1251111 1111 0101 1110FF5E-25.06251111 1110 0110 1111FE6F-551111 1100 1001 0000FC90暂存存储器由9个字节组成。分布情况见表2.3。发出温度转换命令后,转换后的温度值以双字节补码的形式存储在暂存存储器的第0和第1个字节中。单片机可以通过单线接口读取数据,低位在前,高位在后。对应温度计算:当符号位S=0时,二进制位直接转换为十进制;当S=1时,先把补码换成原码,再计算十进制值。第九个字节是冗余校验字节。表2.3 ds18b 20临时寄存器的分布寄存器容量字节地址低温(LS字节)0温度高(毫秒字节)一个高温极限(TH

29、)2低温极限(TL)三配置寄存器四保留五保留六保留七CRC校验值八根据DS18B20的通信协议,主机(单片机)控制DS18B20完成温度转换,必须经过三个步骤:每次读写前,必须将DS18B20复位;复位成功后,发送ROM指令,最后发送RAM指令,这样DS18B20就可以按照预定的方式运行了。为了复位,主CPU需要下拉数据线500微秒,然后释放它。DS18B20接收信号时,等待约16 60微秒,然后发出一个已有的60 240微秒的低脉冲。当主CPU接收到该信号时,表示复位成功。ROM指令表见表2.4,RAM指令表见表2.5。表2.4 ROM指令列表手指顺序合同代码功能读取只读存储器33H读取DS

30、1820温度传感器ROM中的代码(即64位地址)符合只读存储器55小时该命令发出后,发出64位ROM代码,访问单总线上该代码对应的DS1820,使其响应,为下一次读写该DS1820做准备。搜索只读存储器0FOH用于确定连接到同一总线的DS1820的数量,并识别64位ROM地址。准备操作每个设备。跳过ROM0CCH忽略64位ROM地址,直接向DS1820发送温度转换命令。适合单片机工作。警告搜索命令0ECH执行后,只有温度超过设定值上限或下限的胶片才会响应。表2.5 RAM指令列表手指顺序合同代码功能温度转变44H启动DS1820进行温度转换,12位转换最长时间为750 ms (9位转换为93.

31、75ms)。结果存储在9字节RAM中。读取寄存器0BEH读取RAM中9个字节的容量写寄存器4EH将上限和下限温度数据命令写入发送单元RAM的3字节和4字节,并在该命令后立即传输两个字节的数据。复制寄存器48小时将RAM中第3和第4个字节的内容复制到EEPROM中。复位EEPROM0B8H将EEPROM的内容恢复到RAM的第3和第4个字节。读取电源模式0B4H读取DS1820的电源模式。寄生电源中,DS1820发送“0”,外部电源DS1820发送“1”。2.5.4DS18B20寄生电源供电模式DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用端口线路少等优点。以下是DS18B20

32、在几种不同应用模式下的测温电路图:DS18B20寄生电源供电方式的电路图如图2.13所示。在寄生电源供电模式下,DS18B20从单线信号线吸取能量:当信号线DQ处于高电平时,它将能量储存在一个局部电容中,当信号线处于低电平时,它消耗电容上的电能工作,然后给寄生电源(电容)充电,直到高电平到来。这种独特的寄生发电方式有三个好处:1.远距离测温时,不需要本地电源;2.ROM无需常规电源即可读取;3.电路更加简洁,仅用一个I/O口测量温度。为了使DS18B20进行准确的温度转换,I/O线必须在温度转换期间提供足够的能量。由于每个DS18B20在温度转换期间的工作电流达到1mA,当几个温度传感器挂在同

33、一个I/O线上进行多点测温时,仅通过上拉4.7K的电阻无法提供足够的能量,会导致无法转换温度或者温度误差很大。因此,这种电路只适用于单个温度传感器,不适用于供电系统。工作电源VCC必须保持在5V。当电源电压下降时,寄生功率所能吸收的能量也会减少,从而使温度误差变大。图2.13 DS18B20寄生电源供电模式2.5.5DS18B20改进寄生电源供电模式DS18B20寄生电源的强上拉供电模式和改进后的寄生电源供电模式的电路图如图2.14所示。为了使DS18B20在动态转换周期中获得足够的电流供应,在进行温度转换或拷贝到E2存储器时,MOSFET可以直接将I/O线拉到VCC提供足够的电流。在发出任何

34、与复制到E2存储器或开始温度转换相关的指令后,I/O线必须切换到强上拉状态,最长10S。在强上拉模式下,可以解决电流供应不消失的问题,因此它也适用于多点温度测量应用。缺点是强上拉切换需要多占用一条I/O口线。图2.14改进的寄生电源供电模式注意:在图2.13和图2.14所示的寄生电源供电模式下,DS18B20的VDD引脚必须接地。2 . 5 . 6 ds18b 20的外部供电模式DS18B20的外部供电模式如图2.15所示。在外接电源模式下,DS18B20的工作电源通过VDD引脚连接。此时I/O线不需要强拉,不存在电源电流不足的问题,可以保证转换精度。同时,总线上可以连接任意数量的理论连接。D

35、S18B20传感器,组成多点温度测量系统。注意:外接电源模式下,DS18B20的GND引脚不能悬空,否则无法转换温度,读取的温度始终为85。图2.15外部供电模式下的单点温度测量电路本次设计采用外接电源,连接方式如图2.16所示。图2.16设计中使用的温度测量电路DS18B20的I/O口直接连接到单片机的P22,这样就可以在硬件中进行数据交换,从而达到温度数据传输的目的。2.5.7DS18B20寄生电源供电模式外部供电模式的多点测温电路图如图2.17所示。外接电源模式是DS18B20的最佳工作模式,工作稳定可靠,抗干扰能力强,电路简单,因此可以开发出稳定可靠的多点温度监测系统。建议站长在开发中

36、使用外接电源模式。毕竟,只有一个比寄生能量模式多的VCC引线。在外接电源的模式下,可以充分发挥DS18B20电源电压范围宽的优势,即使电源电压VCC降至3V,仍能保证测温精度。图2.17外部供电模式下多点温度测量电路图第三章系统软件设计3.1键盘输入程序while(temp!=0 xf0)延迟(5);P3 = 0 x FD;temp = P3;temp = temp & 0 xf0while(temp!=0 xf0)temp = P3;开关(温度)案例0 x ed:num = 0;打破;案例0 x DD:num = 1;打破;案例0 x BD:num = 2;打破;案例0 x7d:num =

37、3;打破;while(temp!=0 xf0)temp = P3;temp = temp & 0 xf0/*0000这里使用了_crol_ function,所以应该将#include添加到头文件中,它包括去抖和放手检测。在检测之后,num由不同的temp值赋予相应的值,因此num是要输入的数字。3.2 ds18b 20温度传感器的设计接好电路后,就可以开始设计DS18B20的软件链接了。首先初始化DS18B20,下面是初始化程序。void dsstart()无符号int I;ds = 0;i = 100/拉低800us左右,比协议要求的480us多。while(I 0)I-;ds = 1;/

38、产生上升沿,进入等待回复状态。I = 4;while(I 0)I-;然后等待和回应。例如下面的子功能。void dswait()无符号int I;while(ds);/等待回复信号while( ds);/检测到响应脉冲。I = 4;while(I 0)I-;读取数据时使用以下两个子功能。在温度采集和读取过程中可以调用它。Bit readbit()/读取一个位无符号int I;b位;ds = 0;i+;/延迟在8us左右,符合协议要求,保持至少1us。ds = 1;i+;i+;/延迟在16us左右,满足协议要求的延迟至少在15us以上。b = dsI = 8;while(I 0)I-;/延迟约6

39、4us,满足读取时隙不小于60us的要求。返回b;Uchar readbyte()/读取一个字节 uint b;uchar日期,a;b = 0;日期= 0;而(b8)a = read bit();date =(a 1);b+;返回日期;下面是写命令程序。用于操纵DS18B20。void writer(uchar order)/写命令uint b;uchar a;位bit2b = 0;for(a = 0;a = 1;If(bit2)/写1ds = 0;b+,b+;ds = 1;for(b = 0;b 8;b+);else/0ds = 0;for(b = 0;b 8;b+);ds = 1;b+;b

40、+;上面的程序写出来的时候,准备工作就基本完成了。现在,只需调用这些函数来控制DS18B20按照协议将温度数据传输给单片机。软件实现方法如下:Void changetemp()/温度转换函数ds start();ds wait();延迟(1);写者(0 x cc);/跳过读取序列号和列号的操作。写者(0 x 44);/开始温度转换延迟(1);Uint gettemp()/获取温度浮动TT;内部温度;uchar geta,getbds start();ds wait();延迟(1);写者(0 x cc);写者(0 x be);/读取温度命令延迟(2);geta = read byte();/读取

41、两个字节getb = read byte();temp = getb温度 0?0.5 : -0.5);/,大十倍,四舍五入。返回(临时);上面两个程序流程如下:在changetemp()子函数中,先初始化DS18B20,芯片应答后,写入两个以字节为单位的命令。0 xcc和0 x44的作用分别是跳过读取序列号和开始温度转换的操作。然后温度采集gettemp()子函数完成。在gettemp()子函数中,首先初始化DS18B20,然后等待响应。写命令0 xcc跳过读取序列号和列号的操作,0 xbe读取温度命令。Readbyte()用来读取两个字节的数据,分别给geta和getb两个字符变量,然后把g

42、etb给temp(temp是一个容量为两个字节的整数变量),这样temp的低位8就是getb中的值。Temp=8表示Temp=temp 0?0.5: -0.5)这句话首先将tt从一个最高位保留一位小数的十位数展开十倍,扩展为一个最高位保留一百位数的三位数,再加上十一个舍入赋值语句,相当于一个if语句。c语言是,当任何一个精度高的变量变成精度低的变量时,就会失去一定的精度,就会被四舍五入。例如,在这里,如果tt处于正温度,当它变大10倍时,小数点后的一位不是1就是9。如果要对一个正的tt进行四舍五入,首先要在tt上加0.5,然后赋给精度更低的temp,这样就可以有四舍五入的功能了。然而,这里就没

43、那么简单了。这个if语句还应该考虑tt为负时的操作。如果temp是负的,你应该在tt变大10倍后减去0.5,这样3.3主要功能分析首先,给出主要功能:void main()TMOD = 0 x 01;TH0 =(65536-46000)/256;TL0 =(65536-46000)% 256;EA = 1;ET0 = 1;TR0 = 1;ZD = 0;num = 21AAA = 0;BBB = 0;num1 = 21num2 = 21num3 = 21while(1) uint a;乌恰尔b;change temp();a = gettemp();b = scanff();numy = get

44、temp();显示(a,b);这里,aaa用于控制输入的数字是否是所需的数字,bbb用于标记已经输入的三位数。主函数先给使用的全局变量赋值,然后进入大循环,先进入温度转换函数,让DS18B20开始温度转换,然后获取温度,把两个字节的值赋给A,把输入的温度赋给B,然后display(a,B)子函数输出所有的值。3.4显示功能分析以下是display()函数的具体内容。空显示(uint a,uchar b)uchar i,temp,srtemp,dis4;uint ddaDDA = ABS(a);numx = DDA/1000;num 4 = DDA % 1000/100;num 5 = DDA

45、% 100/10;num6 = dda % 10dis0= numx;dis1= num 4;dis2= num 5;dis3= num 6;dis2+= 10;/num5小数点if(dis0=0)&(dis1=0)dis1= 20;/如果百位和十位都是0,则不显示If(a0)/在负值后添加一个小数点dis3+= 10;其他if(dis0!=0)/大于100前面有一个小数点dis1= dis1+10;temp = 0 xfbfor(I = 1;I 4;i+)P0 = 0 xff魏= 1;temp=_crol_(temp,1);P0 =温度;魏= 0;P0 = 0;段= 1;P0 = table

46、disI;段= 0;延迟(3);段= 1;P0 = 0 x00段= 0;if(aaa=1&ccc!=21)bb b+;开关(bbb)案例0:dis1= b;num 1 = b;dis2= num 2;dis3= num 3;if(dis2=21)dis2+;其他dis2+= 10;srtemp = 0 xfefor(I = 1;I 4;i+)P0 = 0 xff魏= 1;P0 = srtemp/wein开启后低电平点亮。魏= 0;/srtemp=_crol_(srtemp,1);P0 = 0 x00段= 1;P0 = tabledisI;段= 0;延迟(1);段= 1;P0 = 0 x00段=

47、 0;打破;案例1:dis1= num 1;dis2= b;num 2 = b;dis3= num 3;if(dis2=21)dis2+;其他dis2+= 10;srtemp = 0 xfefor(I = 1;I 4;i+)P0 = 0 xff魏= 1;P0 = srtemp/wein开启后低电平点亮。魏= 0;/srtemp=_crol_(srtemp,1);P0 = 0 x00段= 1;P0 = tabledisI;段= 0;延迟(1);段= 1;P0 = 0 x00段= 0;AAA = 0;打破;案例二:dis1= num 1;dis2= num 2;dis3= b;num 3 = b;

48、if(dis2=21)dis2+;其他dis2+= 10;srtemp = 0 xfefor(I = 1;I 4;i+)P0 = 0 xff魏= 1;P0 = srtemp/wein开启后低电平点亮。魏= 0;/srtemp=_crol_(srtemp,1);P0 = 0 x00段= 1;P0 = tabledisI;段= 0;延迟(1);段= 1;P0 = 0 x00段= 0;AAA = 0;打破;案例三:dis1= num 1;dis2= num 2;dis3= num 3;if(dis2=21)dis2+;其他dis2+= 10;srtemp = 0 xfefor(I = 1;I 4;i

49、+)P0 = 0 xff魏= 1;P0 = srtemp/wein开启后低电平点亮。魏= 0;/srtemp=_crol_(srtemp,1);P0 = 0 x00段= 1;P0 = tabledisI;段= 0;延迟(1);段= 1;P0 = 0 x00段= 0;AAA = 0;num = 21打破;默认值:BBB = 0;打破;首先要明确A是DS18B20芯片采集的温度,B是要输入的温度,也就是需要的水温。这里用了Abs(a)和_crol_所以头文件里要写#include 和#include。dda用于防止在A为负时完成以下操作。取出dda的千位、百位、十位、个位,分别存储在Numx、nu

50、m1、num2、num3中。Dis4用于方便for语句的赋值操作。这里我们需要在显示时考虑DS18B20采集的数据中的各种情况。第一,超过100度。第二:正常的十度或者几十度。第三:只有几度没有超过十度。第四温度为负。if(dis0=0)&(dis1=0)dis1= 20;/如果百位和十位都是0,则不显示上面这句话指的是三种情况。If(a=numy&num1!=21&num2!=21&num3!=21) jiar = 1;P1 = 0 x FD;jiar = 0;其他jiar = 1;P1 = 0 x ff;jiar = 0;采用定时器T0,设置定时器每30ms中断一次,以判断输入值和采集值之

51、间的值。如果前者较大,P21会变成低电平,从而启动MOC3041,引起发热。如果后者大于前者,高水平的P22不会引起加热。这样就达到了温度控制的目的。第4章功能介绍和成品图片4.1智能热水器的功能(1)使用高清数码管实时显示水温,0 102左右。(2)可以使用键盘方便地设定水温,并显示设定温度。(3)根据设定温度设定相应的水温,并具有保温功能。首先单片机显示采集的温度值,等待系统输入温度。输入三个数字后,第一、第二和第三个数字分别是所需温度的第十、第一和第一个小数位。输入完成后,每隔30ms将输入温度与单片机采集的环境温度进行比较。如果输入温度高于或等于采集温度,单片机将触发MOC3041开始

52、加热;如果输入温度低于收集的温度,则不会启动或停止加热。4.2成品图片等待输入的开发板如图4.1所示。图4.1等待输入的开发板输入后,当输入温度高于开发板测得的环境温度时。单片机的P11接口会出现低电平,所以用第二个LED来点亮。这里第二个LED只是模拟加热,没有加热功能。在实际电路板中,P11只需连接到MOC3041的2号接口,完成温度输入并确定加热,如图4.2所示。图4.2温度输入完成,钻头加热状态确定。当环境温度高于输入温度时,加热停止。实物见图4.3。图4.3停止加热状态第五章总结与展望本文详细介绍了用89C51单片机设计的数字式热水器。本文的主要工作如下:(1)阐述了键盘输入电路的基

53、本原理以及如何通过硬件和软件消除抖动。(2)阐述数码管的显示原理,如何动态显示数字的方法,说明如何方便快捷地调用数组使数码管显示相应的数字。(3)阐述了利用中断子程序在30ms内完成一次发热检测的方法。(4)阐述了温度采集芯片的详细参数、操作方法、与单片机的硬件连接、软件控制等设计细节。当然,这种设计也有不足之处。设计完成后,单片机有时会死机,复位后又恢复正常状态。希望在以后的学习中找到解决这个问题的方法。本文的设计完成了开发板上的基本功能,对单片机的未来发展有很好的借鉴意义。希望随着科技的进步,数码家电能够更加完善,更好的造福人类。参考1剑卿,王春生人。从零开始学习单片机技术M。:国防工业,

54、2008年。2张,吴清平,王林.模拟电子技术M。:科技大学,2008.25-363林申茂。8051单片机深入研究基础M。:中国电力,2007。4高涛,卢丽娜,院长。c语言程序设计M。交大,2007。78-825田果,白燕,董玲. 51单片机C语言程序设计实用与典型例题M.:中国电力,2001。6雍玉龙、宁、卢洪武。用AT 89C 51单片机设计的智能家用电热水器R。:师范大学传播学院,2005。7郭天祥。10天学会51单片机M。:工科大学。, 20078、金、陶。GSM远程温度控制论文D.:工程大学邮电与信息工程学院,2009。金虎。数字电路与逻辑设计M。高等教育,2004年12月。10左全生

55、,应.电路分析教程M。电子工业,2007年7月。11吴。计算机应用基础M。:大学,2007年。12约萧飞邱实。电路分析基础M。:人民邮电,2003年7月。致谢从选题到资料收集,从写稿到反复修改,经历了喜悦、喧嚣、痛苦、彷徨,写论文的过程中心情是如此复杂。现在有了这篇毕业论文的终稿,那种复杂的心情消失了,我甚至有了一点成就感。我不得不非常感谢我的导师。她为人随和热情,学习严谨认真。在闲聊中,她总是像知己一样鼓励你,在论文的写作和措辞上,她总是以“专业水准”严格要求你。从开始的选题、选题确定,到论文的最后修改、打磨,导师总是以认真负责的态度,给予我深刻细致的指导,帮助我开拓研究思路,细心的点拨,热

56、情的鼓励。正是导师的无私帮助和热情鼓励,我的毕业论文才能顺利完成。我很想感受一下我在研究项目期间帮助了同学。正是在这种互相帮助,互相关心的友谊下,我才能理清自己的写作思路。在此,向对我的论文提出了许多宝贵意见和建议的同学们表示诚挚的谢意。附录整体程序代码#include#include#include #定义uchar无符号字符#定义uint无符号整数sbit duan=p26;sbit wei=p27;sbit ds=p22;sbit jiar=p25;uchar num,num1,num2,num3,numx,num4,num5,num6,aaa、bbb、ccc、ZD;int numyuc

57、har代码表=0 x3f,0 x06,0 x5b,0 x4f,0 x66、0 x6d、0 x7d、0 x07、0 x7f、0 x6f、0 xbf、0 x86、0 xdb,0 xcf,0 xe6,0 xed,0 xfd、0 x87、0 xff、0 xef、0 x00,0 x08,0 x 88 ;/20,21无效延迟(uchar i)uint j;当(我-)for(j = 0;j 0)I-;ds = 1;/产生上升沿,进入等待回复状态。I = 4;while(I 0)I-;void dswait()无符号int I;while(ds);/等待回复信号while( ds);/检测到响应脉冲。I = 4;while(I 0)I-;Bit readbit()/读取一个位无符号int I;b位;ds = 0;i+;/延迟在8us左右,符合协议要求,保持至少1us。ds = 1;i+;i+;/延迟在16us左右,满足协议要求的延迟至少在15us以上。b = dsI = 8;while(I 0)I-;/延迟约64us,满足读取时隙不小于60us的要求。返回b;Uchar readbyte()/读取一个字节 uint b;uchar日期,a;b = 0;日期= 0;而(b8)a = read bit();date =(a 1);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论