基于单片机饮水机智能控制系统(共37页).doc
精选优质文档-倾情为你奉上 机械工程学院毕业设计(论文)题 目: 基于单片机饮水机智能控制系统 专 业: 机电技术教育 班 级: 113 姓 名: 学 号: 指导教师: 日 期: 2015年6 月 目录 基于单片机饮水机智能控制系统摘要:温度控制无论是在工业生产过程中,还是在日常生活中都起着非常重要的作用。单片机在电子产品中的应用已经越来越广泛,在很多电子产品中也用到了温度检测和温度控制。本次设计的主要目的在于,设计出一个全新的智能控制系统,该系统具有温度检测、温度控制、温度报警、液面报警等功能。关键词:单片机AT89S52、DS18B20、LED数码管显示1前言1.1课题来源与背景1.1.1课题来源在日常生活中和工业生产过程,温度控制都起着巨大的作用,温度过高或温度过低都会使水的资源失去它本该有的作用,因而使水资源严重的浪费。尤其在当前全球的水资源相当缺乏的情景下,更要求我们控制水温的技术更加熟练,充分利用好身边的水资源。1.1.2课题背景传统饮水机的局限性一般体现在以下几个方面:第一 ,功能相对简单,只有简单的温度控制,而使用者不能根据自己的喜好设定温度参数。第二,能耗大,在无人使用的时候饮水机也处于开机状态,这无疑会造成能源的大量浪费,在能源紧缺的今天,这个问题更有待解决。第三,长期饮用饮水机里反复烧的水不利于身体健康,由于大部分使用的饮水机烧水不能完全沸腾,长期饮用这种水会对身体造成极大的伤害。1.2课题的研究意义单片机已经在电子产品中应用越来越广泛,在大多电子产品中也用到了温度检测和温度控制。因此,本次设计的主要目的在于,设计出一个全新的智能控制系统,该系统具有温度检测、温度控制、温度报警、液面报警等功能。 本次设计饮水机智能控制系统,要符合人们需求的生活用水,先要把水烧开,然后使水温保持一定的温度,同时要具备饮水机的液位报警,温度报警等功能,方便人们饮用。掌握好对饮水机的控制,就能在一定程度上把我们身边的水充分利用起来,防止了每次加热都使水沸腾,既节能又能更好的满足人们的需求。因此,设计基于单片机的温度控制器,用于控制温度。具体要求如下:1、可以通过数码管显示饮水机水箱水温度数;2、可以通过键盘或开关选择制冷或加热;3、可以人为设置水温度的上下限,如加热,当温度在设定的范围内时正常工作,当低于水温下限时控制加热器加热;如制冷,当温度高于水温上限时,控制压缩机制冷;4、温度检测范围0-95,精度±1;5、温度超过设定值时具有示警功能。2系统总体的设计 2.1 硬件总体的设计设计并制作一个基于单片机的热水器温度控制系统的电路,其结构框图如图2.1:图2.1 系统机构框图硬件系统子模块: 单片机最小系统电路部分 键盘扫描电路部分 LED显示电路部分及指示灯 温度采集电路部分报警部分继电器控制部分2.1.1单片机最小系统设计 单片机最小系统如图2.2所示,由主控器AT89S52、时钟电路和复位电路三部分组成。单片机AT89S52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。 图2.2 单片机最小系统1、单片机选择 AT89S521是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。其管脚图如图2.3所示。图2.3 AT89S52管脚图(1)P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,用作高阻抗输入。 当访问外部和数据时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash时,P0口也用来接收指令;在校验时,输出指令字节。校验时,需要外部上拉电阻。(2)P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。此外,P1.0和P1.1分别作/2的外部计数输入(P1.0/T2)和/计数器2 的触发输入(P1.1/T2EX)。 在flash和校验时,P1口接收低8位地址字节。号第二功能:P1.0 T2(/T2的外部计数输入),时钟输出P1.1 T2EX(定时器/T2的捕捉/重载触发信号和方向控制)P1.5 MOSI(在用)P1.6 MISO(用)P1.7 SCK(用)(3)P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 AT89S52引脚图 PLCC封装4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部或用16位地址读取(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问存储器时,P2口输出P2的内容。 在flash编程和校验时,P2口也接收高8位地址和一些。(4)P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些。端口第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/0)P3.5 T1(定时/1)P3.6 WR(写选通)P3.7 RD(读选通)此外,P3口还接收一些用于和校验的。(5)RST:复位输入。当振荡器工作时,RST引脚出现两个以上高电平将使复位。(6)ALE/PROG:当访问外部或数据时,ALE(允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问存储器时将跳过一个ALE脉冲。对FLASH期间,该还用于输入编程脉冲(PROG)。如有必要,可通过对(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该会被微弱拉高,执行外部时,应设置ALE禁止位无效。(7)PSEN:储存允许(PSEN)输出是外部的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个两次PSEN有效,即输出两个脉冲,在此期间,当访问存储器,将跳过两次PSEN信号。(8)EA/VPP:外部访问允许,欲使CPU仅访问外部(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH时,该加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。(9)XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。(10)XTAL2:振荡器反相放大器的输出端2、时钟电路时钟电路用于产生AT89S52单片机工作时所必需的时钟信号。其电路与AT89S52的连接如图2.2所示。AT89S52单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,AT89S52单片机应在唯一的时钟信号控制下,严格按时序执行指令进行工作,而时序所研究的是指令执行中各个信号的关系。在执行指令时,CPU首先要到指令存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定的操作。CPU发出的时序信号有两种,一是用于片内对各个功能部件的控制。另一种是对片外存储器或I/O口的控制,这种时序对于分析、设计硬件接口电路至关重要。这也是单片机应用设计者最关心的问题。时钟是单片机的心脏,单片机以时钟频率为基准的前提下各个功能部件运行,工作井井有序。故而,单片机的速度直接受时钟频率的影响,单片机系统的稳定性与此同时也受时钟电路的质量的直接影响。AT89S52单片机内部有一个放大器它的作用是为了组成振荡器的反相高增益,此具有反相且高增益放大器的输入端为芯片引脚X1,输出引脚X2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。虽然AT89S52有内部振荡电路,但要形成时钟,必须外接组件。外接晶体以及X1和X2构成并联谐振电路。电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性。除使用晶体振荡器外,如对时钟频率要求不高,还可以用陶瓷振荡器来代替。电路中的电容容值通常选择为30PF左右,本电路选择的是20PF,这并不影响系统的工作和控制的结果。晶体的振荡的频率的范围通常是在1.2MH到12MH之间。晶体的频率越高,则系统的时钟频率就越高,单片机的运行速度也就越快。但反过来运行速度越快对存储器的速度要求就越高,对印刷电路板的工艺要求也高。AT89S52单片机常选择振荡频率6MH或12MH的石英晶体,随着集成电路制造工艺技术的发展,单片机的时钟频率也在逐步提高,现在的高速单片机芯片的时钟频率已经达到40MH。考虑到本设计所用的各种器件对时钟频率的要求及整体电路的简洁性,本设计选用的是振荡频率为12MH的石英晶体。3、复位电路 AT89S52的复位是由外部的复位电路来实现的。单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。因此选用一个适合本系统的复位电路极其重要。常用的复位电路有四种方式:(1) 上电复位电路(2)按键复位电路 (3)脉冲复位电路(4)兼有上电复位与按键复位的电路。 由于考虑到结构和成本等原因,在很多设计里面,复位电路通常采用上电复位和按键复位两种。根据本系统的特性,决定选用按键复位电路。按键复位是通过外部复位电路的按键操作来实现的。当时钟频率选用12MH,电容C选用30mF,电阻R选用10KW。该复位电路工作原理为:在通电瞬间,在RC电路充电过程中,RST端出现正脉冲,保证RST引脚出现10 ms以上稳定的高电平,从而使单片机复位。2.1.2温度采集电路设计 本设计中的温度采集系统由DS18B20传感器负责。 DS18B20的管脚配置和封装结构如图2.4所示。 图2.4 DS18B20封装1、引脚定义: (1) DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 2、DS18B20的单线(1wire bus)系统:DS18B20工作原理为DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 DS18B20内部结构图如图2.5所示:图2.5 DS18B20内部结构图 2.1.3 A/D转换电路设计 A/D转换部分电路的功能主要是将采集部分采集来的模拟信号转换成数字信号,然后输送到单片机进行数据处理。主要器件有ADC0809、74LS02、74S74等。ADC0809与AT89S52连接电路如图2.6所示。图2.6 A/D转换电路A/D转换器ADC0809共有八路模拟输入端,由于本设计温度采集只有两路,因此只用到两路模拟输入端,其输入通道为IN0、IN1。这两个通道的数据分别是温度采集电路的输出信号V01、V02,也就是转换为电压值的饮水机两个水箱水的温度值。选择这两个通道需要通过设置ADC0809的ADDA、B、C的值,因为它对应的是八路模拟信号,而本系统只有两路模拟信号输入,因此,只需要将低位ADDA连到AT89S52的P2.2口,并根据P2.2口的电压是低电平或高电平来选择要检测哪个通道,当ADDA值为0时选的是IN0通道,当ADDA为1时选的是IN1 通道。而ADDB、ADDC只需接地即可。1、 A/D转换器选择A/D转换器的功能是将连续变化的模拟量转换成一个离散的数字量。每一个数字量都是数字代码的按位组合,每一位数字代码都是一定的“权”,对应一定大小的模拟量。为了将数字量转换成模拟量应该将其每一位都转换成相应的模拟量,然后求和即可得到与数字量成正比的模拟量。目前,市面上有很多类型的A/D转换器,如:ADC0804、ADC0809、AD574等,根据本设计控制的特点,选用ADC0809作为A/D转换器。ADC0809八位逐次逼近式A/D转换器是一种单片CMOS器件,包括8位的模/数转化器,8通道多路转换器和与微处理器兼容的控制逻辑。8通道多路转换器能直接连通8个单端模拟信号中的任何一个。片内带有锁存功能的8路模拟多路开关,可以对8路05V的输入模拟电压信号分时进行转换,片内具有多路开关的地址译码和锁存电路、比较器、256RT型网络、树状电子开关、逐次逼近寄存器SAR、控制与时序电路等。输出具有TTL三态锁存缓冲器,可以直接连接到单片机数据总线上。(1) ADC0809功能如下:分辨率为8位。最大不可调误差小于1LSB。单一+5V供电,模拟输入范围05V具有锁存控制的8路模拟开关。可锁存三态输出,输出与TTL兼容。功耗为15mW。不必进行零点和满度调整。 图2.7 ADC0809引脚图转换速度取决于芯片的时钟频率。时钟频率范围:101280KHZ,当CLK=500kHZ时,转换速度为128mS。(2) ADC0809管脚及功能:A/D转换器ADC0809的引脚图如图2.7所示。IN0IN7:8路输入通道的模拟量输入端口。2-12-8:8位数字量输出端口。START,ALE:START为启动控制输入端口,ALE为锁存控制信号端口。这两个信号端可连接在一起,当通过软件输入一个正脉冲,便立即启动模/数转换。EOC,OE:EOC为转换结束信号脉冲输出端口,OE为输出允许控制端口。这两个信号也可连接在一起表示模/数转换结束。OE端的电平由低变高,打开三态输出锁存器,将转换结果的数字量输出到数据总线上。REF(+),REF(-),Vcc,GND:REF(+)和REF(-)为参考电压输入端,Vcc为主电源输入端,GND为接地端。一般REF(+)与Vcc连接在一起,REF(-)与GND连接在一起。CLK:时钟输入端口。ADDA,B,C:8路模拟开关的三位地址选通输入端,以选择对应的输入通道。其地址码与对应信道关系如表2.1所示。表2.1 地址码与输入信道对应关系表地址码对应的输入通道CBA000IN0001IN1010IN2011IN3100IN4101IN4110IN6111IN7强调说明一点:ADC0809虽然有八路模拟通道可以同时输入八路模拟信号,但每一个瞬间只能转换一路模拟信号,各路之间的切换由软件变换通道地址实现。A/D转换器采用的转换方法主要有逐次逼近型A/D转换、双积分型A/D转换、并行A/D转换、串-并行A/D转换等,其中逐次逼近型A/D转换既照顾了转换的速度,又具有一定的精度,本系统中,传输数据的频率不高,对精度的要求也不是很高,因此,我们选用了常用的逐次逼近型A/D转换ADC0809。 2.1.4 LED显示电路设计 大多数的单片机应用系统,都要配置输入设备和输出设备。本系统的输出设备是显示器,根据本系统的设计特点,采用七段LED数码管作为显示器。而本系统设计要求温度检测范围095,精度±1。数码管只需显示两位即可达到要求,因此,显示部分电路采用两个一位的LED数码管来组成显示器,没有要求显示小数点,LED数码管的dp脚悬空。本设计显示电路的应用有两点,一是实时显示引水机水箱的水温值,另一个是显示键盘设定的温度上、下限值。其电路连接如图2.8所示。图2.8 显示部分电路 通过一个74LS47连接7个100欧姆的电阻来驱动数码管显示。数码管的VCC脚分别连接到两个三极管的共射极,而三极管的共基极连到一起接到+5V电源上。共集极分别连接两个4.7K的电阻接到单片机AT89S52的P1.4、P1.5管脚。LED显示块是由发光二极管显示字段的显示器件。在单片机应用系统中应用非常普遍,通常使用的是七段LED,这种显示器有共阳极和共阴极两种,本设计选用的是共阳极。共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压5V。当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。使用LED显示器时,为了显示数字或符号,要为LED显示器提供代码,因为这些代码是通过各段亮与灭来为显示不同字型的。7段发光二极管,再加上一个小数点位,共计8段。因此提供给LED显示器的段码正好一个字节。各字节中对应关系如表2.2所示。表2.2 各段与字节中各位的对应关系表代码位 D7 D6 D5 D4 D3 D2 D1 D0显示段 dp G f e d c b a将单片机I/O口的8位线与显示块的发光二极管的引出端(adp)相连,共阳极高电平有效,选通有效后8位并行输出口输出不同的数据就点亮相应的发光二极管,获得不同的数字或字符。共阳极7段显示器显示数字对应的段码关系如表2.3所示。 表2.3 7段LED数字与段码对应关系表显示数字0123456789共阳极段码C0HF9HA4HB0H99H92H82HF8H80H90H2.1.5键盘电路设计键盘在单片机应用系统中能实现向单片机输入数据、传送命令功能,是人工干预单片机的主要手段。键盘实质上是一组按键开关集合。通常键盘所用开关为机械弹性开关,均利用了机械触点的合、断作用。键的闭合与否,反映在输出电压是呈现高电平或低电平,如果高电平表示断开的话,那么低电平则表示键闭合,所以通过对电平高低状态的检测,便可确认按键按下与否。为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响,这样才能使键盘在单片机系统中的使用得更加稳定。常用的键盘接口分为独立式按键接口和矩阵式键盘接口。根据本系统的设计特点及要求,键盘的功能主要是用来设置温度上下限,因此本设计采用独立式键盘来完成这一功能要求。其电路连接如图2.9所示。 图2.9 独立式键盘与AT89S52连接图1、键盘电路及其说明独立式按键就是各个按键相互独立,每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其它输入线上的工作状态。因此,通过检测输入线的电平状态就可以很容易的判断出是哪一个按键按下了。独立式按键电路配置灵活,软件简单。但每一个按键需占用一根输入口线,在按键数量较多时需要较多的输入口线且电路结构复杂,故此种键盘适用于按键较少或操作速度较高的场合。本设计,采用四按键键盘,所以在四个I/O口上接四个按键组成一个四按键的简易式键盘。各线通过电阻接+5V,当键盘上没有键闭合时,所有的线断开,呈高电平状态。当键盘上某一个键闭合时,该键所对应的线与连接单片机的线短路。例如:当S1号按键闭合时,它所在的线与连接线短路,使P3.2口为低电平,通过软件里对P3口查寻,如果只有P3.2口为低电平,那么就可以确定是S1键按下了,通过在软件里的设定,行使S1键的功能。如果同时有多个P3口为低电平,则报警显示,然后检查是否有多个键按下,直到只有一个P3口为低电平时,停止报警,那个低电平的P3口上连接的按键则为按下的键,在软件里执行他应该达到的功能。2、键盘功能说明S1:模式设置键,按一下进入到加热系统设置状态,再按一下切换到制冷系统设置状态。S2:步进加键,每按一下,要设置的限制值加1。S3:步进减键,每按一下,要设置的限制值减1。S4:确定键,确定前面所设的温度值。当S1键按1下,进入加热或制冷模式后,数码管显示为00,00代表温度设置起点温度。再按下按键S2数码管显示值将逐步从个位数往上加,直到想要设置的温度值,而按键S3是步进减键,按键每下一次,个位数减1。S4键是确定键,通过它来确定前面所设定的数值。3、键盘的机械抖动 若Y0为低电平,S1号键闭合一次,图中t1和t3分别为键的闭合和断开过程中的抖动期(呈现一串负脉冲),抖动时间长短和开关的机械特性有关,一般为510ms,t2为稳定的闭合期,其时间由按键动作所确定,一般为十分之几秒到几秒,t0、t4为断开期。为了保证CPU对键盘的闭合仅作一次处理,在软件中必须去除抖动,在第一次检测到有按键下时,执行一段延时10ms的子程序后确认该按键电平是否仍保持闭合状态电平,如果闭合状态电平则确认有按键下,从而消除抖动的影响。键盘的机械抖动示意图如图2.10所示。 图2.10 键盘的机械抖动示意图2.1.6报警电路设计报警电路主要是由发光二极管和蜂鸣器组成的,具有声、光报警功能的简单电路,其电路如图2.11所示。当温度超过设置的上、下限时,P2.2口输出高电平,三极管导通,蜂鸣器工作,发出声音。P2.3口输出高电平时,发光二极管正向导通,发光报警。 图2.11 报警电路2.1.7 继电器控制电路设计控制部分电路图如图2.12所示。 图2.12 控制电路该电路是由两个固态继电器作为控制开关,一个继电器控制加热装置,另一个继电器控制制冷装置。固态继电器,即一种电子开关它具有无触点、通断型的特点,它同时具有四个端子的有源器件,有两个控制输入端,两个输出受控端。为了达到输入和输出之间的更好的隔离,它利用具有高耐压特性的光耦合器。当输入信号无效时,电路呈断开状态,反之,呈导通状态,实现了像电磁继电器一样的开关功能。固态继电器将MOSFET、GTR、普通晶闸管等组合在一起与触发电路封装在一个模块中,同时把输出电路与驱动电路隔离。固态继电器即一种触发器它具有可控硅过零的特性,无需调节且无触点,同时避免了对电网产生波形畸变。综上所述,特别适宜本次设计。继电器控制的工作原理:当AT89S52的RXD口输出一个高电平时,三极管开始工作,驱动继电器J1工作,继电器J1呈现导通的状态,加热同时开始工作。同样,当AT89S52的TXD口输出一个高电平时,三极管开始工作,驱动继电器J2工作,继电器J2开关闭合,制冷装置开始工作。2.2软件总体的设计良好的设计方案可以减少软件设计的工作量,提高软件的通用性,扩展性和可读性。本系统的设计方案和步骤如下:1、 根据需求按照系统的功能要求,逐级划分模块;2、明确各模块之间的数据流传递关系,力求数据传递少,以增强各模块的独立性,便于软件编制和调试;3、确定软件开发环境,选择设计语言,完成模块功能设计,并分别调试通过;4、 按照开发式软件设计结构,将各模块有机的结合起来,即成一个较完善的系统。最初接通电源后系统立刻工作,随后,借助按键人工设定温度上限的值与下限的值,同时确认将设定的要求存储到事先要求的地方,温度传感器开始实时检测时,调用显示子程序并显示检测的结果,调用比较当前显示的温度值与开始设定的温度值比较,如果当前显示值低于设定值就通过继电器起动加热装置,直到达到设定值停止加热,之后进行保温,如果温度高于上限进行报警。2.2.1主程序流程图本系统采用的是循环查询方式,来显示和控制温度的。主要包括四段程序的设计:DS18B20读温度程序,数码管的驱动程序,键盘扫描程序,以及报警处理程序。 图2.13 主程序流程图(上)图2.13 主程序流程图(下)2.2.2各个模块的流程图 读取温度DS18B20模块的流程: 由于DS18B20采用的是一根数据线实现数据的双向传输,而对AT89S52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。DS18B20单线通信功能是分时完成的,它有严格的时隙概念。因此系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点, DS18B20必须首先调用启动温度转换函数,根据数据手册上对应转换时间来超作,如为12位转换,则应该是最大750mS,另外在对DS18B20操作时,时序要求非常严格,因此最好禁止系统中断。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的读时序:(1)针对DS18B20的读时序分为读1时序与读0时序两个阶段。 (2)针对DS18B20的读时隙是单总线被从主机拉低之后,又在十秒左右立刻释放单总线,以让DS18B20把数据传输到单总线上。DS18B20最起码需要60us才能完成一个完整的读时序过程。DS18B20的写时序:(1)针对DS18B20的写时序同样可以分为写1时和写0时序序两个阶段。 (2)对于DS18B20写1时序和写0时序的规定不同,当要写1时序时,单总线被拉低之后,至多15us就得释放单总线,当要写0时序时,单总线要被拉低最少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平。 系统程序设计主要包括三部分: 读出温度子程序如图2.14 温度转换命令子程序如图2.15 显示温度子程序如图2.16程序代码为:专心-专注-专业GET_TEMPER:SETBDQ; LCALLINIT_1820; JBFLAG1,TSS2RET;TSS2:MOVA,#0CCH;LCALLWRITE_1820 MOVA,#44H;LCALL DISPLAY; LCALLINIT_1820; MOV A,#0CCH;LCALLWRITE_1820 MOVA,#0BEH; LCALLWRITE_1820 LCALLREAD_18200; RET ; 图2.14 读取温度DS18B20模块的流程图 2.2.3键盘扫描处理流程 此流程为键盘扫描处理,CPU通过检测各数据线的状态(0或1)就能知道是否有按键闭合以及哪个按键闭合。键盘管理程序的功能是检测是否有按键闭合,如果有按键闭合,消除抖动,根据键号转到相应的键处理程序,按键流程图如2.16所示。图2.15 键盘扫描子程序流程图2.2.4 报警处理流程 运行程序后,温度传感器DS18B20即可对环境进行温度采集,并送LED数码管显示。我们可以在程序里设定温度上限值,当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警,其程序流程图如2.17所示。图2.16 显示温度子程序流程图3系统调试一个单片机系统经过总体设计,完成了硬件设计和软件设计开发。元器件安装后,在系统的程序存储器中下载编好的应用程序,系统即可运行。但是一次性成功几乎是不可能的,多少会出现一些硬件、软件上的错误,这就需要调试来发现错误并加以改正。AT89S52单片机虽然功能很强,但只是一个芯片,一个完整的控制系统还包括很多功能模块,因此,进行调试时,需要逐个逐项仔细的进行。 一项设计到实现具体功能与软件和硬件的联合调试密不可分,因为硬件要通过软件来实现,软件要通过硬件来体现。只有从实际的观察效果中分析,配合好软、硬件协调工作,安排好相应的工作时序才能达到理想的效果,实现设计。所以,整体调试是从设计到实现的关键一步。在良好的设计基础之上,调试过程的好坏直接决定了我们的设计成果。在任何一个设计中电路调试这部分内容是最关键,难度最大,最考验人的工作。整个设计的成败全系于此。同时它也能够检验设计的方案的可行性和正确性。在这个过程中可能要遇到在设计中所没有考虑到的地方,通过调试使设计得到更好的补充。 调试工作包括硬件检查,软件调试,软硬件联通调试三部分。硬件检查主要是针对电路板的具体电路连接是否正确,测量各电路的电压、电流等是否达到要求的值等;软件调试主要是针对语法错误,即能否正确编译、单步运行时逻辑上是否正确;软硬联调就是:硬件在软件的“控制”下完成所需要的功能,这一部分是最关键的环节,也是难度最大的部分。3.1硬件电路检查本设计按照其功能模块的不同,其硬件电路的检查包括:温度采集电路、A/D转换电路、显示电路、键盘电路、报警电路、控制电路六部分。3.1.1 温度采集电路检查温度采集部分电路的检查是比较复杂的,原因是这部分电路的器件比较多,而且电位器的调节存在误差,而且放大电路得到的放大倍数往往不能达到所期望的值。由于温度传感器AD590是将温度值转换成电流信号输出,因此,调试时,采用一个电流源来代替,而放大电路是由三级运放构成的,要实现该电路的功能就要进行繁琐的调试。要先调第一级运放使其输入和输出相同,然后调整第二级运放使其差放值是2.73,同时第二级也是一个反相器,这样输出的电压就是2.73减去输入的电压值,最后调第三级运放,使其放大倍数为5倍。3.1.2 A/D转换电路检查这部分电路的检查主要是对器件ADC0809的检查,刚开始检查时,并没有发现问题,通电后用万用表测量其管脚电压时,发现其11、12脚不是5V,而28脚电压是5.0V,后来,经过检查管脚发现,是管脚接错了,把左下管脚14脚接地,右上管脚28脚接电源了,而ADC0809的管脚的接地脚和接电源脚跟其它的芯片不一样,11脚 Vcc和12脚REF(+)应接+5V,而13脚GND和16脚REF(-)接地。这主要是在焊接器件时疏忽大意所致,最后,按要求连接后,问题也就解决了。3.1.3 显示电路检查在通电后,发现右边数码管的对应的B段不亮,经检查,连接B段脚的线断开了,焊接上后显示仍有问题,再仔细检查,发现连接左边数码管Vcc脚的三极管B、E接反了,从新改过后显示正常。为了进一步保证这部分电路的正常,又进行了下一步的检测,先是下载了一个99秒倒记时的程序到AT89S52芯片上,通电后,数码管从99秒逐个减小变化到0秒,然后再反复循环。这说明这部分电路正常。3.1.4 键盘电路检查这部分的设计主要由四个按键跟四个电阻组成。通电后,每个按键下的时候,数码管的显示值没有变化,经检查,四个按键连在一起但没有接地,接地后,S2按下时,对应数码管显示值加一,S2键正常,S3键下时,数值无变化,问题出在软件编程上,经修改程序后,四个按键都正常。3.1.5 报警电路检查这部分主要由蜂鸣器和发光二极管组成。经检查调试,结果没有问题,二极管亮,蜂鸣器有声,虽然蜂鸣器的声音偏小,但不影响报警电路的正常工作。3.1.6 控制电路检查这部检查主要是在通电后,检查固态继电器开关的通与断,通电后发现开关没有动静,检查硬件没有任何问题,判断是器件有问题或程序有问题,经过修改程序,器件工作正常。3.2 软件调试上机调试程序是检验程序正确性的一个重要环节。在调试时,应在单片机开发系统上先对程序进行分块调试,对入口参数和变量预赋初值,观察运行结果。如果执行结果和预想的不一致,可采用设置断点或单步运行的方法,找出错误并修改。该设计是软硬件结合。软件的设计在与硬件联调之前主要是对所编写的程序进行语法错误的查找,然后进行编译,生成可以写入单片机的HEX文