为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

仓库温度湿度监测系统的设计(论文)

2017-10-18 50页 doc 854KB 17阅读

用户头像

is_496339

暂无简介

举报
仓库温度湿度监测系统的设计(论文)仓库温度湿度监测系统的设计(论文) 摘要 采用单片机对温度、湿度等环境参数进行监测是一个工业生产中经常遇到的监测问题,采用单片机不仅具有监测方便、操作简单等优点,而且可以在节约成本的同时大幅度的提高监测质量。本文设计了单片机构成的环境温度、湿度参数实时监测装置,本装置以单片机AT89C51为控制核心,采用独特的单总线数字式温度传感器DS18B20进行温度采集,采用湿敏电容HS1101对湿度参数进行采集。LCD液晶显示屏对于当前的温度值和湿度值进行实时的显示,可以方便用户直观的了解所测得的温度、湿度环境参数值。用户可使用按键...
仓库温度湿度监测系统的设计(论文)
仓库温度湿度监测系统的设计() 摘要 采用单片机对温度、湿度等环境参数进行监测是一个工业生产中经常遇到的监测问,采用单片机不仅具有监测方便、操作简单等优点,而且可以在节约成本的同时大幅度的提高监测质量。本文设计了单片机构成的环境温度、湿度参数实时监测装置,本装置以单片机AT89C51为控制核心,采用独特的单总线数字式温度传感器DS18B20进行温度采集,采用湿敏电容HS1101对湿度参数进行采集。LCD液晶显示屏对于当前的温度值和湿度值进行实时的显示,可以方便用户直观的了解所测得的温度、湿度环境参数值。用户可使用按键根据自身要求设定温湿度上下限,同时,报警装置可依据用户的设定针对温湿度超限情况进行报警。在软件设计方面完成了各功能模块的流程图,并根据设计要求对需要实现的功能经过反复的模拟运行、调试、修改简化,最后得出一套完整的软件系统, 设计后的系统具有操作方便,控制灵活等优点。 关键词:温湿度监测;单片机AT89C51;LCD显示 Abstract MCU is always used in industry measurement as temperature and humidity measurement. With MCU, it can be more convenient and simple to complete the measurement efficiently. The paper designs a real-time temperature and humidity measurement device based on MCU. The device adopts AT89C52 as the control. The device also make use of DS18B20 to obtain the digital temperature signal and HS1101 to gain the analogue humidity signal. In the design, LCD is used to display the consumers the real-time temperature and humidity clearly. The consumer can use the buttons to change the upper and lower limits of the temperature and humidity. And the alert in the design should work based on the limits set up by the consumers. In software design of various functional modules to complete the flow chart and design requirements in accordance with the function of the need to achieve through repeated simulation run, debug, modify simplify came to the conclusion that a complete set of software systems. The after design system is easy to operate, the advantages of flexible control. Keywords:temperature and humidity measurement; Mi crocomputer AT89C51;LCD 目录 1绪论 ................................................................................................................................1 1.1课题背景 ..............................................................................................................1 1.2温湿度采集技术现状 ...........................................................................................1 1.3设计目标和系统构成 ...........................................................................................2 1.4本文主要工作 .......................................................................................................2 1.5主要技术 .......................................................................................................2 2系统总体设计 ................................................................................................................3 2.1课题任务与技术指标 ...........................................................................................3 2.2方案论证 ..............................................................................................................3 2.2.1方案一 .........................................................................................................3 2.2.2 方案二 ........................................................................................................4 2.3方案比较 ..............................................................................................................5 2.4结论 ......................................................................................................................5 3硬件系统的设计.............................................................................................................6 3.1温度传感器DS18B20的设计 ..............................................................................6 3.1.1概述.............................................................................................................6 3.1.2内部结构 .....................................................................................................8 3.1.3测温原理 .....................................................................................................8 3.1.4 64位激光ROM ..........................................................................................9 3.1.5存贮器 ....................................................................................................... 10 3.1.6温度表示 ................................................................................................... 11 3.1.7 ROM操作命令 ......................................................................................... 11 3.1.8存储器操作命令 ....................................................................................... 13 3.1.9工作原理及时序 ....................................................................................... 13 3.2湿度传感器的设计 ............................................................................................. 16 3.2.1HS1100/1101特点 ..................................................................................... 16 3.2.2湿度测量电路 ........................................................................................... 18 3.2.3湿度传感器的标定 ................................................................................... 20 3.3 CPU单元的设计 ................................................................................................ 25 3.3.1单片机AT89S52介绍............................................................................... 25 3.3.2时钟信号设计 ........................................................................................... 30 3.3.3复位电路设计 ........................................................................................... 31 3.4显示电路的设计 ................................................................................................. 31 3.4.1 液晶显示简介 .......................................................................................... 31 3.4.2 1602字符型LCD简介 ............................................................................. 29 3.5按键电路的设计 ................................................................................................. 35 3.5 报警单元的设计 ................................................................................................ 36 4软件设计 ...................................................................................................................... 38 4.1主程序设计......................................................................................................... 38 4.2子程序设计......................................................................................................... 39 4.2.1温度传感器子程序设计 ............................................................................ 39 4.2.2湿度传感器子程序设计 ............................................................................ 42 4.2.3按键子程序设计 ....................................................................................... 43 4.2.4报警子程序设计 ....................................................................................... 49 4.2.5显示子程序设计 ....................................................................................... 50 5调试结果与总结........................................................................................................... 51 致谢 ................................................................................................................................. 49 参考文献 ......................................................................................................................... 50 附录 ................................................................................................................................. 51 外文资料 ......................................................................................................................... 68 中文翻译 ......................................................................................................................... 86 1绪论 1.1课题背景 近几年来仓库的机械化、自动化程度不断提高,一些智能化仓库管理技术如检测技术、监视技术和控制技术等在仓库管理中得到广泛应用。在粮食、药材等的储存仓库,若不对仓库内的温度或湿度进行实时检测,就不能及时了解粮食、药材的储藏状况,可能发生腐烂,造成极大的经济损失。 由于仓库对环境温度和湿度提出了很高的要求,因此能否有效地对这些领域的环境温度和湿度进行实时监测和控制是一个必须解决的重要课题。本系统解决的就是温、湿度的实时检测,只要两者之中的任何一个超过限制,就启动报警系统,使人们能够及时发现问题,采取有效的措施,以此避免不必要的损失。 1.2温湿度采集技术现状 在传统的温度测量系统设计中,往往采用模拟技术进行设计。传感器一般采用热电阻、热电偶等模拟器件,需要额外加补偿电路,安装复杂,成本较高。而且必须经过A/D转换后才可以被微处理器识别和处理。这样就不可避免地遇到诸如引线误差补偿、多点测量中的切换误差和信号调理电路的误差等问题;而其中某一环节处理不当,就可能造成整个系统性能的下降。而DS1820新型单总线数字温度传感器,采用3脚(或8脚)封装,从DS1820读出或写入数据仅需要一根I,O口线,而且测量精度达到12位,最低精确到小数点后4位有效数字[1]。用这种智能化数字式传感器的优胜显而易见。 现代湿度测量方案最主要的有两种:干湿球测湿法,电子式湿度传感器测湿法。干湿球湿度计的特点: 干湿球湿度计的准确度只有5,一7,RH。 干湿球测湿法采用间接测量,通过测量干球、湿球的温度经过计算得到湿度值,因此对使用温度没有严格限制,在高温环境下测湿不会对传感器造成损坏。干湿球测湿法的维护相当简单,在实际使用中,只需定期给湿球加水及更换湿球纱布即可。与电子式湿度传感器相比,干湿球测湿法不会产生老化,精度下降等问题。所以干湿球测湿方法更适合于在高温及恶劣环境的场合使用。 电子式湿度传感器的特点: 电子式湿度传感器的准确度可以达到2,一3,RH。电子式湿度传感器的精度水 平要结合其长期稳定性去判断,一般说来,电子式湿度传感器的长期稳定性和使用寿命不如干湿球湿度传感器。湿度传感器是采用半导体技术,因此对使用的环境温度有要求,超过其规定的使用温度将对传感器造成损坏[2]。所以电子式湿度传感器测湿方法更适合于在洁净及常温的场合使用。 1.3设计目标和系统构成 气调库内库间温度、相对湿度、气体成分是保证贮藏质量的3个基本技术参数。温度是影响粮食呼吸强度的重要因素。经过多年实践和参考国外的有关资料,气调库的贮藏温度确定值为0,10?,控制精度范围在?1?。在任何气调库内,不同程度地存在着温度梯度,所以库内温度的准确值应是各点温度,,的统计平均值,对于,个测点:,=1,??,,=1,,(,=1,2„,)。库内空气的相对湿度也是直接影响粮食贮藏质量的一个重要因素。相对湿度低时,粮食失重且质量下降。湿度又是温度的一个函数,湿度相对稳定,才能保持库温稳定,理想的相对湿度应保持在10%,30%,,之间。调节和控制库内气体成分,降低氧的含量到3%,5%,提高二氧化碳含量到3%,5%,是贮藏不同粮食必不可少的重要因素。本控制系统应能实时地监控库内环境,使之维持在果蔬保鲜贮藏的最佳水平上。 1.4本文主要工作 本专题是温湿度检测仪的数据采集部分,要完成的主要工作是: (1)设计温、湿度传感器; (2)设计数据采集系统的硬件电路; (3)采集系统软件设计与编程; (4)系统的计算机仿真和结果的对比分析; 1.5主要技术方案 本课题研究的主要目的是设计一个能够提供环境的温度、湿度并具有对温度、湿度超限报警功能的装置。本系统由AT89C51单片机、温度传感器、湿度传感器、键盘电路、报警电路、显示电路组成,完成对仓库内温、湿度数据的采集、监测、显示和超限报警。当采集外界温度和湿度信号后,送单片机处理,处理结果送LCD显示,用户通过键盘设定上限值后,报警电路对外界温、湿度进行监控。 2系统总体设计 2.1课题任务与技术指标 该题目旨在设计开发了气调库环境参数数据采集和智能控制的分布式测控系统,能够提供环境的温度、湿度并具有对温度、湿度超限报警功能的装置,利用单片机及外围电路构成一个监测系统,达到如下要求: (1)粮库容积为100吨,应能贮存大豆、小麦和水稻等粮食18—24个月,外观、色泽基本不变。 (2)控制范围,温度: 0,10??20%;湿度:10%,30%,, ?5%RH。 (3)20V/3A三组无源输出触点,控制加热器、加湿器及干燥机。 (4)监控仪能够记录每天的平均温度、湿度、氧气和二氧化碳浓度,并可对一周内各日的值具有查询功能。 2.2方案论证 根据本课题的任务与要求,提出两种方案进行论证。 2.2.1方案一 由于课题中涉及温度、湿度两个量的监测,由此设计出应对本课题的方案一,即采用一个温度传感器和一个湿度传感器对温、湿度进行分别测量。基于此设想装置的基本工作原理是:温度、湿度传感器分别采集到两路信号送入单片机,由液晶显示器实时显示环境的温度、湿度,并可通过键盘输入用户需设定的温、湿度上下限,当温、湿度超限时启动报警装置报警,整个装置的控制核心采用单片机。在功能设计上可将整个装置分为测量模块、CPU模块、显示模块、键盘输入模块和报警模块几个部分。 方案一在元器件的选择上,选取DS18B20数字式温度传感器和HS1101湿敏电容作为温、湿度信号的采集传感器。选取1602液晶显示屏显示温、湿度值。DS18B20是美国DALLAS公司生产的单总线数字式温度传感器,可直接将其测得的温度值传入单片机,再通过LCD进行显示。而HS1101湿敏电容是将空气的湿度值转化为该湿敏电容的电容值,电容值随湿度值的增大而增大,将该湿敏电容置于555振荡电路中,电容值的变化可转为与之成反比的电压频率信号的变化,并可以直接送入单片机。采用温度传感器DS18B20与电容式湿敏传感器HS1101的系统结构框图如图2.1所示。 图2.1 采用温度传感器DS18B20、湿度传感器HS1101的系统结构框图 2.2.2 方案二 本方案与方案一的主要不同是采用了SHT71数字温湿度传感器,SHT71是瑞士Sensirion公司推出的基于CMOSens技术的新型温湿度传感器。该传感器将CMOS芯片技术与传感器技术结合起来, 发挥出强大的优势互补作用。包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,并在同一芯片上,与14位的A/D转换器以及串行接口电路实现无缝连接。SHT71数字温湿度传感器的引脚图如图2.2所示。 图2.2 SHT71数字温湿度传感器引脚图 由于SHT71数字温湿度传感器上除了温度、湿度敏感元件以外,还包括一个放大器,A/D转换器,OTP内存和数字接口,所以系统框图得以简化,采用SHT71数字温湿度传感器的系统框图如图2.3所示。 图2.3 采用SHT71数字温湿度传感器的系统框图 2.3方案比较 在上述两种以传感器为主要区别的方案选择中,主要差别在于是否运用数字传感器以及是否考虑将温度、湿度两个传感器合二为一。从性价比的角度分析,虽然方案1中要采用两个单独的传感器温度传感器DS18B20和湿敏传感器HS1101,看似有些资源浪费,但方案2的SHT71传感器的单价已胜过方案1中两个传感器售价之和,在购置传感器上的开销要大。因此,从性价比角度考虑,方案1更优。另一方面,电容式湿敏传感器实用化程度高,工艺成熟,性能稳定,普遍用于各种情况下湿度测量,且可以使用555振荡电路将其湿度变化对应的湿敏电容值的变化转化为脉冲频率送入单片机。而DS18B20由于具有结构简单不需要外接电路、可用一根I/O数据线既供电又传输数据、体积小、分辨率高、转换快等优点,被广泛用于测量和控制温度的地方。从应用程度上来说,方案1的可操作性更强。 2.4结论 通过上述方案比较最终确定选择方案1作为温湿度传感器的设计方案。 3硬件系统的设计 本系统以单片机AT89C52为控制核心,以数字式温度传感器DS18B20作为温度检测元件,以湿敏电容HS1101作为湿度检测元件。本系统在功能设计上可将整个装置分为测量单元、CPU单元、显示单元、键盘输入单元和报警单元几个部分。系统框图如图3.1所示。 图3.1 采用温度传感器DS18B20、湿度传感器HS1101的系统结构框图 3.1温度传感器DS18B20的设计 3.1.1概述 由单片机集成电路构成的单线数字温度传感器由于其外围电路结构简单,使用方便,开发成本底,开发周期短而得到很广泛的应用。以前的温度传感器大都输出的是模拟信号,不能直接送入单片机等微处理器进行测量,而且要做多点测量十分麻烦,所以在多点温度测量中得不到广泛的应用。美国Dallas公司开发出的DS18B20单线数字温度传感器具有与一般模拟温度传感器相当的测量范围和精度,输出直接表示温度值的12位(二进制)数字。由于DS18B20具有全球唯一的序列号,故一根总线可以挂接任意多个DS18B20。DS18B20有数据总线供电和外部电源供电两种供电方式,可以非常方便地构成单线多点温度测量系统。 DS18B20为一单总线的数字温度传感器,可提供9,12位(二进制)的数据来指示传感器的温度。数据信息从DS18B20之间只需一根数据线(和地线)连接即可。若采用外部电源供电方式只需三条线即可。因为每一片DS18B20具有全球唯一的序列号,所以任意多个DS18B20可共享同一数据线。DS18B20的测温范围从,55?,,125?,在,10,85?之间的精度达?1,2?,在整个测量范围内具有?2?的测量精度。 (1)主要特性 可编程分辨率的单总线数字式温度传感器DS18B20具有如下的特性: ?单线接口,只需一根口线与CPU连接 ?不需要外部元件,不需要备份电源,可用数据供电 ?支持多点组网功能,多个DS18B20可以并联在唯一的单总线上 125? ?温度测量范围从,50?, ?通过编程可实现1/2,1/16的四级精度转换 ?在93.75ms和750ms内将温度值转化9位和12位的数字量 ?用户可自设定非易失的报警上下限值 ?报警搜索命令可以识别哪片DS18B20超限 ?芯片本身带有命令集和存储器 (2)引脚及说明 可编程分辨率的单总线数字式温度传感器DS18B20引脚及说明。 DS18B20引脚排列如图3.2所示。 图3.2 DS18B20引脚排列图 DS18B20的引脚说明表如表3.1所示。 表3.1 DS18B20引脚说明表 序号 名称 引脚功能描述 1 GND 地信号 数字输入输出引脚,开漏单总线接口引脚,当使用 2 DQ 寄生电源时,可向电源提供电源 可选择的VDD引脚,当工作于寄生电源时,该引 3 VDD 脚必须接地 3.1.2内部结构 DS18B20内部结构如图3.3所示。DS18B20有三个主要的数据部件: (1)64位激光ROM; (2)温度敏感元件; (3)非易失性温度告警触发器TH和TL。 DS18B20的电源可以由数据线本身提供,但是在有些特定的应用环境中,要求温度的测量尽量快些,因此一般都采用外部电源供电方式。 图3.3 DS18B20内部结构框图 3.1.3测温原理 DS18B20的测温原理如图3.4所示。低温系数振荡器输出的时钟脉冲信号通过由高温系数振荡器产生的门开通周期而被计数,通过该计数值来测量温度。计数器被预置为与,55?对应的一个基数值 ,如果计数器在高温系数振荡器输出的门周期结束 ?的温度寄存器的值就增加前计数到零,表示测量的温度高于,55?,被预置在,55 一个增量,同时为了补偿温度振荡器的抛物线特性,计数器被斜率累加器所决定的值进行预置,时钟再次使计数器计数直至零,如果开门通时间仍未结束,那么重复此过程,直到高温度系数振荡器的门周期结束为止。这时温度寄存器中的值就是被测的温度值。 图3.4 DS18B20的测温原理图 3.1.4 64位激光ROM 每一个DS18B20包括一个唯一的64位ROM编码。开始8位是单线产品系列编码,接着的48位是每个器件唯一的序列号,最后8位是前56位的CRC校验码。这也是多个DSl8B20可以采用一线进行通信的原因。64位ROM和ROM操作控制部分允许DS18B20作为一个单线器件工作并遵循单线协议。直到ROM操作协议被满足,DS18B20控制部分的功能是不可访问的。64位ROM结构机构如表3.2如下所示: 表3.2 64位激光ROM的结构 8位校CRC编号 48位序列号 8位产品系列编号 MSB LSB MSB LSB MSB LSB 3.1.5存贮器 DSl8B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除EEPRAM。后者用于存储TH,TL值。数据先写入RAM,经校验后再传给EEPRAM。而配置寄存器为高速暂存器中的第5个字节,他的内容用与确定温度值的数字转换分辨率,DSl8B20 工作时按此寄存器中的分辨率将温度转换为相应精度的数值。低5位一直都是1,TM是测试模式位,用于设置DSl8B20在工作模式还是在测试模式。如表3.3所示。在DSl8B20出厂时该位被设置为0,用户不要去改动,Rl和R0决定温度转换精度位数。 表3.3 字节各位的定义 TM R1 R0 1 1 1 1 1 由表3.4可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如表3.4所示。其中温度信息(第l,2字节),TH和TL值第3,4节,第6,8字节,表现为全逻辑1;第9字节读出的是前面所有的8字节的CRC码,可用来保证通信正确。 表3.4 数据分辨率和转换时间 R1 R0 分辨率 温度最大转 换时间/ms 0 0 9 93.75 0 1 10 187.5 1 0 11 275.00 1 1 12 750.00 当DSl8B20接收到温度转换命令后,开始启动转换,如表3.5所示。转换完成后的温度值就以16位带符号扩展到二进制补码形式储存在高速暂存存储器的第l,2字 节。单片机可通过单线接口读到该数据,读取时低位在前面,高位在后,数据格式以0.0625?,LSB形式表示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。 表3.5 码制转换 温度低位 温度高位 TH TL 配置 保留 保留 保留 8位CRC 3.1.6温度表示 此处DS18B20用12位存贮温度值,最高位为符号位。下图为18B20的温度存储方式,负温度S,1,正温度S,0。温度转换命令使温度转换发生,数值存储在暂存存储器中,温度读数以16位符号扩展的二进制补码读数形式提供。 MSB 654S S S S S 2 2 2 LSB 3210,1,2,3,42 2 2 2 2 2 2 2 DS18B20输出数据与温度的对应关系见表3.6。 表3.6 输出数据与温度的对应关系 温度 输入(2进制) 输出(16进制) +125? 0000 0111 1101 0000 07D0H +85? 0000 0101 0101 0000 0550H +25.0625? 0000 0001 1001 0001 0191H +10.125? 0000 0000 1010 0010 00A2H +0.5? 0000 0000 0000 1000 0008H 0? 0000 0000 0000 0000 0000H -0.5? 1111 1111 1111 1000 FFF8H -10.125? 1111 1111 0101 1110 FF5EH -25.0625? 1111 1111 0101 1110 EE6FH -55? 1110 1110 0110 1111 FE90H 3.1.7 ROM操作命令 一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。 所有ROM操作命令均为8位长,如表3.7所示。 表3.7 ROM操作命令 指 令 说 明 在总线上仅有一个DS18B20时,允许总线主机读出其序列号 读ROM(33H) 后继以64位的ROM数据序列,允许总线主机对单点及 多点总线上特定的DS18B20寻址,只有与64位ROM序列严匹配ROM(55H) 格相符的DS18B20才能对后继的存储器操作命令做出响应。 所有与64位ROM序列号不符的从片将等待复位脉冲。 跳过ROM(CCH) 在单点总线系统中,允许主机不提供64位ROM编码而 访问寄存器 搜索ROM(F0H) 允许总线主机使用一种“消去”处理来识别总线上所有 从片的64位ROM编码 报警搜索(ECH) 仅温度越限的器件对此命令做出响应 3.1.8存储器操作命令 对DS18B20内部的可擦写数据存储器的操作也有自己的命令,具体功能如表3.8所示。 表3.8 存储器操作命令 约定发出约定代码后单 指 令 说 明 代码 总线的操作 启动温度变换 温度变换 44h 等待750ms 从暂存存储器读字节 读暂存存储器 BEh 读9字节数据 写字节至暂存存储器地址2到4处写数据至地址2至写暂存存储器 4Eh (TH和TL温度触发器和配置) 4三个字节 把暂存存储器复制入非易失性存复制暂存 43h 读复制状态 储器(仅地址2,4) 存储器 把储存在非易失性存储器内的数 重新调出E2 E3h 读温度忙状态 值重新调入暂存存储器 发DS18B20电源方式的信号至主 读电源 B4h 读电源状态 机 3.1.9工作原理及时序 由于DS18B20是单总线的数字温度传感器,所有的数据读出与写入都经过DQ这根总线,要求操作严格按时序进行才不会导致出错。 DS18B20主要有以下三个操作:初始化,序列号访问命令和内存访问命令 (1)初始化:主机通过信号线,向DS18B20发送480,960μS的负脉冲,在 20发出60,240μS的应答脉冲,就准备接受主机传送的访问15,60μS后,DS18B ROM的命令。 (2)序列号访问命令:接下来,用户通过信号线,发送一个特定的64位序列号编码,信号线上的DS18B20都进行编码匹配,只有编码一致的DS18B20才被激活,可以接受下面的内存访问命令; 3)内存访问命令:在DS18B20被复位后,主机就对其进行内存访问,读取温( 度数据,设定温度报警限等。 DS18B20工作过程中的协议为:初始化(发复位脉冲)?发ROM功能命令?发存储器操作命令?处理数据。 系统对DS18B20的各种操作必须按协议进行,协议由几种单线上信号类别型组成:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号,除了存脉冲外,均由总线主机产生。 1.初始化 单总线上的所有处理均从初始化开始,时序见图3.5。主机总线to时刻发送一复位脉冲(最短为480us的低电平信号),接着在tl时刻释放总线并进入接收状态,DSl8B20在检测到总线的上升沿之后,等待15-60us,接着DSl8B20在t2时刻发出存 [6]在脉冲(低电平持续60-240us),如图中虚线所示。 15us-60us 480us 480us-950us 60us-240us T0 tl t2 t3 t4 图3.5初始化过程“复位和存在脉冲” 2.写时间隙 当主机总线to时刻从高拉至低电平时,就产生写时间隙,见图3.6、图3.7,从to时刻开始15us之内应将所需写的位送到总线上,DSl8B20在t0后15-60us间对总 ,见图2-5;若高电平,写入的位是1,见图2-6。线采样。若低电平,写入的位是0 连续写2位间的间隙应大于1us。 对于主机产生写1时间片的情况,数据线必须先被拉至逻辑低电平,然后就被释放,使数据线在写时间片开始之后的15mS之内被拉至高电平。 对于主机产生写0时间片的情况,;数据线必须被拉至逻辑低电平且至少保持60μS。 T0 t1 t0 t1 >60us >1us >60us >1us 15us15us-60us 15us 45us 图3.6 DS18B20写0 图3.7 DS18B20写1 3.读时间隙 当从DS18B20读数据时,主机产生读时间片。当主机将数据线从逻辑高电平拉至低电平时,产生读时间片。数据线必须保持在低逻辑电平至少1μs,来自DS18B20的输出数据在读时间片下降沿之后15微秒有效。因此,为了读出从读时间片开始算起15微秒的状态主机必须停止把I/O引脚驱动至低电平。在读时间片结束时,I/O引脚经过外部的上拉电阻回至高电平。每个读周期最短的持续期为60μs,各个读周期之间也必须有1μs以上的高电平恢复期。 见图3.8,主机总线to时刻从高拉至低电平时,总线只须保持低电平t0一t1。之后在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t2时刻前有效。t2距to为15us,也就是说t2时刻前主机必须完成读位,并在to后的60us一120 us内释放总线。 >60us >1us 主机工作 15us DS18B20工作 to t1 t2 t3 图3.8 主机读时序 最后DSl8B20使用中注意到事项: O 口线少等DSl8B20虽然具有测温系统简单,测温精度高、连接方便、占用I,优点,但在实际应用中也应注意以下问题: (1)在实际片使用中发现,应使电源电压保持在5v左右,如果电压过低,会使所测得到温度与实际温度出现偏高现象。 (2)连接DSl8B20的总线电缆是有长度限制的。当采用普通信号电缆传输长度超过50m时,读取的测温数据发生错误,当采用双绞线带屏蔽电缆为总线电缆时,正常通讯距离可达l50m,当采用每米胶合次数更多的双绞线带屏蔽电缆时,正常通讯距离可以进一步加长。这种情况主要由总线分布电容使信号波形产生畸变造成的。因此,存进行长距离测量时要充分考虑总线分布电容和阻抗匹配问题。 DS18B20电路图如图3.9所示 图3.9 DS18B20电路图 3.2湿度传感器的设计 测量空气湿度的方式很多,其原理是根据某种物质从其周围的空气吸收水分后引起的物理或化学性质的变化,间接地获得该物质的吸水量及周围空气的湿度。电容式、电阻式和湿涨式湿敏元件分别是根据其高分子材料吸湿后的介电常数、电阻率和体积随之发生变化而进行湿度测量的。 课题中采用的湿度传感器HS1101是基于独特工艺设计的电容元件,该相对湿度传感器可以应用于办公自动化,车厢内空气质量检测,家电,工业控制系统等场合。在需要湿度补偿的场合该湿度传感器也可以得到很大的应用。下面介绍HS1100/HS1101湿度传感器及其特点。 3.2.1HS1100/1101特点 ?不需校准的完全互换性; ?高可靠性和长期稳定性; ?快速响应时间; ?专利设计的固态聚合物结构; ?有顶端接触(HS1100)和侧面接触(HS1101)两种封装产品; ?适用于线性电压输出和频率输出两种电路; ?适宜于制造流水线上的自动插件和自动装配过程。 湿度传感器 HS1101/HS1100基于独特工艺设计的电容元件,这些相对湿度传感器可以大批量生产。可以应用于办公自动化,车厢内空气质量控制,家电,工业控制系统等。在需要湿度补偿的场合他也可以得到很大的应用。 HS1100/HS1101的外部结构及符号如图3.10所示: 图3.10 HS1101的外形图 HS1101的特性参数见表3.9。 表3.9 HS1101的特性参数 特性参数 典型值 单位 湿度测量范围 1,99% RH 供电电压 5 V 标称电容@55%RH 180 Pf 温度系数 0.04 Pf/? 33-75%的平均灵敏度 0.34 Pf/%RH Na 漏电流 1 150小时结露后恢复时间 10 S 湿度迟滞 ?1.5 % 长时间稳定性 0.5 %RH/yr S 响应时间 5 %RH 偏离曲线 ?2 ? 工作温度 -40,100 ? 储存温度 ,40,125 图3.11为湿敏电容工作的温、湿度范围,图3.12为湿度,电容响应曲线。 图3.11 湿敏电容工作的温、湿度范围 图3.12 湿度—电容响应曲线 相对湿度在0%,100%RH范围内;电容量由162PF变到200PF,其误差不大于?2%RH;响应时间小于5S;温度系数为0.04PF/?,可见精度是较高的。 3.2.2湿度测量电路 HS1100 /HS1101电容传感器,在电路构成中等效于一个电容器件,其电容量随着所测空气湿度的增大而增大。如何将电容的变化量准确地转变为计算机易于接受的 信号,常用两种方法:一是将该湿敏电容置于运放与阻容组成的桥式振荡电路中,所产生的正弦波电压信号经整流、直流放大、再A/D 转换为数字信号;另一种是将该湿敏电容置于 555振荡电路中,将电容值的变化转为与之呈反比的电压频率信号,可直接被计算机所采集。我采用第二种方法。 频率输出的555测量振荡电路如图3.13所示。集成定时器555芯片外接电阻R4、R2与湿敏电容C(这里的HS11??指HS1101),构成了对C的充电回路。7端通过芯片内部的晶体管对地短路又构成了对C的放电回路,并将引脚2、6端相连引入到片内比较器,便成为一个典型的多谐振荡器,即方波发生器。另外,R3是防止输出短路的保护电阻,R1 用于平衡温度系数。 由于Fout端的电压在0,5V之间,因此可以直接将与89C51的T1口连接。T1口作为计数器,它计得的数值是与环境相对湿度成反比的16进制的频率(相对湿度与频率的对应关系见表3.10。 图3.13 555测量振荡电路 该振荡电路两个暂稳态的交替过程如下:首先电源Vs通过R4、R2 向HS1101 充电,经充电时间后,Uc达到芯片内比较器的高触发电平,约0.67Vs,此时输出引脚3端由高电平突降为低电平,然后通过R2放电,经t放电时间后,Uc下降到比较器的低触发电平,约0.33Vs,此时输出引脚 3端又由低电平跃升为高电平。如此翻来覆去,形成方波输出。其中,充放电时间为: ,充电 =C(R4,R2 )ln2 ,放电 =CR2ln2 因而,输出的方波频率为: ,= 1 / (t充电,t放电) = 1 / [C(R4,2R2 )ln2 ] ] 可见,空气湿度通过 555测量振荡电路就转变为与之呈反比的频率信号,表3.10给出了其中的一组典型测试值。 表3.10 输出频率与相对湿度的对应关系 湿度 频率 湿度 频率 (%RH) (HZ) (%RH) (HZ) 0 7351 60 6600 10 7224 70 6428 20 7100 80 6330 30 6976 90 6186 40 6853 100 6033 50 6728 3.2.3湿度传感器的标定 湿度传感器的感湿特征量与环境气相湿度之间并不存在固有的定量关系,感湿特征量的测量值也不可能直接表征环境气相湿度的确切数值。因此,湿度传感器必须经过定量标定,方可使用。 目前,相对湿度的标定有干湿球法、饱和盐溶液法、双压法、双温法等,我采用静态标定的饱和盐溶液法。此方法可提供工作湿度,在0?以上对湿度传感器进行定量标定。为此,可把封闭容器中饱和盐溶液的平衡蒸汽压作为标准湿度,该湿度的高低,是由饱和盐溶液的种类和平衡温度所决定的,见表3.11。 这种方法在量程为100%RH时,空气湿度传感器的示值误差小于?5%,分辩率为0.1%。但有几点需要注意:(1)水和盐的纯度要在分析纯以上,水必须用去离子水或蒸馏水。(2)盛饱和溶液的容器必须透明而且不漏气,使饱和蒸汽不与外部交换。 (3)容器能加热和搅拌,有利于很快制成饱和溶液的蒸汽环境。 表3.11 通常使用的5种饱和盐溶液平衡相对湿度 温度 HFP/% ? LiCL MgCL2 Mg(NO3) NaCL K2SO4 33.3?0.3 55.6?0.3 75.6?0.2 97.9?0.7 15 12 20 12 33.1?0.2 54.4?0.3 75.5?0.2 97.6?0.6 25 11.3?0.3 32.8?0.2 52.9?0.3 75.3?0.2 97.3?0.5 30 11.3?0.3 32.4?0.2 51.4?0.3 75.1?0.2 97.0?0.4 35 11.3?0.3 32.1?0.2 49.9?0.3 74.9?0.2 96.7?0.4 3.3 CPU单元的设计 3.3.1单片机AT89S52介绍 单片机是整个系统的核心,在此装置中选择8位微处理器AT89C51,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 1(主要特性 ?AT89C51与 MCS-51系列的单片机在指令系统和引脚上完全兼容 ?片内有4K字节在线可重复编程快擦写程序存储器 ?全静态工作,工作范围:0Hz,24MHz ?三级程序存储器加密 ?128?8位内部RAM ?32位双向输入输出线 ?两个16位定时器/计数器 ?五个中断源,两级中断优先级 ?一个全双工的异步串行口 ?间歇和掉电工作方式 ?可编程串行通道 ?片内整荡器和时钟电路 2(功能描述 AT89C51是一种低损耗、高性能、CMOS八位微处理器,片内有 4K字节的在线可重复编程快擦快写程度存储器,能重复写入/擦除解1000次,数据保存时间为十年。它与 MCA-51系列单片机在指令系统和引脚上完全兼容,不仅可完全代替 MCS-51系列单片机,而且能使系统具有许多MCS-51系列产品没有的功能。 AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低了系统成本。只要程序长度小于4K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。工作电压范围宽2.7V,6V,全静态工作,工作频率宽,在0Hz,24MHz内,比8751/87C51等51系列的6MHz,12MHz更具有灵活性,系统能快能慢。 AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。另外,AT89C51还具有MCS-51系列单片机的所有优点。128?8位内部 RAM,32位双向输入输出线,两个十六位定时/计时器,5个中断源,两级中断优先级,一个全双工异步串行口及时钟发生器等。 3(管脚功能 AT89C51单片机为 40引脚芯片,如下图3.14所示。 图3.14 AT89C51引脚图 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据 存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门 ”后,它们被内部上拉为高电平,并用作输入。作为输入,由电流。当P3口写入“1 于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表3.12所示。 表3.12 P3口的第二功能 第一功能标记 第二功能 P3.0 RXD 串行输入口 P3.1 TXD 串行输出口 P3.2 INT0 外部中断0输入 P3.3 INT1 外部中断1输入 P3.4 T0 定时/计数器0外部输入 P3.5 T1 定时/计数器1外部输入 P3.6 WD 外部数据存储器写选通 P3.7 RD 外部数据存储器读选通 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 (振荡器特性: 3 XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 4(芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 本设计的CPU单元电路图如图3.15所示。 图3.15 CPU单元电路图 3.3.2时钟信号设计 时钟引脚为XTAL1、XTAL2。时钟引脚外接晶体与片内的反向放大器构成了一个振荡器,它提供单片机的时钟控制信号。时钟引脚也可外接晶体振荡器。 XTAL1(19脚):接外部晶体的一个引脚。在单片机内部,它是一个反向放大器的输入端。这个放大器构成了片内振荡器。当采用外接晶体振荡器时,此引脚应接地。 XTAL2(18脚):接外部晶体的另一端,在单片机内部接至内部反向放大器的输出端。若采用外部振荡器时,该引脚接收振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。 本系统采用晶振时钟电路。外部晶振以及电容C2和C3构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格要求,但电容的大小多少会影响振荡器频率的高低,振荡器的稳定性,起振的快速性和稳定性。外接晶振时,C1和C2通常选择30pf,晶振采用12MHz。时钟电路如下图3.16所示。 图3.16 时钟电路图 3.3.3复位电路设计 本系统采用的复位电路如图3.17所示。 3.17 复位电路图 本复位电路必须确保系统上电时能够自动复位。上电自动复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为了可靠起见电源稳定后,还要经一定的延时才撤销复位信号以防电源开关或电源插头分-合过程中引起的抖动而影响复位。为了实现这种功能,本设计采用了一种RC定时电路。其时间常数τ=RC,系统上电时,C两端的电压为零,单片机的复位端的电平为高电平,单片机复位,经过4—5个τ后,C两端的电压约等于电源电压,单片机的复位端的电平为低电平,单片机退出复位状态。 3.4显示电路的设计 本系统利用LCD液晶显示屏显示温度、湿度参数。液晶显示屏的第一行显示用户可能需要调节的温湿度上下限值,第二行显示当前测得的温度、湿度值。 3.4.1 液晶显示简介 ?液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ?液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。 ?液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为―1‖,其它的为―0‖,为―1‖的点亮,为―0‖的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 汉字的显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM 对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。 3.4.2 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。 1.1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图3.18所示: 图3.18 1602LCD尺寸图 1602LCD主要技术参数: 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 引脚功能说明 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说 明如表3.13所示: 表3.13引脚接口说明表 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生―鬼影‖,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7,14脚:D0,D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 2 .1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表3.14所示: 表3.14控制命令表 序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示 0 0 0 0 0 0 0 0 0 1 2 光标返回 0 0 0 0 0 0 0 0 1 * 3 置输入模式 0 0 0 0 0 0 0 1 I/D S 显示开/关控制 4 0 0 0 0 0 0 1 D C B 光标或字符移位 5 0 0 0 0 0 1 S/C R/L * * 置功能 6 0 0 0 0 1 DL N F * * 置字符发生存贮器地字符发生存贮器地址 7 0 0 0 1 址 置数据存贮器地址 显示数据存贮器地址 8 0 0 1 读忙标志或地址 计数器地址 9 0 1 BF 写数到CGRAM或DDRAM) 要写的数据内容 10 1 0 从CGRAM或DDRAM读数 读出的数据内容 11 1 1 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。 与HD44780相兼容的芯片时序如下表3.15: 表3.15 基本操作时序表 读状态 输入 RS=L,R/W=H,E=H 输出 D0—D7=状态字 写指令 输入 RS=L,R/W=L,D0—D7=指令码,E=高输出 无 脉冲 读数据 输入 RS=H,R/W=H,E=H 输出 D0—D7=数据 写数据 输入 RS=H,R/W=L,D0—D7=数据,E=高脉输出 无 冲 读写操作时序如图3.19和3.20所示: 图3.19 读操作时序 图3.20 写操作时序 3. 1602LCD的RAM地址映射及标准字库表 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3.21是1602的内部显示地址。 图3.21 1602LCD内部显示地址 例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢,这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H) +10000000B(80H)=11000000B(C0H)。 在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图3.22所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母―A‖的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母―A‖ 图3.22 字符代码与图形对应图 4. 1602LCD的一般初始化(复位)过程 延时15mS 写指令38H(不检测忙信号) 延时5mS 写指令38H(不检测忙信号) 延时5mS 写指令38H(不检测忙信号) 以后每次写指令、读/写数据操作均需要检测忙信号 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置 LCD液晶显示单元电路图如图3.23所示。 图3.23液晶显示单元电路图 3.5按键电路的设计 本设计采用6个独立按键完成对温、湿度上下限的设定。设计7个按键以完 成该功能。7个按键的功能如下: 按键1:进入温度上下限设定; 按键2:进入湿度上下限设定; 按键3:进入上限设定; 按键4:进入下限设定; 按键5:温度或湿度的上限或下限值加1; 按键6:温度或湿度的上限或下限值减1; 按键7:退出温、湿度上下限设定。 按键电路图如图3.24所示。 图3.24 按键电路图 3.5 报警单元的设计 在监测系统中,对于重要的参数一般都设有紧急状态报警系统,以便提醒操作人员注意,或采取紧急措施。其方法就是把计算机采集的数据或记过计算机进行数据处理、数字滤波,标度变换之后,与该参数上下限设定值进行比较,如果高于上限值(或低于下限值)则进行报警,否则就作为采样的正常值,进行显示。 本设计采用峰鸣音报警电路。峰鸣音报警接口电路的设计只需购买市售的压电式蜂鸣器,然后通过单片机的1根口线经驱动器驱动蜂鸣音发声。压电式蜂鸣器约需10mA的驱动电流,可以使用TTL系列集成电路7406或7407低电平驱动,也可以用一个晶体三极管驱动。在图中,P3.2接晶体管基极输入端。当P3.2输出高电平“1” 时,晶体管导通,压电蜂鸣器两端获得约+5V电压而鸣叫;当P3.2输出低电平“0”时,三极管截止,蜂鸣器停止发声。 图3.25是运用三极管驱动的峰鸣音报警电路。 图3.25 三极管驱动的峰鸣音报警电路 4软件设计 主程序由温度采集子程序、湿度采集子程序、键盘输入和显示子程序和报警子程 序组成。本章将列出主程序清单,并详细说明温度、湿度采集子程序。 4.1主程序设计 系统主程序流程图如图4.1所示。 开始 初始化 是 参数设定 设定键是否按下 否 调用温度采集子程序 调用湿度采集子程序 显示采集的温湿度数据 返回 图4.1 主程序流程图 4.2子程序设计 4.2.1温度传感器子程序设计 1 .DS18B20温度采集子程序流程图如图4.2所示。 图4.2 DS18B20温度子程序设计流程图 2温度显示子程序流程图如图4.3所示。 开始 初始化DS18B20 读DS18B20的序列号 Y 检测DS18B20 存在, N 发送跳过ROM指令 温度转换 I=1,等待 DS18B20复位 发送DS18B20编码 读取温度数据 图4.3 温度显示程序流程图 3温度报警子程序流程图如图4.4所示。 开始 总线复位 跳过ROM 所有ds18b20 开始温度转换 延时1秒 设置匹配ROM 发送ROM编号 开始温度转换 Y 是否超限制 温度? N 显示温度 报警 N 所有读取完毕 ? Y 图4.4温度报警流程图 4.2.2湿度传感器子程序设计 湿度采集子程序如图4.5所示。 开始 初始化 设置定时常数 NO 在62.5ms内T0 产生中断吗, YES YES 共产生了20次 中断吗, NO 重设定时时间常数 关中断 将T1计的数放入50H和51H 将其转化成10进制放入5CH和5DH 返 回 图4.5湿度采集子程序 4.2.3按键子程序设计 根据课题要求,用户可以自行设定温、湿度上下限。由此,设计7个按键以完成 该功能。7个按键的功能如下: 按键1:进入温度上下限设定; 按键2:进入湿度上下限设定; :进入上限设定; 按键3 按键4:进入下限设定; 按键5:温度或湿度的上限或下限值加1; 按键6:温度或湿度的上限或下限值减1; 按键7:退出温、湿度上下限设定。 通过按键设定温、湿度上下限的按键流程图如图4.6所示。 图4.6 按键设定温、湿度上下限流程图 4.2.4报警子程序设计 报警子程序流程图如图4.7所示。 报警 置位报警标志 报警持续计数器置初值 启动报警 返回 图4.7 报警子程序流程图 4.2.5显示子程序设计 显示子程序流程图如图4.8所示。 图4.8 显示子程序流程图 5调试结果与总结 本文完成了温度传感器的选择、湿度传感器的设计、数据采集的硬件电路设计和软件编程。此部分与键盘显示部分和报警电路共同构成了整个系统。经过整个系统的研究与设计,最终采用单总线数字式温度传感器DS18B20进行温度采集,采用湿敏电容HS1101对湿度参数进行采集。LCD液晶显示屏对于当前的温度值和湿度值进行实时的显示,可以方便用户直观的了解所测得的温度、湿度环境参数值。用户可使用按键根据自身要求设定温湿度上下限,同时,报警装置可依据用户的设定针对温湿度超限情况进行报警。同时介绍了用单片机AT89C51控制DS18B20和HS1101,着重分析各单元电路的设计,以及各电路与单片机的接口技术。最后还给出系统的软件的设计过程,并进行程序设计。本文是采用模块化的方式进行叙述,对各模块的设计进行了比较详细地阐述。 经过反复调试,温湿度能够正常显示当前值,而且最佳适宜温度值可以有操作人员根据不同作物的需求进行设定,在当前温度偏离所设定的适宜温度?3?时,报警装置蜂鸣器即会启动,该系统基本实现了对温湿度的测量与显示,操作人员可以根据显示指示,来判断当前温湿度是否对作物生长有利。 该系统的不足之处在于没能够实现温湿度的自动调节,由于时间仓促和本人知识有限,在设计原理图时,没考虑清楚显示位数,以至该系统无法显示设定湿度,该系统可以进一步加入温湿度自动调节电路,在当前温湿度超出作物所需的最适宜条件时,启动温湿度调节装置,就可以真正的实现温湿度的自动控制。 为了验证本系统的准确性,条件有限以至于湿度测量无法验证其准确性,在调试时只对环境温度做了十次测量,时间间隔为一个小时,并与温度计所测量的温度值做了比较。记录如表5.1所示: 表5-1 温度测量比较表 测量次数 测量值(?) 温度计显示值(?) 相对误差(?) 1 27.0 27.2 0.2 2 26.5 26.4 0.1 3 26.8 26.9 0.1 4 25.5 25.8 0.3 5 26.9 27.0 0.1 6 25.2 25.0 0.2 7 25.8 26.2 0.4 8 27.0 26.7 0.3 9 26.5 26.4 0.1 10 25.2 25.0 0.2 引起误差的原因,一方面可能是由于受到其他电路的干扰,另一方面可能就是读数估读造成的误差。 仓库温、湿度监测系统的设计工作已经完成了。该系统是针对仓库管理设计的,但是从温湿度传感器的数据采集范围以及用户可设定的上、下限来看,它还可以应用到其它诸如图书馆、楼宇温湿度控制、电教中心温湿度控制等方面,因此用途是比较广泛的。 致谢 经过这段时间的忙碌和工作,本次毕业设计终于完成了,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及同学们的支持和帮助,想要完成这个设计是难以想象的。在此之际,我思绪万千,心情久久不能平静。回顾四年学习期间的一千余个日日夜夜,自己为课题的研究,静心钻研,潜心研究,并取得初步研究成果而感到欣慰。 在这里首先要感谢我的导师徐老师。徐老师平日里工作繁多,但在我做毕业设计的每个阶段,从开题报告到毕设论文,从设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个过程中都给予了我悉心的指导。徐老师对每一次批改都严格把关,指出了文章中出现的问题,多次修改之后我的论文达到了规定标准。在徐老师的帮助下,我的课题的设计任务得以顺利完成。徐老师严谨的治学态度和踏实的工作作风给我留下了深刻的印象,是我学习的榜样。在此,向徐老师致以最诚挚的谢意。同时还要感谢教育和指导过我的所有老师,你们给予我的不仅仅是知识,还有你们对知识孜孜不倦的追求精神和对生活的积极向上态度,使我终身受益。我将在以后的工作中继续努力,不断学习,努力提高自己。路漫漫其修远兮,吾将上下而求索。我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的所有领导、老师、同学、同事和朋友,一并表他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。 正是因为有了你们的支持和鼓励,此次毕业设计才会顺利完成。 同时感谢我的母校兰州理工大学技术工程学院,它是一片培育桃李、播撒知识的芬芳的热土。学校雄厚的师资力量使我学到了丰富的知识;学校严格的基础培训使我掌握了基本的技能;学校淳厚的学风使我意识到知识可以改变命运。在这个大家庭里我学到了许多专业方面的知识和技能,在多样化的实验室里我实际动手操作了许多实验,亲手完成了许多实习项目,这使得我的动手能力有了显著提高,于此同时我对专业知识的掌握更加牢固与灵活。感谢电信学院所有的老师,谢谢你们对我的辛勤培育~ 最后,再次向他们表示我最诚挚的谢意,我将以最大的热情投入到工作中,以报答所以帮助我过的老师和同学。 参考文献 [1] 张永瑞.电子测量技术基础[M].西安:西安电子科技大学出版社.2004.12 [2]宋壮兴.我国气调库建设中的若干问题[J]. 辽宁:辽宁科学技术出版社.2001,5 [3] 张毅刚.新编MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版.2003.7 [4] 杨文龙.单片机原理及应用[M].西安:西安电子科技大学出版社.2006.6 [5] 付家才.单片机控制工程实践技术[M].北京:化学工业出版社.2004.3 [6] 胡红生.石秀东,徐亚栋.气调保鲜自动控制系统的研究[J].2004.6 [7] 徐玮等. C51单片机高效入门[M].北京:机械工业出版社.2006年10月. [8] 潭浩强. 语言设计(第二版)[M].北京:清华大学出版社.1999. [9]何立民主编.单片机应用技术选编(第五册)[M].北京:北京航空航天大学出版社.2000 [10] 何立民. 单片机应用技术选编[M].北京:北京航空航天大学出版社.2004. [11] 李华. MCS51系列单片机实用接口技术[M].北京:北京航空航天大学出版社.1993. [12] 徐亦朱.DS18B20中文手册.美国DALLAS半导体公司.1992. [13] 郭强.液晶显示应用技术[M].北京:电子工业出版社.2000. [14] 杨建等.湿度测量体制历史和现状分析及建议[J].白城:中国白城兵器试验中心,2009.6. [15] 胡红生,石秀东,徐亚栋,气调保鲜自动控制系统的研究[J]. 2004.6 [16] 赵丽娟.基于单片机的温度监测系统的设计与实现.北京:机械制造出版社.2006. [17] 吕泉.现代传感器原理及应用[M].北京:清华大学出版社.2006. 附录 程序清单 /***************************************************/ #include #include sbit rs= P2^0; sbit rw = P2^1; sbit ep = P2^2; unsigned char code dis1[] = {" "}; unsigned char code dis2[] = {""}; void delay(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } bit lcd_bz() { bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0 & 0x80); ep = 0; return result; } void lcd_wcmd(unsigned char cmd) { while(lcd_bz());//判断LCD是否忙碌 rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_pos(unsigned char pos) { lcd_wcmd(pos | 0x80); } void lcd_wdat(unsigned char dat) { while(lcd_bz());//判断LCD是否忙碌 rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_init() { lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); } void main(void) { unsigned char i; lcd_init();// 初始化LCD delay(10); lcd_pos(0x01);//设置显示位置 i = 0; while(dis1[i] != '\0') { lcd_wdat(dis1[i]);//显示字符 i++; } lcd_pos(0x42);// 设置显示位置 i = 0; while(dis2[i] != '\0') { lcd_wdat(dis2[i]);// 显示字符 i++; } //**************温度小数部分用查表法***********// uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0 8,0x09,0x09}; // uchar code dis_7[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 uchar data display[4]={0x00,0x00,0x00,0x00}; //显示单元数据,共3 个数据和一个运算暂用 /*****************11us延时函数*************************/ void del10ms() { uint a,b; for(a=40;a!=0;a--) for(b=248;b!=0;b--); } void delay(uint t) { for (;t>0;t--); } /*******************************************************/ void timer0()interrupt 1 { TH0=0x3C; TL0=0xB0;//定时50ms num++;//记到20就直接停止 } /*******************************************************/ void scankey() { if ( key1==0) { del10ms(); if(key1==0) { TH++; } } if (key2==0) { del10ms(); if(key2==0) { TH--; } } T=display[2]*10+display[1]; -3)TH+3)) } /****************显示扫描函数***************************/ scan() { S=TH/10; G=TH%10; S8=1;S7=1;S6=1;S5=0;S4=1;S3=1;S2=1;S1=1; Disdata=dis_7[display[2]]; delay(200); Disdata=0x00; S8=1;S7=1;S6=0;S5=1;S4=1;S3=1;S2=1;S1=1; Disdata=dis_7[display[1]]; DIN=1; delay(200); Disdata=0x00; S8=1;S7=0;S6=1;S5=1;S4=1;S3=1;S2=1;S1=1; Disdata=dis_7[display[0]]; delay(200); Disdata=0x00; S8=0;S7=1;S6=1;S5=1;S4=1;S3=1;S2=1;S1=1; Disdata=dis_7[S]; delay(200); Disdata=0x00; S8=1;S7=1;S6=1;S5=1;S4=1;S3=1;S2=1;S1=0; Disdata=dis_7[G]; delay(200); Disdata=0x00; S8=1;S7=1;S6=1;S5=1;S4=1;S3=1;S2=0;S1=1; Disdata=dis_7[B1]; delay(200); Disdata=0x00; S8=1;S7=1;S6=1;S5=1;S4=1;S3=0;S2=1;S1=1; Disdata=dis_7[B2]; DIN=1; delay(200); Disdata=0x00; S8=1;S7=1;S6=1;S5=1;S4=0;S3=1;S2=1;S1=1; Disdata=dis_7[B3]; delay(200); Disdata=0x00; } /****************DS18B20复位函数************************/ ow_reset(void) { char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_();//从高拉倒低 DQ=0; delay(50); //550 us DQ=1; delay(6); //66 us presence=DQ; //presence=0 复位成功,继续下一步 } delay(45); //延时500 us presence=~DQ; } DQ=1; //拉高电平 } /****************DS18B20写命令函数************************/ //向1-WIRE 总线上写1个字节 void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); //从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us DQ=val&0x01; //最低位移出 delay(6); //66 us val=val/2; //右移1位 } DQ=1; delay(1); } /****************DS18B20读1字节函数************************/ //从总线上取1个字节 uchar read_byte(void) { uchar i; uchar value=0; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us if(DQ)value|=0x80; delay(6); //66 us } DQ=1; return(value); } /****************读出温度函数************************/ // read_temp() { ow_reset(); //总线复位 delay(200); write_byte(0xcc); //发命令 write_byte(0x4e); write_byte(TH); //发命令 write_byte(RS); delay(200); ow_reset(); write_byte(0xcc); //发命令 write_byte(0x44); delay(200); ow_reset(); write_byte(0xcc); //发命令 write_byte(0xbe); temp_data[0]=read_byte(); //读温度值的第字节 temp_data[1]=read_byte(); //读温度值的高字节 temp=temp_data[1]; temp<<=8; temp=temp|temp_data[0]; // 两字节合成一个整型变量。 return temp; //返回温度值 } // /****************温度数据处理函数************************/ //二进制高字节的低半字节和低字节的高半字节组成一字节,这个 字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩 // //下的低字节的低半字节转化成十进制后,就是温度值的小数部分 /********************************************************/ work_temp(uint tem) { if(tem>6348) // 温度值正负判断 {tem=65536-tem;} // 负温度求补码,标志位置1 display[3]=tem&0x0f; // 取小数部分的值 display[0]=ditab[display[3]]; // 存入小数部分显示值 display[3]=tem>>4; // 取中间八位,即整数部分的值 display[2]=display[3]%100/10; // 取十位数据暂存 display[1]=display[3]%100%10; } /**********************湿度采集函数****************************/ #include "reg51.h" #define uchar unsigned char #define uint unsigned int uchar tem0 , tem1; uchar temp0 , temp1; uint f=0; //初值 /****************************************************************/ * 名称: timer0() * 功能: 定时器1,每50000us中断一次。 * 入口参数: ************************************************************/ ****** void timer0() interrupt 1 { EA =0; TR0=0; TR1=0; TL0=0xFF; //重装值 定时50000us OX4BFFH TH0=0x4B; tem0 = TL1; //读数 tem1 = TH1; TL1=0x00; //定时器1清零 TH1=0x00; f=1; //作标注位 0=1; TR TR1=1; EA=1; } /******************************************************************** ******** * 名称: timer1() * 功能: 计数器,用于计数将555输出的频率,以计数相对湿度。 * 入口参数: ********************************************************************* *******/ void timer1() interrupt 3 //T1中断,表示计数的频率溢出,超出了可测 量的频率范围,显然在这里不可能。所以重新启动。 { EA =0; TR0=0; TR1=0; TL0=0x00; //重装值 定时50000us TH0=0x4C; TL1=0x00; //定时器1清零 TH1=0x00; TR0=1; TR1=1; EA=1; } void Init_timer() { TMOD=0x51; //0101 0001 定时器0在模式1下工作16位定时器,定时方式 定 时器1在模式1下工作16位计数器,T1负跳变加1 TL0=0x00; //定时器0初值 定时50000us TH0=0x4C; TL1=0x00; //定时器1清零 TH1=0x00; //使能定时器0中断 ET0=1; ET1=1; //使能定时器1中断 EA=1; //使能总中断 TR0=1; //开始计时 TR1=1; } void tran() { f = tem1; f = ( f<<8 ) | tem0; f = f * 20; //这里f的值是最终读到的频率,不同频率对于不同相对 湿度。 if(( 5623<= f)&&( f<=6852) )//相对湿度在有效范围内(0,,,100%) { if(( 6734=60) {//记满一秒 number=TH1*256+TL1; number=25000/(number-500); B1=number%1000/100;//百位 B2=number%100/10;//十位 B3=number%100%10;//个位 num=0; TMOD=0x51;//T0 记时 T1计数 TH0=0x3c;//定时50ms TL0=0xB0; TH1=0x00;//计数 TL1=0x00; TR0=1; //开T0 TR1=1;//开T1 ET0=1;//开中断 EA=1;//打开总中断 } work_temp(read_temp()); //处理温度数据 scankey(); scan(); //显示温度值 } } // //***********************结束**************************// 外文资料 Description The AT89C51 is a low-power, high-performance CMOS 8-bit microcomputer with 4K bytes of Flash Programmable and Erasable Read Only Memory (PEROM) and 128 bytes RAM. The device is manufactured using Atmel’s high density nonvolatile memory technology and is compatible with the industry standard MCS-51? instruction set and pinout. The chip combines a versatile 8-bit CPU with Flash on a monolithic chip, the Atmel AT89C51 is a powerful microcomputer which provides a highly flexible and cost effective solution to many embedded control applications. Features: • Compatible with MCS-51? Products • 4K Bytes of In-System Reprogrammable Flash Memory • Endurance: 1,000 Write/Erase Cycles • Fully Static Operation: 0 Hz to 24 MHz • Three-Level Program Memory Lock • 128 x 8-Bit Internal RAM • 32 Programmable I/O Lines • Two 16-Bit Timer/Counters • Six Interrupt Sources • Programmable Serial Channel • Low Power Idle and Power Down Modes The AT89C51 provides the following standard features: 4K bytes of Flash, 128 bytes of RAM, 32 I/O lines, two 16-bit timer/counters, a five vector two-level interrupt architecture, a full duplex serial port, on-chip oscillator and clock circuitry. In addition, the AT89C51 is designed with static logic for operation down to zero frequency and supports two software selectable power saving modes. The Idle Mode stops the CPU while allowing the RAM, timer/counters, serial port and interrupt system to continue functioning. The Power Down Mode saves the RAM contents but freezes the oscillator disabling all other chip functions until the next hardware reset. Block Diagram Pin Description: VCC Supply voltage. GND Ground. Port 0 Port 0 is an 8-bit open drain bidirectional I/O port. As an output port each pin can sink eight TTL inputs. When is are written to port 0 pins, the pins can be used as high impedance inputs. Port 0 may also be configured to be the multiplexed loworder address/data bus during accesses to external program and data memory. In this mode P0 has internal pullups. Port 0 also receives the code bytes during Flash programming, and outputs the code bytes during program verification. External pullups are required during program verification. Port 1 Port 1 is an 8-bit bidirectional I/O port with internal pullups. The Port 1 output buffers can sink/source four TTL inputs. When 1s are written to Port 1 pins they are pulled high by the internal pullups and can be used as inputs. As inputs, Port 1 pins that are externally being pulled low will source current (IIL) because of the internal pullups. Port 1 also receives the low-order address bytes during Flash programming and verification. Port 2 Port 2 is an 8-bit bidirectional I/O port with internal pullups. The Port 2 output buffers can sink/source four TTL inputs. When 1s are written to Port 2 pins they are pulled high by the internal pullups and can be used as inputs. As inputs, Port 2 pins that are externally being pulled low will source current (IIL) because of the internal pullups. Port 2 emits the high-order address byte during fetches from external program memory and during accesses to external data memory that use 16-bit addresses (MOVX @ DPTR). In this application it uses strong internal pull-ups when emitting 1s. During accesses to external data memory that use 8-bit addresses (MOVX @ RI), Port 2 emits the contents of the P2 Special Function Register. Port 2 also receives the high-order address bits and some control signals during Flash programming and verification. Port 3 Port 3 is an 8-bit bidirectional I/O port with internal pullups. The Port 3 output buffers can sink/source four TTL inputs. When 1s are written to Port 3 pins they are pulled high by the internal pullups and can be used as inputs. As inputs, Port 3 pins that are externally being pulled low will source current (IIL) because of the pullups. Port 3 also serves the functions of various special features of the AT89C51 as listed below: Port pin alternate functions P3.0 rxd (serial input port) Port 3 also receives P3.1 txd (serial output port) some control signals for P3.2 ^int0 (external interrupt0) Flash programming and P3.3 ^int1 (external interrupt1) verification. P3.4 t0 (timer0 external input) RST P3.5 t1 (timer1 external input) Reset input. A high on P3.6 ^WR (external data memory write strobe) this pin for two machine P3.7 ^rd (external data memory read strobe) cycles while the oscillator is running resets the device. ALE/PROG Address Latch Enable output pulse for latching the low byte of the address during accesses to external memory. This pin is also the program pulse input (PROG) during Flash programming. In normal operation ALE is emitted at a constant rate of 1/6 the oscillator frequency, and may be used for external timing or clocking purposes. Note, however, that one ALE pulse is skipped during each access to external Data Memory. If desired, ALE operation can be disabled by setting bit 0 of SFR location 8EH. With the bit set, ALE is active only during a MOVX or MOVC instruction. Otherwise, the pin is weakly pulled high. Setting the ALE-disable bit has no effect if the microcontroller is in external execution mode. PSEN Program Store Enable is the read strobe to external program memory. When the AT89C51 is executing code from external program memory, PSEN is activated twice each machine cycle, except that two PSEN activations are skipped during each access to external data memory. EA/VPP External Access Enable. EA must be strapped to GND in order to enable the device to fetch code from external program memory locations starting at 0000H up to FFFFH. Note, however, that if lock bit 1 is programmed, EA will be internally latched on reset. EA should be strapped to VCC for internal program executions. This pin also receives the 12-volt programming enable voltage(VPP) during Flash programming, for parts that require 12-volt VPP. XTAL1 Input to the inverting oscillator amplifier and input to the internal clock operating circuit. XTAL2 Output from the inverting oscillator amplifier. Oscillator Characteristics XTAL1 and XTAL2 are the input and output, respectively, of an inverting amplifier which can be configured for use as an on-chip oscillator, as shown in Figure 1. Either a quartz crystal or ceramic resonator may be used. To drive the device from an external clock source, XTAL2 should be left unconnected while XTAL1 is driven as shown in Figure 2. There are no requirements on the duty cycle of the external clock signal, since the input to the internal clocking circuitry is through a divide-by-two flip-flop, but minimum and maximum voltage high and low time specifications must be observed. Idle Mode In idle mode, the CPU puts itself to sleep while all the onchip peripherals remain active. The mode is invoked by software. The content of the on-chip RAM and all the special functions registers remain unchanged during this mode. The idle mode can be terminated by any enabled interrupt or by a hardware reset. It should be noted that when idle is terminated by a hard ware reset, the device normally resumes program execution, from where it left off, up to two machine cycles before the internal reset algorithm takes control. On-chip hardware inhibits access to internal RAM in this event, but access to the port pins is not inhibited. To eliminate the possibility of an unexpected write to a port pin when Idle is terminated by reset, the instruction following the one that invokes Idle should not be one that writes to a port pin or to external memory. Status of External Pins During Idle and Power Down Modes mode Program memory ALE ^psen Port0 Port1 Port2 Port3 idle internal 1 1 data data data Data Idle External 1 1 float Data data Data Power down Internal 0 0 Data Data Data Data Power down External 0 0 float data Data data Power Down Mode In the power down mode the oscillator is stopped, and the instruction that invokes power down is the last instruction executed. The on-chip RAM and Special Function Registers retain their values until the power down mode is terminated. The only exit from power down is a hardware reset. Reset redefines the SFRs but does not change the on-chip RAM. The reset should not be activated before VCC is restored to its normal operating level and must be held active long enough to allow the oscillator to restart and stabilize. Program Memory Lock Bits On the chip are three lock bits which can be left unprogrammed (U) or can be programmed (P) to obtain the additional features listed in the table below: Lock Bit Protection Modes Program lock bits Protection type Lb1 Lb2 Lb3 1 U U U No program lock features 2 P U U Movc instructions executed from external program memory are disable from fetching code bytes from internal memory, ^ea is sampled and latched on reset, and further programming of the flash disabled 3 P P U Same as mode 2, also verify is disable. 4 P P P Same as mode 3, also external execution is disabled. When lock bit 1 is programmed, the logic level at the EA pin is sampled and latched during reset. If the device is powered up without a reset, the latch initializes to a random value, and holds that value until reset is activated. It is necessary that the latched value of EA be in agreement with the current logic level at that pin in order for the device to function properly. Programming the Flash: The AT89C51 is normally shipped with the on-chip Flash memory array in the erased state (that is, contents = FFH) and ready to be programmed. The programming interface accepts either a high-voltage (12-volt) or a low-voltage (VCC) program enable signal. The low voltage programming mode provides a convenient way to program the AT89C51 inside the user’s system, while the high-voltage programming mode is compatible with conventional third party Flash or EPROM programmers. The AT89C51 is shipped with either the high-voltage or low-voltage programming mode enabled. The respective top-side marking and device signature codes are listed in the following table. Vpp=12v Vpp=5v Top-side mark AT89C51 AT89C51 xxxx xxxx-5 yyww yyww signature (030H)=1EH (030H)=1EH (031H)=51H (031H)=51H (032H)=FFH (032H)=05H The AT89C51 code memory array is programmed byte-bybyte in either programming mode. To program any nonblank byte in the on-chip Flash Programmable and Erasable Read Only Memory, the entire memory must be erased using the Chip Erase Mode. Programming Algorithm: Before programming the AT89C51, the address, data and control signals should be set up according to the Flash programming mode table and Figures 3 and 4. To program the AT89C51, take the following steps. 1. Input the desired memory location on the address lines. 2. Input the appropriate data byte on the data lines. 3. Activate the correct combination of control signals. 4. Raise EA/VPP to 12V for the high-voltage programming mode. 5. Pulse ALE/PROG once to program a byte in the Flash array or the lock bits. The byte-write cycle is self-timed and typically takes no more than 1.5 ms. Repeat steps 1 through 5, changing the address and data for the entire array or until the end of the object file is reached. Data Polling: The AT89C51 features Data Polling to indicate the end of a write cycle. During a write cycle, an attempted read of the last byte written will result in the complement of the written datum on PO.7. Once the write cycle has been completed, true data are valid on all outputs, and the next cycle may begin. Data Polling may begin any time after a write cycle has been initiated. Ready/Busy: The progress of byte programming can also be monitored by the RDY/BSY output signal. P3.4 is pulled low after ALE goes high during programming to indicate BUSY. P3.4 is pulled high again when programming is done to indicate READY. Program Verify: If lock bits LB1 and LB2 have not been programmed, the programmed code data can be read back via the address and data lines for verification. The lock bits cannot be verified directly. Verification of the lock bits is achieved by observing that their features are enabled. Chip Erase: The entire Flash Programmable and Erasable Read Only Memory array is erased electrically by using the proper combination of control signals and by holding ALE/PROG low for 10 ms. The code array is written with all ―1‖s. The chip erase operation must be executed before the code memory can be re-programmed. Reading the Signature Bytes: The signature bytes are read by the same procedure as a normal verification of locations 030H, 031H, and 032H, except that P3.6 and P3.7 must be pulled to a logic low. The values returned are as follows. (030H) = 1EH indicates manufactured by Atmel (031H) = 51H indicates 89C51 (032H) = FFH indicates 12V programming (032H) = 05H indicates 5V programming Programming Interface Every code byte in the Flash array can be written and the entire array can be erased by using the appropriate combination of control signals. The write operation cycle is selftimed and once initiated, will automatically time itself to completion. Table 1 Flash Programming Modes mode RST ^PSEN ALE/^PROG ^EA/Vpp P2.6 P2.7 P3.6 P3.7 Write code data H L H/12V L H H H Read code data H L H H L L H H Bit-1 H L H/12V H H H H Bit-2 H L H/12V H H L L Write lock Bit-3 H L H/12V H L H L Chip erase H L H/12V H L L L Read signature syte H L H H L L L L Note: 1.chip erase requires a 10-ms PROG pulse Figure 3. Programming the Flash Figure 4. Verifying the Flash Flash Programming and Verification Characteristics Symbol parameter min max Units Vpp? Programming enable voltage 11.5 12.5 V Ipp? Programming enable current 1.0 mA 1/Tclcl Oscillator frequency 3 24 MHZ Tavgl Address setup to ^PSEN low 48Tclcl Tghax Address hole after ^PSEN 48Tclcl Tdvgl Data setup to ^PSEN low 48Tclcl Tghdx Data hole after ^PSEN 48Tclcl Tehsh P2.7(^enable)high to Vpp 48Tclcl Tshgl Vpp setup to ^PSEN low 10 us Tghsl? Vpp hole after ^PSEN 10 us Tglgh ^PSEN width 1 110 us Tavqv Address to data valid 48Tclcl Telqv ^enable low to data valid 48Tclcl Tehqz Data float after ^enable 0 48Tclcl Tghbl ^PSEN high to ^busy low 1.0 us Twc Byte write cycle time 2.0 ms Note: 1. Only used in 12-volt programming mode. Flash Programming and Verification Waveforms - High Voltage Mode (VPP = 12V) Flash Programming and Verification Waveforms - Low Voltage Mode (VPP = 5V) Absolute Maximum Ratings* Operating Temperature.................................. -55?C to +125?C Storage Temperature ..................................... -65?C to +150?C Voltage on Any Pin with Respect to Ground .....................................-1.0V to +7.0V Maximum Operating Voltage............................................. 6.6V DC Output Current...................................................... 15.0 mA DC Characteristics TA = - symboparameter condition min max unit l s Vil Input low voltage (except ^EA) -0.5 0.2Vcc-0.V 1 Vil1 Input low voltage(^EA) -0.5 0.2Vcc-0.V 3 Vih Input high voltage Except XTAL1,XTAL2 0.2Vcc+0.Vcc+0.5 V 9 Vih1 Input high voltage (XTAL1,RST) 0.7Vcc Vcc+0.5 V Vol Output low voltage?(ports Iol=1.6mA 0.45 V 1,2,3 ) Vol1 Output low Ioh=3.2mA 0.45 V voltage?(port0,ALE,^PSEIoh=-60uA,Vcc=-5V+102.4 N) % Ioh=-25uA 0.75Vcc Voh Output high voltage?(ports Ioh=-60uA,Vcc=5V+10% 0.9Vcc V 1,2,3 ) Voh1 Output low Ioh=-800UA,Vcc=5V+102.4 V voltage?(port0,ALE,^PSE% N) Ioh=-300uA, 0.75Vcc V Ioh=-80uA 0.9Vcc V Iil Logical 0 input Vin=0.45V -50 uA current(ports 1,2,3) Itl Logical 1 to 0 transition Vin=2V,Vcc=5V+10% -650 uA current(ports 1,2,3) Ili Input leakage 0.45
/
本文档为【仓库温度湿度监测系统的设计&#40;论文&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索