基于5单片机的家用电热水器的设计设计

上传人:沈*** 文档编号:132674082 上传时间:2022-08-08 格式:DOC 页数:45 大小:1.94MB
返回 下载 相关 举报
基于5单片机的家用电热水器的设计设计_第1页
第1页 / 共45页
基于5单片机的家用电热水器的设计设计_第2页
第2页 / 共45页
基于5单片机的家用电热水器的设计设计_第3页
第3页 / 共45页
点击查看更多>>
资源描述
实 验 设 计题目: 基于51单片机的家用电热水器设计 姓 名: 陈太宇 学 号: 15220233 所在学院: 信息工程学院 专业班级: 电子信息工程2班 指引教师: 张守兴 10月 25日声 明本人郑重声明:所呈交的毕业论文(设计),是本人在指引教师指引下,独立进行研究工作所获得的成果。尽我所知,除文中已经注明引用的内容外,实验设计的研究成果不涉及任何她人享有著作权的内容。对本实验(设计)所波及的研究工作做出奉献的其她个人和集体,均已在文中以明确方式标明。本人签名:陈太宇 日 期: 年10 月 25日摘 要随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节温度,不仅不可以精确的拟定使用者需要的水温,并且还存在一定的危险性。电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质量的提高,现代的家用电热水器已经摒弃了此前的做法,而采用一种更加精确、安全的实行方案。C语言对单片机编程有诸多长处,例如:便于移植、句法检查时错误少、结实性好、头文献种类诸多,可以以便快捷使用多种函数等。本文采用 AT 89C 52 单片机作为控制器,使用C语言编写程序,设计了一款智能家用电热水器。使用阵型键盘输入温度,温度可以精确到0.1摄氏度,并使用LED灯显示,可以精确提供顾客所需温度的温水。采用DS18B20采集温度,使用LED灯显示,精确的显示出采集的水温。当所需温度高于目前采集的水温时,使用MOC3041芯片触发加热,当所需温度低于目前采集的水温时,则停止加热。基本实现了智能控制功能。核心词:单片机;C语言;采集;智能;家用电热水器 AbstractWith the development of social and program of human technology, every trade all transfer own product into intelligence, digitize, because the water heater of old style uses gas or natural gas to heat water and manually adjust mode conditioning temperature, not only unable to sufficiently accurately recognize the user need of water temperature, but also exist some certain risk. The electrical water heater is a kind of home appliances that bathroom, loo and kitchen can use, with raising of quality of human live, the modernistic household electrical water heater has abandonned the past way, but adopts a kind of implementation scheme of more accurate ,safety.C language possess many merits for programming of singlechip, such as:Is easy to ransplant, having little bug when sentence construction review, fastness good, the head document type is so many that expediently quickly using various function etc.The writer adopts an AT 89 Cs 52 singlechip to be the controller and using C languages to write programming ,design a style of intelligence household electrical water heater.Use array form keyboard input temperature, the temperature can be accuratly recognized to 0.1 , and use LED light display it, can accurately provide to the warm water of temperature that user needs.Adopt DS18 B20 to collect temperature, use LED light display, the accurately displays to collect water temperature.When the temperature needed higher than to collect water temperature at present, use the MOC3041 chip lead to heating , when the temperature needed is lower than the collect water temperature at present, stop heating.The simply carry out intelligence control function.Key Words: singlechip; C language; collect; Intelligence; household electric water heater目 录第1章 绪论11.1 家用电热水器的现状11.2 TX-1C单片机实验开发板简介1第2章 系统硬件设计22.1 系统硬件的构成部分22.2 系统硬件各部分的简介22.3 数码管显示32.3.1 数码管简介32.3.2 数码管的实现措施42.3.3 锁存器与数码管显示措施62.4 键盘输入设计72.4.1 键盘输入措施72.4.2 键盘输入的抖动与去抖的措施82.5 DS18B20温度采集92.5.1 DS18B20技术性能与应用范畴92.5.2 DS18B20的初始化与读写操作102.5.3 DS18B20的指令与格式122.5.4 DS18B20寄生电源供电方式152.5.5 DS18B20改善的寄生电源供电方式162.5.6 DS18B20外部电源供电方式172.5.7 DS18B20寄生电源供电方式18第3章 系统软件设计203.1 键盘输入的程序203.2 DS18B20温度传感器设计213.3 主函数的分析253.4 显示函数的分析263.5 中断加热子函数的分析33第4章 功能简介354.1 智能热水器具的功能35第5章 总结38附录 程序41第1章 绪论 单片机是一种与我们生活息息有关的控制器,它存在于许多地方,例如:电子手表、掌上游戏机、数码相机、录音笔、电视机遥控器等等。单片机重要由中央解决器、内存、输入/输出设备构成,它就仿佛是一台小型电脑,它可以执行人们对它编写的程序,从而发出多种不同的控制命令,与外部电路结合后,便可以完毕多种各样的功能。通过单片机人们的生活将会变得更加以便、快捷。1.1 家用电热水器的现状目前市场上热水器品种重要有电热水器、太阳能热水器、燃气热水器。我们的生活电热水器是一种可供浴室、洗手间及厨房使用,按照人们的需要的温度,提供温水的家用电器。市场上老式的机械式电热水器控制精度低、可靠性差,甚至存在一定的危险隐患。随着社会的发展、人们生活质量的提高,人们对电热水器的规定越来越趋向于智能化和数字化,这种老式而简朴的电热水器已经不可以满足人们的需要了。而智能化家用电热水器正是适应现代化智能家用电器趋势而浮现。它能提供顾客以便快捷的数字化输入方式,并且能精确的采集和控制环境中的水温,将其提供应顾客,因此备受人们的关注。1.2 TX-1C单片机实验开发板简介XT-1C单片机开发板是哈尔滨市天祥电子综合近年开发经验,在原TX-1B基本上,通过精心设计开发出的多功能51单片机开发平台。该开发板集常用的单片机外围资源、串口和USB口两种调试下载接口于一身,完全兼容ATMEL公司的51单片机,除此之外尚有诸多特点,如:无法解密、低功耗、高速、高可靠、强抗静电、强抗干扰等。TX系列单片机开发板可完全作为多种51单片机的开发板,用汇编语言或者C语言对其进行编程。当用STC公司的单片机时,直接用产品套件附带的串口线将开发板与计算机串口相连,按照STC单片机下载操作教程便可如下载程序,并且下载速度比起其她下载工具要快的多。本文将使用TX-1C开发板完毕数字化电热水器的设计。第2章 系统硬件设计2.1 系统硬件的构成部分系统设计硬件原理构造见图2.1所示。系统以高性价比的AT89C51单片机为核心,由键盘输入、DS18B20温度采集、数码管显示电路、电源时钟复位电路、双向可控硅驱动电路MOC3041、双向可控硅TLC336A构成加热器控制电路。 图2.1 系统设计硬件原理构造2.2 系统硬件各部分的简介这里AT89C51为总控制器。单片机的P0口连接74HC573锁存器,这样可以节省单片机端口,即可多次操作P0口,使其既能控制数码管的片选,又能控制数码管的位选,从而节省的单片机的外部接口,扩展了功能。键盘的输入由P3口完毕在第4章节中会具体简介如何实现。时钟复位电路见图2.2所示,RET连接单片机的RESET接口,重要完毕单片机的复位功能。图2.2 时钟复位电路温度采集芯片由DS18B20芯片完毕,DS18B20的2号接口接在单片机的P22口,按合同传送以两个字节为一组的温度数据,第3章会简介具体实现措施。加热模块见图2.3所示,MOC3041芯片的2号接口连接单片机的P22口。当需要加热时,P22接口送出低电平,即可触发加热器工作。图2.3 加热模块2.3 数码管显示2.3.1 数码管简介单片机系统中常用的显示屏有:发光二极管LED(Light Emitting Diode)显示屏、液晶CD(Liquid Crystal Display)显示屏、CRT显示屏等。LED、LCD显示屏有两种显示构造:段显示(7段、米字型等)和点阵显示(58、88点阵等)。使用LED显示屏时,要注意辨别这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一种小数点,合计8段。因此为LED显示屏提供的编码正好是一种字节。本设计采用的TX-C1实验板是采用共阴LED显示屏,根据电路连接图显示十六进制数的编码见表2.1所示。表2.1 十六进制数的编码十六进制编码数码管显数值十六进制编码数码管显数值十六进制编码数码管显数值0x3f00x7d60x39C0x0610x0770x5eD0x5b20x7f80x79E0x4f30x6f90x71F0x6640x77A0x00无显示0x6d50x7cB2.3.2 数码管的实现措施数码管的显示由P0口完毕控制。有两点需要注意,第一点是要哪一种数码管亮,第二点是亮的数码管显示什么数字。因此数码管有位选和段选之分,位选在程序中用wei表达,单片机上是P27端口,即对位选操作时使P27呈现高电平,这时P0的八个端口对数码管的操作决定了那几种数码管亮,P0操作完毕后使P27呈现低电平,这样位选就已锁定。段选在程序中由duan表达,单片机上是P26端口,与位选相似,操作时使P26呈现高电平,这时P0的八个端口对数码管的操作决定了亮的几种数码管显示什么数字,P0操作完毕后使P26呈现低电平,这样段选就已锁定。见图2.4所示由于单片机仅仅起到控制的作用,其输出电流十分小,因此P0端需要接上拉电阻与5V电源,通过电压的变化控制5V电源点亮,想要图中a端由电流通过时,即给P00一种低电平,触发上拉电阻两端间的电势差,这样就能促使电流流向a点,从而使a端相应的LED灯点亮。图2.4 单片机与数码管的硬件连接一方面选择位选,再选择段选。uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00,0x08,0x88;可以直接设立数码管显示各数字的十六进制,即P0口应赋的十六进制,以便操作。如以上数组,使用时仅仅将需要的数组中的其中一种赋予P0口,这样可以以便直观得使数码管显示需要的数字。选择位选与选择片选的过程相称快时,显示在人眼中就是一排易于辨认的十进制数字,这就是数码管的动态显示。2.3.3 锁存器与数码管显示措施在这里先简介74HC573芯片,这是一种锁存器芯片,连接措施见图2.5所示, P27、P26分别控制位选和段选的L端,例如:当P27(程序中的全局变量wei)赋高电平时,74HC573输入端口的值将直接输送给74HC573芯片的输出端,当输入端变化时,输出端也变化。P27赋低电平时, 74HC573芯片将记住近来一次L端口是高电平时芯片输入端的8位,并将其输出,当输入端变化时,输出端不变化。在这里就可以运用锁存器的特性使P27起到控制那个数码管亮的作用,使P26控制数码管亮什么样的数字作用。图2.5 74HC573芯片的连接如下数码管显示部分程序。P0=0xff;wei=1;P0=srtemp;/wein打开后 是低电平亮wei=0;srtemp=_crol_(srtemp,1);P0=0x00;duan=1;P0=tabledisi;duan=0;delay(1);duan=1;P0=0x00;duan=0;要注意的是位选(程序中的wei变量),位选是低电平时选择该数码管亮。在显示时容易浮现不需要亮的LED管微微发亮的问题,这是由于所选择的位选和段选都是通过P0赋的值,如果先选择位选的8位值,P0口不还原成0x00,就会导致段选打开后,尚未赋予段选P0口需要的数值之前,这段时间内P0口将刚刚位选的8位值赋予了段选锁存器,这样就会在极短的时间内,某些不需要的LED灯点亮,在单片机上就是由LED灯微微亮的状况,因此在这里注意每次P0对位选赋值此前,都应当保证P0口为0x00。2.4 键盘输入设计2.4.1 键盘输入措施本设计中使用的是矩阵式键盘,见图2.6所示。图2.6 矩阵式键盘S10到S19分别代表数字0到9。S20代表确认数字,按下后即可确认要输入数字的某一位。左侧键盘的引脚由上至下分别是P30到P37,第一行临时不用,从第二行开始使用,每一行如P31都与P34、 P35、 P36 、P37,她们是线与的关系。因此可以如此操作,对图中第二行、第三行、第四行诸行进行扫描。扫描第一行时P3口赋值为0xfd,即为P31口赋“0”,P3的其她口赋“1”,当第二行没有按键按下时P34、 P35、 P36 、P37将都是高电平“1”,一旦有按键按下时,由于线与关系,P34、 P35、 P36 、P37必然有一种为“0”,它们之中那一种为“0”依次代表S10到S13哪个键被按下。依次循环扫描三行即可时时检测与否有键按下。2.4.2 键盘输入的抖动与去抖的措施在2.4.1节中谈到了如何实现键盘的扫描,但是理论与实际还是有一定的差距,当按下键盘到检测到有电压变化,这段时间在实际中是存在一定的时间误差的,通过这段时间误差后电压才会达到单片可以检测到的范畴,但这期间单片机很有也许已经完毕检测,见图2.7所示。图2.7 抖动示意图如果不清除抖动的话,人们手指按下的瞬间单片机已经开始检测,这时电压尚未降到稳定闭合状态因此不能检测到按下,同理不管是按下,还是是松手都会有这样的状况浮现,不利于操作,因此应当加入去抖操作,图中右侧是硬件清除抖动,除了硬件去抖以外还可以运用软件去抖。在本设计中采用软件去抖的措施,原理是检测两次,第一次检测到低电平时延时一段时间,再检测一次,如果还能检测到低电平,则阐明的确有键按下。具体程序如下:while(temp!=0xf0)delay(5);P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0)上述程序是两个while循环之间的嵌套,第一种while()语句判断有键按下后,延时一段时间再进行判断,如果第二次判断也觉得由键按下,则可以确认的确由键盘操作,并不是抖动。具体按下后的操作可以在后一种while循环中书写。2.5 DS18B20温度采集2.5.1 DS18B20技术性能与应用范畴图2.8 DS18B20的外形及管脚图DS18B20是一种可组网数字温度传感器芯片,具有耐磨耐碰,体积小,使用以便,封装形式多样,合用于多种狭小空间设备数字测温和控制领域。独特的单线接口方式,DS18B20在与微解决器连接时仅需要一条口线即可实现微解决器与DS18B20的双向通讯。测温范畴 55125,固有测温辨别率0.5。支持多点组网功能,多种DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而导致信号传播的不稳定,实现多点测温。工作电源为 35V/DC。在使用中不需要任何外围元件,测量成果以912位数字量方式串行传送。不锈钢保护管直径6,合用于DN1525, DN40DN250多种介质工业管道和狭小空间设备测温,原则安装螺纹 M10X1, M12X1.5, G1/2”任选,PVC电缆直接出线或德式球型接线盒出线,便于与其他电器设备连接。负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。DS18B20内部构造重要由四部分构成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配备寄存器。DS18B20的外形及管脚排列见图2.8所示。该产品合用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域、轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制、供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制、汽车空调、冰箱、冷柜、以及中低温干燥箱等。2.5.2 DS18B20的初始化与读写操作1. DS18B20的初始化(1) 先将数据线置高电平“1”; (2) 延时(该时间规定的不是很严格,但是尽量的短一点);(3) 数据线拉到低电平“0”; (4) 延时750微秒(该时间的时间范畴可以从480到960微秒); (5) 数据线拉到高电平“1”; (6) 延时等待(如果初始化成功则在15到60毫秒时间之内产生一种由DS18B20所返回的低电平“0”。据该状态可以来拟定它的存在,但是应注意不能无限的进行等待,否则会使程序进入死循环,因此要进行超时控制); (7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)至少要480微秒; (8) 将数据线再次拉高到高电平“1”后结束。DS18B20的的初始化见图2.9所示。图2.9 DS18B20的的初始化2. DS18B20的写操作(1) 数据线先置低电平“0”; (2) 延时拟定的时间为15微秒; (3) 按从低位到高位的顺序发送字节(一次只发送一位); (4) 延时时间为45微秒; (5) 将数据线拉到高电平; (6) 反复上(1)到(6)的操作直到所有的字节所有发送完为止; (7) 最后将数据线拉高。在这里要注意的是(3),写数据时时1bit单独传送,这里有两种状况。当需要传送“1”时,单片机应当给DS18B20芯片的DQ接口赋低电平,大概15秒后来,将DQ释放为高电平,延时约45微妙即可。当需要传送“0”时,单片机应当给DS18B20芯片的DQ接口赋低电平,并且持续拉低至少60微妙,然后将DQ释放为高电平,再延时约15秒即可。DS18B20的写操作时序图见图2.10所示。图2.10 DS18B20的写操作时序图 3. DS18B20的读操作(1)将数据线拉高“1”; (2)延时2微秒; (3)将数据线拉低“0”; (4)延时15微秒; (5)将数据线拉高“1”; (6)延时15微秒; (7)读数据线的状态得到一种状态位,并进行数据解决; (8)延时30微秒;这里只要按以上操作将状态位的各各bit按顺序储存好即可。DS18B20的读操作时序图见图2.11所示。图2.11 DS18B20的读操作时序图2.5.3 DS18B20的指令与格式 DS18B20温度格式图见图2.12所示。图2.12 DS18B20温度格式图这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度不小于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度不不小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为FC90H 。DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器涉及一种高速暂存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.1251111 1111 0101 1110FF5E-25.06251111 1110 0110 1111FE6F-551111 1100 1001 0000FC90高速暂存存储器由9个字节构成。其分派见表2.3所示,当温度转换命令发布后,经转换所得的温度值以二字节补码形式寄存在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。相应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。第九个字节是冗余检查字节。 表2.3 DS18B20暂存寄存器分布寄存器内容字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配备寄存器4保存5保存6保存7CRC校验值8根据DS18B20的通讯合同,主机(单片机)控制DS18B20完毕温度转换必须通过三个环节:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才干对DS18B20进行预定的操作。复位规定主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表达复位成功。 ROM指令表见表2.4所示,RAM指令表见表2.5所示。表2.4 ROM指令表指 令商定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相相应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索ROM0FOH用于拟定挂接在同一总线上 DS1820 的个数和辨认 64 位 ROM 地址。为操作各器件作好准备。跳过ROM0CCH忽视 64 位 ROM 地址,直接向 DS1820 发温度变换命令。合用于单片工作。警告搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。表2.5 RAM指令表指 令商定代码功 能温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。成果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第3 、4字节。读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。2.5.4 DS18B20寄生电源供电方式DS18B20测温系统具有测温系统简朴、测温精度高、连接以便、占用口线少等长处。下面就是DS18B20几种不同应用方式下的 测温电路图:DS18B20寄生电源供电方式电路图,见图2.13所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处在高电平期间把能量储存在内部电容里,在信号线处在低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1. 进行远距离测温时,无需本地电源;2. 可以在没有常规电源的条件下读取ROM;3. 电路更加简洁,仅用一根I/O口实现测温。 要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几种温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会导致无法转换温度或温度误差极大。 因此,这种电路只适应于单一温度传感器测温状况下使用,不合适采用供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源可以汲取的能量也减少,会使温度误差变大。 图2.13 DS18B20寄生电源供电方式 2.5.5 DS18B20改善的寄生电源供电方式DS18B20寄生电源强上拉供电方式电路图,改善的寄生电源供电方式见图2.14所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何波及到拷贝到E2存储器或启动温度转换的指令后,必须在最多10S内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺陷就是要多占用一根I/O口线进行强上拉切换。 图2.14 改善的寄生电源供电方式注意:在见图2.13所示、见图2.14所示寄生电源供电方式中,DS18B20的VDD引脚必须接地。2.5.6 DS18B20外部电源供电方式DS18B20的外部电源供电方式见图2.15所示,在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流局限性的问题,可以保证转换精度,同步在总线上理论可以挂接任意多。DS18B20传感器,构成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85。 图2.15 外部供电方式单点测温电路在本次设计中采用外部电源供电方式,连接措施见图2.16所示。图2.16 设计中采用的测温电路直接将DS18B20的I/O口接在单片机的P22上,这样在硬件方面就可以进行数据交流,从而达到温度数据传播的目的。2.5.7 DS18B20寄生电源供电方式外部供电方式的多点测温电路图见图2.17所示,外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,并且电路也比较简朴,可以开发出稳定可靠的多点温度监控系统。站长推荐人们在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充足发挥DS18B20宽电源电压范畴的长处,虽然电源电压VCC降到3V时,仍然可以保证温度量精度。图2.17 外部供电方式的多点测温电路图第3章 系统软件设计3.1 键盘输入的程序while(temp!=0xf0)delay(5);P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xed:num=0;break;case 0xdd:num=1;break;case 0xbd:num=2;break;case 0x7d:num=3;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;/*0000在这里使用了_crol_函数,因此头文献中要增长#include,这里涉及去抖和松手检测。通过检测后来通过不同的temp值,使num被赋予相应的数值,这样num就是要输入的一种数字。3.2 DS18B20温度传感器设计连接好电路后来,就可以开始设计DS18B20的软件环节。一方面要初始化DS18B20如下为初始化程序。void dsstart() unsigned int i;ds=0; i=100; /拉低约800us, 符合合同规定的480us以上 while(i0) i-; ds=1; /产生一种上升沿, 进入等待应答状态 i=4;while(i0) i-;然后延时等待,回应。如如下子函数。void dswait()unsigned int i;while(ds); /等待应答信号 while(ds); /检测到应答脉冲 i=4; while(i0) i-;如下两个子函数为读取的数据时用到的。可以在温度采集读取时调用。bit readbit()/读取一种bitunsigned int i;bit b;ds=0;i+; /延时约8us, 符合合同规定至少保持1usds=1;i+;i+; /延时约16us, 符合合同规定的至少延时15us以上b=ds; i=8; while(i0) i-; /延时约64us, 符合读时隙不低于60us规定 return b;uchar readbyte()/读取一种字节uint b;uchar date,a;b=0;date=0;while(b8)a=readbit();date=(a1);b+;return date;如下为写入命令程序。用于操控DS18B20。void writeor(uchar order)/写入命令uint b;uchar a;bit bit2;b=0;for(a=0;a=1;if(bit2)/写入1ds=0;b+,b+;ds=1;for(b=0;b8;b+);else/0ds=0;for(b=0;b8;b+);ds=1;b+;b+;当以上程序书写完毕后,准备工作基本完毕。目前只要调用这些函数,来操控DS18B20使其可以按合同规定将温度数据传送给单片机。软件实行措施如下:void changetemp()/温度转变函数dsstart();dswait();delay(1);writeor(0xcc);/ 跳过读序号列号的操作writeor(0x44);/ 启动温度转换 delay(1);uint gettemp()/获取温度float tt;int temp;uchar geta,getb;dsstart();dswait();delay(1);writeor(0xcc);writeor(0xbe);/读取温度命令delay(2);geta=readbyte();/读取两个字节getb=readbyte();temp=getb;temp 0 ? 0.5 : -0.5);/,变大十倍且 四舍五入return(temp);以上两个程序流程为,changetemp()子函数中先初始化DS18B20,芯片应答后来写入两个以字节为一种单位的命令,0xcc与0x44它们的作用分别为跳过读序号列号的操作和启动温度转换。然后温度获取gettemp()子函数完毕。在gettemp()子函数中一方面也是初始化DS18B20、等待应答,写入命令0xcc跳过读序号列号的操作和0xbe读取温度命令。使用readbyte()读取两个字节的数据,分别赋予geta、getb两个字符型变量,再将getb赋予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,这样就可以有四舍五入的功能,而这里没有这样简朴,这个if语句的还要考虑tt为负值的状况下的操作,如果temp为负值,tt变大10倍后来还要减去0.5,这样就可以完毕tt为负值状况下的四舍五入。3.3 主函数的分析一方面给出主函数:void main()TMOD=0x01;TH0=(65536-46000)/256;TL0=(65536-46000)%256;EA=1;ET0=1;TR0=1;zd=0;num=21;aaa=0;bbb=0;num1=21;num2=21;num3=21;while(1)uint a;uchar b;changetemp();a=gettemp();b=scanff();numy=gettemp();display(a,b);这里的aaa用于控制与否拟定输入的一种数字是需要的数字,bbb用于标记已经输入到了三个数字的第几种数字。主函数一方面将所用到的全局变量赋值,然后进入大循环一方面进入温度转换函数,使DS18B20启动温度转换,然后获取温度将两个字节的数值赋给a,而将输入的温度赋予b ,再由display(a,b)子函数输出所有的值。3.4 显示函数的分析如下是display()函数的具体内容。void display(uint a,uchar b)uchar i,temp,srtemp,dis4;uint dda;dda=abs(a);numx=dda/1000;num4=dda%1000/100;num5=dda%100/10;num6=dda%10;dis0=numx;dis1=num4;dis2=num5;dis3=num6;dis2+=10;/num5小数点if(dis0=0)&(dis1=0)dis1=20;/如果百位和十位都为0 不显示if(a0)/负值 背面加个小数点dis3+=10;elseif(dis0!=0)/超过100前面加小数点 dis1=dis1+10;temp=0xfb;for(i=1;i4;i+)P0=0xff;wei=1;temp=_crol_(temp,1);P0=temp;wei=0;P0=0;duan=1;P0=tabledisi;duan=0;delay(3);duan=1;P0=0x00;duan=0;if(aaa=1&ccc!=21)bbb+;switch(bbb)case 0:dis1=b;num1=b;dis2=num2;dis3=num3;if(dis2=21)dis2+;elsedis2+=10;srtemp=0xfe;for(i=1;i4;i+)P0=0xff;wei=1;P0=srtemp;/wein打开后 是低电平亮wei=0;/srtemp=_crol_(srtemp,1);P0=0x00;duan=1;P0=tabledisi;duan=0;delay(1);duan=1;P0=0x00;duan=0;break;case 1:dis1=num1;dis2=b;num2=b;dis3=num3;if(dis2=21)dis2+;elsedis2+=10;srtemp=0xfe;for(i=1;i4;i+)P0=0xff;wei=1;P0=srtemp;/wein打开后 是低电平亮wei=0;/srtemp=_crol_(srtemp,1);P0=0x00;duan=1;P0=tabledisi;duan=0;delay(1);duan=1;P0=0x00;duan=0;aaa=0;break;case 2:dis1=num1;dis2=num2;dis3=b;num3=b;if(dis2=21)dis2+;elsedis2+=10;srtemp=0xfe;for(i=1;i4;i+)P0=0xff;wei=1;P0=srtemp;/wein打开后 是低电平亮wei=0;/srtemp=_crol_(srtemp,1);P0=0x00;duan=1;P0=tabledisi;duan=0;delay(1);duan=1;P0=0x00;duan=0;aaa=0;break;case 3:dis1=num1;dis2=num2;dis3=num3;if(dis2=21)dis2+;elsedis2+=10;srtemp=0xfe;for(i=1;i4;i+)P0=0xff;wei=1;P0=srtemp;/wein打开后 是低电平亮wei=0;/srtemp=_crol_(srtemp,1);P0=0x00;duan=1;P0=tabledisi;duan=0;delay(1);duan=1;P0=0x00;duan=0;aaa=0;num=21;break;default:bbb=0;break;一方面要清晰a是DS18B20芯片获取的温度,b是需要输入的温度,也就是规定的水温。在这里用到了abs(a)和_crol_因此要在再头文献中写到#include 和#include,dda用于避免a为负值的时候背面的操作不好完毕。分别将dda的千位、百位、十位、个位取出寄存在Numx,num1,num2,num3中。dis4是用来以便for语句的赋值操作。这里显示时需要考虑DS18B20采集的数据中的多种状况,第一:超过了100度。第二:正常的十几度或者几十度。第三:只有几度没有超过十度。第四温度为负值。if(dis0=0)&(dis1=0)dis1=20;/如果百位和十位都为0 不显示上面这一句话,就是地三种状况。if(a0)/负值 背面加个小数点dis3+=10;elseif(dis0!=0)/超过100前面加小数点 dis1=dis1+10;上面这句话就是第一种和第四种状况的描述。第二种状况是正常使用的状况,直接将dis1 、dis2、 dis3写出来即可。ccc的作用是避免浮现什么都不输入直接确认给程序带来的bug,浮现这种状况时系统不做其她的任何反映,保持在这时的输入状态,直到顾客输入了一种数字为止。ccc的功能才会解除。这里键盘输入温度的数码管显示使用的是switch(bbb)语句完毕的,bbb共有0、1、2、3,这四种状况,bbb等于0时是无任何输入的状况,bbb等于1时是输入了需要温度的十位,bbb等于2时是输入了需要温度的个位,bbb等于3时是输入了需要温度的小数点后一位,这里没有超过100度和低于0度的设计。这里基本上就是完毕给定了数字,通过数字值为多少来设定数码管显示的数字,在第三章中已经提到。这里要注意的是每次都要将aaa清零,由于aaa为1时,输入子函数uchar scanff()的返回值变为一种使数码管显示一种下划线的数值,aaa为0时键盘可以通过uchar scanff()向数码管显示0-9中的任何一种数值。这样是避免前一种数字的输入完毕后来,后一种数字尚未输入时,显示后一种数字的数码管默认不在显示下划线而是前一种确认的数字,为了避免这种状况才有了aaa的以上操作。3.5 中断加热子函数的分析如下是程序:void timer0() interrupt 1int a;TH0=(65536-46000)/256;TL0=(65536-46000)%256;zd+;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!