《基于51单片机的家用电热水器的设计毕业设计(28页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的家用电热水器的设计毕业设计(28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于51单片机的家用电热水器的设计毕业设计-第 23 页实 验 设 计题目: 基于51单片机的家用电热水器设计 姓 名: 陈太宇 学 号: 201015220233 所在学院: 信息工程学院 专业班级: 电子信息工程2班 指导教师: 张守兴 2013年 10月 25日声 明本人郑重声明:所呈交的毕业论文(设计),是本人在指导老师指导下,独立进行研究工作所取得的成果。尽我所知,除文中已经注明引用的内容外,实验设计的研究成果不包含任何他人享有著作权的内容。对本实验(设计)所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确方式标明。本人签名:陈太宇 日 期: 2013 年10 月 25日摘
2、 要随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、安全的实施方案。C语言对单片机编程有诸多优点,例如:便于移植、句法检查时错误少、坚固性好、头文件种类诸多,能够方便快捷使用各种函数等。本文采用 AT 89C 52 单片机作为控制器,使用C语言编写程序,设计了一款智能家用电热水器。使用阵型键盘输入温度,温度
3、可以精确到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
4、, 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 ap
5、pliances 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, suc
6、h 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 s
7、tyle 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
8、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 carr
9、y 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 键盘输入的抖
10、动与去抖的方法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
11、章 总结38附录 程序41第1章 绪论 单片机是一种与我们生活息息相关的控制器,它存在于许多地方,例如:电子手表、掌上游戏机、数码相机、录音笔、电视机遥控器等等。单片机主要由中央处理器、内存、输入/输出设备组成,它就好像是一台小型电脑,它能够执行人们对它编写的程序,从而发出各种不同的控制命令,与外部电路结合后,便可以完成各种各样的功能。通过单片机人们的生活将会变得更加方便、快捷。1.1 家用电热水器的现状目前市场上热水器品种主要有电热水器、太阳能热水器、燃气热水器。我们的生活电热水器是一种可供浴室、洗手间及厨房使用,按照人们的需要的温度,提供温水的家用电器。市场上传统的机械式电热水器控制精度低
12、、可靠性差,甚至存在一定的危险隐患。随着社会的发展、人们生活质量的提高,人们对电热水器的要求越来越趋向于智能化和数字化,这种老式而简单的电热水器已经不能够满足人们的需要了。而智能化家用电热水器正是适应现代化智能家用电器趋势而出现。它能提供用户方便快捷的数字化输入方式,并且能精确的采集和控制环境中的水温,将其提供给用户,因此备受人们的关注。1.2 TX-1C单片机实验开发板简介XT-1C单片机开发板是哈尔滨市天祥电子综合多年开发经验,在原TX-1B基础上,经过精心设计开发出的多功能51单片机开发平台。该开发板集常用的单片机外围资源、串口和USB口两种调试下载接口于一身,完全兼容ATMEL公司的5
13、1单片机,除此之外还有很多特点,如:无法解密、低功耗、高速、高可靠、强抗静电、强抗干扰等。TX系列单片机开发板可完全作为各种51单片机的开发板,用汇编语言或者C语言对其进行编程。当用STC公司的单片机时,直接用产品套件附带的串口线将开发板与计算机串口相连,按照STC单片机下载操作教程便可以下载程序,而且下载速度比起其他下载工具要快的多。本文将使用TX-1C开发板完成数字化电热水器的设计。第2章 系统硬件设计2.1 系统硬件的组成部分系统设计硬件原理结构见图2.1所示。系统以高性价比的AT89C51单片机为核心,由键盘输入、DS18B20温度采集、数码管显示电路、电源时钟复位电路、双向可控硅驱动
14、电路MOC3041、双向可控硅TLC336A组成加热器控制电路。 图2.1 系统设计硬件原理结构2.2 系统硬件各部分的简介这里AT89C51为总控制器。单片机的P0口连接74HC573锁存器,这样可以节约单片机端口,即可多次操作P0口,使其既能控制数码管的片选,又能控制数码管的位选,从而节省的单片机的外部接口,扩展了功能。键盘的输入由P3口完成在第4章节中会具体介绍如何实现。时钟复位电路见图2.2所示,RET连接单片机的RESET接口,主要完成单片机的复位功能。图2.2 时钟复位电路温度采集芯片由DS18B20芯片完成,DS18B20的2号接口接在单片机的P22口,按协议传送以两个字节为一组
15、的温度数据,第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显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加
16、上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。本设计采用的TX-C1实验板是采用共阴LED显示器,根据电路连接图显示十六进制数的编码见表2.1所示。表2.1 十六进制数的编码十六进制编码数码管显数值十六进制编码数码管显数值十六进制编码数码管显数值0x3f00x7d60x39C0x0610x0770x5eD0x5b20x7f80x79E0x4f30x6f90x71F0x6640x77A0x00无显示0x6d50x7cB2.3.2 数码管的实现方法数码管的显示由P0口完成控制。有两点需要注意,第一点是要哪一个数码管亮,第二点是亮的数码管显示什么数字。所以数码管有位选和段选之分
17、,位选在程序中用wei表示,单片机上是P27端口,即对位选操作时使P27呈现高电平,这时P0的八个端口对数码管的操作决定了那几个数码管亮,P0操作完成后使P27呈现低电平,这样位选就已锁定。段选在程序中由duan表示,单片机上是P26端口,与位选相同,操作时使P26呈现高电平,这时P0的八个端口对数码管的操作决定了亮的几个数码管显示什么数字,P0操作完成后使P26呈现低电平,这样段选就已锁定。见图2.4所示由于单片机仅仅起到控制的作用,其输出电流十分小,所以P0端需要接上拉电阻与5V电源,通过电压的变化控制5V电源点亮,想要图中a端由电流通过时,即给P00一个低电平,触发上拉电阻两端间的电势差
18、,这样就能促使电流流向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口,这样可以方便直观得使数码管显示需要的数字。选择位选与选择片选的过程相当快时,显示在人眼
19、中就是一排易于识别的十进制数字,这就是数码管的动态显示。2.3.3 锁存器与数码管显示方法在这里先介绍74HC573芯片,这是一个锁存器芯片,连接方法见图2.5所示, P27、P26分别控制位选和段选的L端,例如:当P27(程序中的全局变量wei)赋高电平时,74HC573输入端口的值将直接输送给74HC573芯片的输出端,当输入端变化时,输出端也变化。P27赋低电平时, 74HC573芯片将记住最近一次L端口是高电平时芯片输入端的8位,并将其输出,当输入端变化时,输出端不变化。在这里就可以利用锁存器的特性使P27起到控制那个数码管亮的作用,使P26控制数码管亮什么样的数字作用。图2.5 74
20、HC573芯片的连接以下数码管显示部分程序。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口将刚才
21、位选的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,他们是线与的关系。因此可以如此操作,对图中第二行、第三行、第四行诸行进行扫描。扫描第一
22、行时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节中谈到了如何实现键盘的扫描,但是理论与实际还是有一定的差距,当按下键盘到检测到有电压变化,这段时间在实际中是存在一定的时间误差的,经过这段时间误差后电压才会达到单片能够检测到的范围,但这期间单片机很有可能已经完成
23、检测,见图2.7所示。图2.7 抖动示意图如果不去除抖动的话,人们手指按下的瞬间单片机已经开始检测,这时电压还未降到稳定闭合状态所以不能检测到按下,同理不管是按下,还是是松手都会有这样的情况出现,不利于操作,所以应该加入去抖操作,图中右侧是硬件去除抖动,除了硬件去抖以外还可以利用软件去抖。在本设计中采用软件去抖的方法,原理是检测两次,第一次检测到低电平时延时一段时间,再检测一次,如果还能检测到低电平,则说明确实有键按下。具体程序如下:while(temp!=0xf0)delay(5);P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0)上述程序是两个
24、while循环之间的嵌套,第一个while()语句判断有键按下后,延时一段时间再进行判断,如果第二次判断也认为由键按下,则可以确认的确由键盘操作,并不是抖动。具体按下后的操作可以在后一个while循环中书写。2.5 DS18B20温度采集2.5.1 DS18B20技术性能与应用范围图2.8 DS18B20的外形及管脚图DS18B20是一种可组网数字温度传感器芯片,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围 55125,固有测温分辨率
25、0.5。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温。工作电源为 35V/DC。在使用中不需要任何外围元件,测量结果以912位数字量方式串行传送。不锈钢保护管直径6,适用于DN1525, DN40DN250各种介质工业管道和狭小空间设备测温,标准安装螺纹 M10X1, M12X1.5, G1/2”任选,PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。DS18B20内部结构主要由四部分组成:64位光刻ROM
26、、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列见图2.8所示。该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域、轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制、供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制、汽车空调、冰箱、冷柜、以及中低温干燥箱等。2.5.2 DS18B20的初始化与读写操作1. DS18B20的初始化(1) 先将数据线置高电平“1”; (2) 延时(该时间要求的不是很严格,但是尽可能的短一点);(3) 数据线拉到低电平“0”; (4) 延时750微秒(该时间的时间范围可以从480
27、到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) 延时确定的时间
28、为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所
29、示。图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位数据,存储在DS
30、18B20的两个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和结构寄存器。配置寄存器,该字节各位的意义见
31、表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
32、 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的
33、通讯协议,主机(单片机)控制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
34、 编码,访问单总线上与该编码相对应的 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
35、字节的内容写暂存器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寄生电源供电方式电路图,见
36、图2.13所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1. 进行远距离测温时,无需本地电源;2. 可以在没有常规电源的条件下读取ROM;3. 电路更加简洁,仅用一根I/O口实现测温。 要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足
37、够的能量,会造成无法转换温度或温度误差极大。 因此,这种电路只适应于单一温度传感器测温情况下使用,不适宜采用供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。 图2.13 DS18B20寄生电源供电方式2.5.5 DS18B20改进的寄生电源供电方式DS18B20寄生电源强上拉供电方式电路图,改进的寄生电源供电方式见图2.14所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指
38、令后,必须在最多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传感器,组成多点测温系统。注意
39、:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85。 图2.15 外部供电方式单点测温电路在本次设计中采用外部电源供电方式,连接方法见图2.16所示。图2.16 设计中采用的测温电路直接将DS18B20的I/O口接在单片机的P22上,这样在硬件方面就可以进行数据交流,从而达到温度数据传输的目的。2.5.7 DS18B20寄生电源供电方式外部供电方式的多点测温电路图见图2.17所示,外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。站长推荐大家在开发中使用外部电源供电方
40、式,毕竟比寄生电源方式只多接一根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;b
41、reak;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; /产
42、生一个上升沿, 进入等待应答状态 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)
43、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+);d
44、s=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,芯片应答以后写入两个以字节为一个单位的