资源描述
* * * * 大 学 本 科 毕 业 设 计毕业设计题目:数字式多路温度采集系统 学生姓名:* 学 号:2007*系 别:电子工程专业班级:电子信息工程 指导教师姓名及职称:* 高级工程师起止时间:2010年10月 2011年6月摘 要本设计制作一个了单片机控制的数字式多路温度采集系统。采用了 STC89C51单片机作为主控制器,采用LED键盘模组作为键盘输入和显示单元 ,通过一线制温度传感器 DS18B20 实现温度的采集。实现了两路温度的实时监控,并通过5位数码管进行实时显示,利用单片机的定时器实现每隔2s自动切换一个通道。同时可以通过按键方式进行手动切换通道和为每个通道设计独立的报警温度。该系统的优势在于成本低、实时,方便。可以推广到利用单总线模式挂接多个温度传感器采集多个场合的温度,实现多场合的温度实时监控。关键词 微控制器 温度传感器 定时器AbstractThis design made a microcomputer control digital multi-channel temperature gathering system. Adopted STC89C51 microcontroller as the main controller, using LED keyboard module as a keyboard input and display unit, through the first system temperature sensor DS18B20 to realize the collection of temperature. Realizing the real-time monitoring of two way temperature, and display through five digital LED in real-time, realization of the microcontroller timer automatic switching between a channel every 2s. Meanwhile can manually by button switch channels and ways for each channel design independent alarm temperature. This system is the advantage of low cost, real-time and convenient. Can be extended to use single bus model articulated multiple temperature sensors to collect many occasions, realizing the temperature of the real-time monitoring of the temperature occasion. Key words:microcomputer;temperature sensor;the microcontroller timer目 录1. 引言11.1 数字式多路温度采集系统概述11.2多路温度采集系统的应用示例11.3 设计任务22. 总体方案设计与分析32.1 系统设计基本框图及原理32.2 温度传感器的选型42.2.1 JWB一体化温度传感器42.2.2 美国MEAS公司的温度传感器42.2.3 美国DALLAS半导体公司的温度传感器42.3 DS18B20简介52.3.1 DS18B20的性能特点52.3.2 DS18B20供电方式62.3.3 温度采集电路结构72.4 微控制器的选用与简介83. 硬件电路设计103.1 系统电源电路设计103.2 数码管驱动电路设计113.3 单片机复位电路设计123.4 振荡器电路模块设计133.5 按键调整电路设计143.6 温度报警电路设计143.7 单片机I/O口功能说明154. 单片机软件设计154.1 开发工具及软件语言154.2 单片机软件流程164.3 多路温度采集流程设计174.3.1 处理次序184.3.2 时序信号184.4 定时器中断子函数设计流程224.5 按键调整模块流程235. 测试结果及分析265.1 测试工具265.2 数据测试265.3 数据处理与分析276. 总结28参考文献29致谢29附录301. 引言1.1 数字式多路温度采集系统概述温度是工业生产中常见的和最基本的参数之一,在生产过程中常需对温度进行检测和监控。采用微型机进行温度检测、显示、信息存储及实时控制。 对于提高生产效率和产品质量、节约能源等都有重要的作用。考虑到许多工业环境中对多点温度进行监控, 一般需要测量几十个点以上,为此,本课题设计了一种基于STC89C51单片机控制的多通道温度检测及显示系统,可以实现各个通道的独立蜂鸣器报警功能。随着传感器技术的发展,以单片机为主体。将计算机技术与传感器技术结合起来组成的数字式多路温度采集系统在生产中得到了广泛的应用,这些数字式多路温度采集系统自身带有微处理器,在结构上自成一体,能独立进行测试,使用灵活方便。在工业应用中,温度的检测和控制直接和安全生产。1.2 多路温度采集系统的应用示例图1.系统模拟图图1是某公司的多路温度采集系统模拟图。系统简介如下:该分布式系统由上、中、下三级组成。下级为温度采集单元,用于对各采样点的温度采集,显示实时温度。中级为信号采集单元,配有工业数据采集模块,通过485远程通讯总线,实现上、下位机间的信息传送以及各温湿度采样点的相关数据的定时采集与,并实时将数据通过RS485传到上位机。上位机为IPC,配有显示器及打印设备,具有良好的人机界面,便于操作。能实时显示采样点的温湿度、各温湿度采样点实时曲线、实时系统参数、历史记录、数据表格、高低值报警,并打印之,并能根据用户要求查询各温湿度采样点的历史数据。本系统所属硬件均采用我公司工控事业部代理的台湾研华工控系列产品,包括数据采集,工控机,人机界面,通讯模块等,因此能保证更好的稳定性及最好的性价比。系统主要功能和特点:以工业组态软件为开发平台,系统稳定,界面简洁,人机交互方便,具有自动接收、人工查询、打印图表、自动监测、曲线、系统资料、管理、登录等功能;具有高、低值报警的功能,报警值可以用户设定;在各种状态下可打印报表、查询数据; 在采样点的仪表上具有温湿度显示,以供现场参考。此外,还可以根据用户的不同需求,增加相应的功能。该系统广泛的应用于医药、物流、食品加工、运输、酒店、图书馆等各种需要温湿度测量和控制的行业与场所。图2 组态软件操作界面图3 实时监控显示界面1.3 设计任务本毕业设计主要任务是选用温度传感器作为切入点,通过微控制器对温度传感器的数据处理,反馈到显示界面,调用报警功能子模块,实现多个场合温度的实时监控。本设计拟实现的性能指标如下:(1)2路温度采集电路及以上;(2)采集测温范围为-25.0+99.9 ;(3)温度精度,误差在5%以下;(4)显示模块,采用5位LED数码管显示。2. 总体方案设计与分析2.1 系统设计基本框图及原理按照系统设计功能的要求,该系统由5个模块组成:主控制器、温度采集电路、温度显示电路、报警控制电路及键盘输入控制电路。数字式多路温度采集系统总体电路结构框图如图2所示。 5V电源核心控制板STC89C515位数码管报警指示灯(高、低温)4个键盘蜂鸣器报警温度传感器 (2路)图4 多路温度采集系统框图 本系统以STC89C51单片机作为主控制器,通过温度传感器采集外界的温度,由芯片内部自带的AD转换工具,将采集到的数据量,经过单片机I/O口传送至单片机内部,主控制器将接受到的数据量,按照用户设定的方式在LED数码管上显示。另外用户还可以通过键盘,手动选择要显示的通道进行观察,而且可以根据自己的需要设定报警温度。当单片机检测到LED数码管上显示的温度超出预订的范围时,即调用报警子程序进行报警。该系统操作简单,应用范围广,有较大的市场效应。2.2 温度传感器的选型2.2.1 JWB一体化温度传感器在温度传感器的接线盒内安装了变送模块,变送模块选用专用芯片进行放大和线性化处理,提高了传感器测量精度,冷端无需补偿,负载能力大,传输距离远,抗干扰能力强。主要技术指标:供电电压:24VDC输出形式:420MA,010MA,05V,1-5V量 程:根据所选用传感器不同而有所不同引 线:引线可分为二线或三线,引线的阻值不得超过20欧精 度:1级,0.5级、0.25级储存环境:-10-60表1 JWB内部热电阻参数代号测温范分度号级别允差tWZP -200-500PT100A (0.150.002T) B (0.300.005T)WZC -50-150CU50(0.300.006T)2.2.2 美国MEAS公司的温度传感器 国际上最好,最高端的温度传感器是美国MEAS收购的BetaTHERM和YSI Temperature,这两家公司都专注于负温度系数NTC热敏电阻,用于精密温度测量.美国MEAS还收购了HLPlanar公司生产热电堆温度传感器,利用塞贝克热效应.主要型号有TS105,TS118,TSED-01,TEEM-08,TESP-01,TPT300等2.2.3 美国DALLAS半导体公司的温度传感器DS18B20是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等温度传感器相比,它能够直接读出被测温度,并可根据实际要求通过简单的编程实现912位的数字值读数方式,可以在93.75ms至750ms内完成相应9位至12位的数字量转换。它的测温精度可达到0.0625/LSB。它的测温范围是-55+125。因而本设计选用了DS18B20。它较之前面提到的两个公司的温度传感器,读写操作简单,价格低廉,设计成本低。用于本设计是非常恰当的。2.3 DS18B20简介2.3.1 DS18B20的性能特点DS18B20内部结构1主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。64位光刻ROM的位结构图如图4所示。64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码。 DS18B20温度传感器的内部存储器包括一个非易失性的可电擦除E2PRAM和一个高速暂存RAM。E2PRAM包括存放高温度和低温度的触发器TH、TL和结构寄存器。非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。从DS18B20读出或写入信息仅需要一根口线,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,无需额外电源。高速暂存RAM的结构为9字节的存储器。头2个字节包含测得的温度信息。第3、4字节是TH和TL的拷贝,每次上电复位时被刷新。第5字节为配置寄存器,用于确定温度值的数字转换分辨率。第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。第5字节配置寄存器各位的定义如图5所示;低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式;R1和R0决定温度转换的精度位数(即设置分辨率), R1R0分辨率/位温度最大转换时间/ns9位分辨率时,精度为0.5/LSB;10位分辨率时,精度为0.25/LSB;11位分辨率时,精度为0.125/LSB;12位分辨率时,精度为0.0625/LSB。转换精度越高所需转换时间越长。为了达到本系统的技术指标,选择9位分辨率。DS18B20采用3脚TO-92封装,其外形和内部结构框图分别如图5和所示:图5.DS18B20内部结构表2 DS18B20各个引脚功能说明图6 DS18B20封装引脚图2.3.2 DS18B20供电方式外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证测量精度。所以本系统采用外部电源供电方式。在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上可以挂接任意多个DS18B20传感器,组成多点测温系统。外部电源供电方式如图7所示。在外部供电方式下,DS18B20的GND引脚必须接地,不能悬空,否则不能转换温度,读取的温度总是85。图7 DS18B20外部电源供电2.3.3 温度采集电路结构DS18B20通过一种片上温度测量技术来测量温度2。测量电路的框图如下:图8 DS18B采集温度框图以下介绍DS1820的测温过程:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55)的值增加,表明所测温度大于-55。 同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。 斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。这是通过改变计数器对温度每增加一度所需计数的的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。 DS1820内部对此计算的结果可提供0.5的分辨力。温度以16bit带符号位扩展的二进制补码形式读出,表3给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。DS1820测温范围-55+125,以0.5递增。如用于华氏温度,必须要用一个转换因子查找表。表3 DS18B20温度/数据关系温度 数据输出(二进制)数据输出(十六进制)+12500000000 1111101000FA+2500000000 001100100032+1/200000000 000000010001000000000 000000000000-1/211111111 11111111FFFF-2511111111 11001110FFCE-5511111111 10010010FF922.4 微控制器的选用与简介现在市面上的微控制器品种繁多,各有各的特点和所针对的市场应用。常用的微控制器有经典的MCS-51系列单片机、AVR单片机、PIC单片机,SPCE061A凌阳单片机,高级的处理器有ARM7、ARM9等。由于我们使用最多的是51单片机,并且其性能已经可以满足系统的设计要求,此处选用51单片机作为系统的核心控制器。本设计主要采用STC89C51芯片。STC89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。STC89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,STC89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作。掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。主要功能性能如表4所示:表4 STC89C51芯片的主要功能兼容MCS-51指令系统 4k可反复擦写(1000次)ISP Flash ROM 32个双向I/O口 4.5-5.5V工作电压2个16位可编程定时/计数器 时钟频率0-33MHz 全双工UART串行中断口线 128x8bit内部RAM 2个外部中断源 低功耗空闲和省电模式 中断唤醒省电模式 3级加密位 看门狗(WDT)电路软件设置空闲和省电功能灵活的ISP字节和分页编程 双数据寄存器指针引脚功能说明3:VCC:电源电压。GND:地。P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线同时转换成地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。 P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX Ri指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2 寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。P3口:P3口是一组带有内部上拉电阻的8位双向I/口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用作上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表5所示:表5 P3端口引脚的第二功能端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外中断0)P3.3/INT1(外中断1)P3.4T0 (定时计数器0)P3.5T1 (定时计数器1)P3.6/WR (外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。/Vpp:内外存储器选择引脚/片内EPROM(或FlashROM)编程电压输入引脚。ALE/:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被拉高,单片机执行外部程序时,应设置ALE无效。:程序存储允许(/PSEN)输出是外部程序存储器的读选通信号,当STC89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的/PSEN信号。EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程电压Vpp。XTAL1:振荡器反相放大器及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端MCS-51单片机的复位是靠外部电路实现的。3. 硬件电路设计系统的硬件设计,主要分为系统电源电路设计、数码管驱动电路设计、蜂鸣器驱动电路设计、自动模式设计、手动模式设计等几个部分,以下将逐一论述。3.1 系统电源电路设计本系统选用了由220V交流变换到交流12V的变压器,变压器输出的12V交流电经过整流二极管IN4007的整流作用,以及电容C1,C9的滤波、平滑处理,再经过L7805稳压芯片的稳定电压,最后得到比较稳定的5V输出4。图9 系统电源电路该电路是线性稳压器构成的独立电源电路,主要为单片机、和其他器件供电。选用的线性稳压器是L7805,这是一个低功耗正向电压调节器,其可以用在一些高效率,小封装的低功耗设计中。L7805的基本特性:0.8A稳定输出电流1A稳定峰值电流低静态电流0.8A时低压差为1.1V0.1%线性调整率/0.2%负载调整率3.2 数码管驱动电路设计显示电路采用了5个LED数码管,单片机I/O的应用最典型的是通过I/O口与8段LED数码管构成显示电路。8段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的。因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以本设计共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上上拉电阻。假如我们将b和c段接上正电源,其它端接地或悬空,那么b和c段发光5,此时,数码管显示将显示数字“1”。而将a、b、d、e和g段都接上正电源,其它引脚悬空,此时数码管将显示“2”。数码管驱动电路在整个系统中的设计如下图:其中DB0DB7接单片机的P0.0P0.7,LED3LED7作为数码管的位选控制端,分别由P2.3P2.7控制。图10.数码管驱动电路设计由于本设计采用P0口驱动8段LED,但由于P0口的驱动能力有限,即使接上上拉电阻,还不能使8段LED达到足够的亮度,故此处使用了NPN型三极管8050来增大P0口的驱动电流,使LED的发光亮度满足设计要求。具体原来说明如下:当位选到该位数码管时,如:位3。只要给三极管Q3的B极一个高电平,即可导通,又由于Q3的B极由P2.5控制,所以使P2.5输出高电平即可使Q3导通。同时三极管工作在放大区,使C极的输出电流增大,从而使LED更亮。本设计的显示电路由5个数码管组成,各个数码管的含义分别如下:第一位(LED1):显示温度值小数点后第一位。第二位(LED2):显示温度值个位。第三位(LED3):显示温度值十位。第四位(LED4):显示负温度值时的负号。独立位(LED): 显示通道选择位。如下表:表6 数码管各位显示区域5通道选择位4符号位3温度值十位2温度值个位1小数点后1位3.3 单片机复位电路设计STC89C51单片机工作之后,只要在它的RST引线上加载10ms以上的高电平,单片机就能有效地复位。51单片机通常采用上电自动复位和按键复位两种方式。最简单的复位电路如下图:图11 单片机上电复位电路图图12 单片机按键复位电路图如图9的上电复位电路与图10的按键复位电路,它们的原理相同。而按键复电路的好处在于在单片机运行期间,可以通过按键来完成复位动作,无须从新上电。为了方便程序调试及作品的使用,本设计采用按键复位电路,即图12.它的原理如下:上电或按键瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上的高电平,就能使单片机有效的复位。在应用系统中,有些外围芯片也需要复位。如果这些芯片复位端的复位电平与单片机的复位电平的要求一致,则可以将复位信号与之相连。 3.4 振荡器电路模块设计STC89C51单片机内部没有振荡电路,需要外加振荡器提供标准时钟,引线 XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器,要形成时钟,外部还需要附加电路。石英晶体振荡和陶瓷振荡均可采用。输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。51单片机的时钟产生方式有两种,分别为:内部时钟方式和外部时钟方式。利用其内部的振荡电路XTAL1和XTAL2引线上外接定时元件,内部振荡电路便产生自激振荡,用示波器可以观察到XTAL2输出的时钟信号。在STC89C51单片机一般常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激振荡器,晶体和电容决定了单片机的工作时间精度为1微秒。晶体可在1.2-12MHz之间选择。STC898C51单片机在通常应用情况下,使用振荡频率为6MHZ的石英晶体,而12MHZ频率的晶体主要是在高速串行通信情况下才使用,在这里我用的是12MHZ石英晶体。对电容无严格要求,但它的取值对振荡频率输出的稳定性、大小及振荡电路起振荡速度有一点影响。C1和C2可在20-100PF之间取值,一般情况取30PF。外部时钟方式是把外部振荡信号源直接接入XTAL1或XTAL2。由于XTAL2逻辑电平不是TTL的,所以还要接一个上拉电阻。图13.振荡器设计电路3.5 按键调整电路设计按键调整界面主要是由4个独立键盘和5位数码管构成,实现对温度的实时控制和显示。4个独立键盘选用轻触按键,单片机检测按键的原理是:单片机的I/O口既可作为输出也可以作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,如图12所示,开始时先给该I/O口赋一高电平,然后让单片机不断地检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。 图14.独立键盘电路3.6 温度报警电路设计本设计采用了蜂鸣器和警示灯来构成整个报警系统。对于采集到的两路温度进行判断,如果通道1的温度高于设定的温度,则蜂鸣器以“嘀”一声报警,同时,通道1的红色报警灯点亮;如果是通道2的温度低于设定的温度,则蜂鸣器发出“嘀嘀”两声的声音报警,同时,通道2的绿色报警指示灯点亮。蜂鸣器的驱动原理是:利用三极管的开关特性,当9012的b极出现低电平“0”时,三极管导通;当b极出现高电平“1”时,三极管截止。通过三极管的导通与截止之间的时间差产生的脉冲,使蜂鸣器发出“滴答”的响声。图15 蜂鸣器驱动电路图14 温度报警指示灯电路3.7 单片机I/O口功能说明此处所用的处理器也是40DIP的STC89C51芯片。它主要完成的功能有:1)对8段LED数码管的段码显示驱动(P0.0P0.7);2)对5个数码管的位选(P2.3、P2.4、P2.5、P2.6、P2.7) ;3)对温度传感器输出数据量进行采样。(P3.6,P3.7);4)对4个独立键盘扫描检测(P1.0、P1.1、P1.2、P1.3);5)对两路报警LED指示灯的亮灭控制(P1.5,P1.6)。通过该单片机即可实现人机交互界面的控制。4. 单片机软件设计4.1 开发工具及软件语言单片机的开发必须用相关的程序语言和相应的开发工具实现,常用的单片机程序语言是C高级语言程序和汇编语言,开发工具则有UltraEdit,PE2,keil等。汇编语言是单片机程序设计语言的重要形式,也是当今单片机开发人员进行程序开发最常用的语言形式。汇编语言是一种用来替代机器语言进行程序设计的语言。汇编语言的特点是每一条指令都给出了助记符。由于助记符用英文缩写来描述指令的特征,因此它不但便于记忆,也便于理解和分类。汇编语言源程序中的每条语句可以有多项构成,其格式如下:标号:操作码助记符 第一操作数 ,第二操作数 ,第三操作数 ;注释 其中,带方括号 的部分为可选项。在单片机系统设计中,程序设计是重要的一环,它的质量直接影响到整个系统的功能,用汇编语言进行程序设计的过程大致可以分为以下几个步骤:(1) 明确课题对程序功能、运算精度、执行速度等方面的要求及硬件条件。(2) 把复杂问题分解为若干个模块,确定各模块的处理方法,画出程序流程图。对复杂问题可分别画出分模块流程图和总的流程图。(3) 存储器资源分配,如各程序段的存放地址、数据区地址、工作单元分配等。(4) 编制程序,根据程序流程图精心选择合适的指令和寻址方式来编制源程序。(5) 对程序进行汇编、调试和修改。将编制好的源程序进行汇编,并进行目标程序、检查修改程序中的错误,对程序运行结果进行分析,直到正确为止。本设计采用的开发工具是Keil C51,Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势6。选用C语言编程,相对汇编语言来说, C语言编程方法容易入门,直观,也简单易懂。所以我们使用C语言进行编程。C语言编程的主要优点如下:1)编程调试灵活方便2)生成的代码编译效率高。3)完全模块化4)可移植性好5)便于项目维护管理4.2 单片机软件流程程序的控制思想: 系统运行后初始化系统变量、按键显示用到的 I/O 以及中断等; 之后初始化两路DS18B20以确认器件的存在; 初始化完成之后 , 将进行温度的采样 , 并执行温度比较 , 如果温度大于 35 (初始值为35 ), 将进行超温蜂鸣器报警。主程序循环过程中不断的扫描按键 , 如果有按键触发将会调用键值处理函数。以下是主要的程序流程图:开始系统初始化温度采集数据存储与显示超出温度范围吗? 否是结束启动报警是否为手动模式?显示选择的通道否是图15.系统软件流程框图4.3 多路温度采集流程设计对多个DS18B20进行操作就能实现对温度的采集,DS18B20d 操作主要有以下几个步骤:初始化,搜索DS18B20,匹配DS18B20,发送温宿转换指令,读取温度。由于单片机的I/O口线作为总线挂接多个数字温度传感器DS18B20,总线处于高电平时,为DS18B20提供电源。单片机通过巡回检测,获取各测点温度。以下对单总线协议做简单介绍: 单总线在任何时刻只能有一个控制信号或数据,数据要能在单片机和单片机总线芯片之间实现可靠的传送,遵从单总线处理次序通信协议,确保数据有条不紊地传送,下图为处理次序示意图。图16 单总线处理次序DS18B20测温传感器具有测量速度快、精度高、高低温报警、智能化等特点 ,由此构成的单片机控制的单总线温度多路采集系统比传统的测温系统可靠性高 ,易于构成网络控制 ,适用于各种温度检测与控制系统 ,该单总线技术可以为其他过程参数测控系统提供技术支持 ,具有实用价值和推广价值。4.3.1 处理次序处理次序操作时 ,一般有以下 4个过程。初始化。基于单总线上的所有传输过程都以初始化开始的,初始化过程由主机发出的复位脉冲和从机的应答脉冲组成。应答脉冲使主机知道总线上有从机设备,且准备就绪。 ROM操作命令。在主机检测到应答信号后,主机可以发出 ROM 操作命令之一。所有的 ROM命令都是 8位,而且这些命令与各个从机设备的唯一 64位 ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。可发送的 ROM命令有:读 ROM;匹配 ROM;搜索ROM;跳过 ROM;超速 ROM;超速跳过ROM;条件查找 ROM。 RAM操作命令。当成功执行上述某个 ROM操作命令后,总线可以发出一个 RAM命令来访问和控制 RAM。可发送的 RAM命令有;写暂存RAM;读暂存RAM;复制暂存RAM;数据转换;回读E2PROM;读电源模式。数据交换。主机和从机之间进行数据的传输 ,所有的数据都是从低位开始读写的。4.3.2 时序信号所有的单总线器件要求采用严格的通信协议 ,以保证数据的完整性。该协议定义了几种信号:复位脉冲、应答脉冲、写 0、写1、读 0和读 1。这些信号当中 ,除了应答信号是由从机发给主机的以外 ,其他的信号都是由主机发出同步信号 ,并且发送所有的命令和数据都是从字节的低位开始。 初始化时序:单总线上的所有通信都是以初始化时序开始,包括主机发出的复位脉冲及从机的应答脉冲,如下图17所示。图17 初始化时序写时序当主机把数据线从逻辑高电平拉到逻辑低电平时 ,写时序开始,先延时 15s,发送一位数据 (“1”或“0”)再延时时间 45s,一位数据发送完毕,每发送完一位数据将数据线拉高,写“1”和“0”时序如图 18所示。读时序单总线器件仅在主机发出读时序才向主机传输数据,所以,在主机发出读命令后,必须马上产生读时序,即至少拉低总线 1s,以便从机能够传输数据 ,读时序。如图19所示。图18 写时序 图19 读时序本系统中一根数据线上接一个DS18B20 , 所以 ROM匹配时采用跳过处理 SKIP ,向DS18B20 发送 0xcc命令字即可; 然后向DS18B20 写命令字0x44 启动一次温度转换。转换结束后 , DS18B20 将采集到的 16 位温度值存储到其 ROM的最低两个字节。转换结束后必须对DS18B20 进行初始化 , 然后才能通过向DS18B20 写命令字0xbe 读取 ROM获取温度结果。温度采集流程图如下:开始DS18B20初始化发搜索ROM命令发一个DS18B20序列号启动所有在线DS18B20数据转换等待数据转换DS18B20初始化发匹配ROM命令发暂存器命令读匹配DS18B20温度在线DS18B20都访问完毕?是否图20.温度采集流程图温度转换部分的程序摘录如下:/*读一个字节*ReadOneChar(void) uchar i=0; uint dat=0; for (i=8;i0;i-) DQ=0; /给一个脉冲信号 dat=1; DQ=1; /给一个脉冲信号 if (DQ) dat|=0x80; delay(10); return (dat); /*写一个字节*void WriteOneChar(uchar dat) uchar i=0; for (i=8;i0;i-) DQ=0;/给一个脉冲信号 DQ=dat&0x01; delay(5); DQ=1; /给一个脉冲信号 dat=1; /*读取温度*ReadTemperature(void) uchar a=0;uchar b=0;uint t=0;float tt=0;Init_DS18B20();WriteOneChar(0xcc); /跳过读序号列好的操作WriteOneChar(0x44); /启动温度转换Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0xbe); /读取温度寄存器等(共可读取9个寄存器)前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位fuhao=b&0x80;if (fuhao !=0) /判断温度是否为负 b=b; /负温度的计算方法 a=a; tt=(b*256)+a+1)*0.0625; tt=tt*10; t=(int)tt; else /正温度的计算方法 tt=(b*256)+a)*0.0625; tt=tt*10; /温度值放大10倍 t=(int)tt; return (t); 4.4 定时器中断子函数设计流程开始定时器初始化定时2S到?否等待定时时间到定时4S到?显示通道1显示通道2定时器清0否是是返回图21 中断子函数设计流程本设计采用51单片机自带的定时器功能进行自动模式下的显示设计。此处使用了定时器0的方式1(16位定时/计数器),主要过程是定时器初始化、启动定时器、等待定时2s到,如果计时2s到,则显示通道1的温度值;如果定时4s到,则显示通道2的数据,同时将定时器计时清0,等待下一次定时计数开始。定时器初始化程序设计如下:/*功能:定时器初始化,波特率9600,方式1*/void Init_Com(void)TMOD = 0x01; /定时器1 定时方式2TH0 =(65536-45872)/256; /初值为6,计数250次溢出, 0x06TL0 =(65536-45872)%256; /,即可向高位进位 0x06ET0 = 1;EA = 1;TR0= 1;/*定时器0中断子函数*/void time0() interrupt 1TH0 =(65536-45872)/256; /重置初值TL0 =(65536-45872)%256; /重置初值num+; DS18B20初始化程序如下:/*初始化函数*void Init_DS18B20(void) uchar x=0,y=0;DQ=1; /DQ复位DQ1=1;delay(10); /稍作延时DQ=0; /单片机将DQ拉低DQ1=0;delay(100); /精确延时,大于480usDQ=1; /拉高总线DQ1=1;delay(20);x=DQ; /稍作延时后,如果x=0则初始化成功,x=1则初始化失败y=DQ1;delay(20);4.5 按键调整模块流程等待键盘按下延时确定键手动模式温度置99Key1按下?温度值减1?Key1等于2?Key2按下?Key3按下?Key4按下?延时延时延时Key1按下?Key2按下?Key3按下?Key4按下?选择通道1选择通道2返回温度值加1温度大于99?温度置-55温度小于-55?启动定时器切换到自动模式图22 按键调整流程图按键调整过程使用了4个独立键盘,各个按键的含义是:key1是通道切换键,该键按下时,即进入手动模式,同时定时器关闭,按第一次时,显示通道1的数值;按下第二次时,显示通道2的数值,同时,键值清0,再次按下时又显示通道1的数值,如此循环。Key2为温度值增加键,当该键按下一次,温度值加1,第二次再加1,直到数值加到99,即清0 ,重新开始加。Key3为温度值减少键,当该键按下一次,温度值减1,第二次再减1,直到数值减少为-55,即重新置99 ,重新开始减。Key4是确定键,该键按下时,定时器启动(系统刚开始时,定时器不工作),自动切换到自动模式,循环显示两个通道的数值。程序设计摘录如下:/*键盘扫描子函数*/void keyscan()/ uchar b=0; /P1=0x0f; /按键置1 if(key1=0) /温度增加调整键 /消抖延时 delay(100); if(key1=0) if(flag=0) /通道选择标志位 key_to1();/如果是通道1,就把温度变量值赋给高温报警值 else key_to3(); /否则就赋低温报警值 for(n=0;n8;n+) display(); while(!key1); if(key2=0)/温度减少调整键/消抖延时 delay(100); if(key2=0) if(flag=0) key_to2(); /如果是通道2,就把温度变量值赋给低温报警值 else /否则就赋高温报警值 key_to4(); for(n=0;n8;n+) display(); while(!key2);/等待按键释放 if(key3=0)/确定键/消抖延时 delay(100); if(key3=0) TR0=1;/定时从这里开始 set=set; if(set=0) Hight=1;Low=0; else Low=1;Hight=0; TR0=1; /重启定时器0 while(!key3); /等待按键释放 if(key4=0) /通道选择键 /消抖延时 delay(100); if(key4=0) while(!key4) TR0=0; /关闭定时器 b+; if(b=1) temp=ReadTemperature(); /读取通道1温度 flag=0;
展开阅读全文