
太阳水
-
2023年3月17日发(作者:中华社会救助基金会)social benefit.Keywords: Solar Energy Heater , Solar Energy ,Sensor,Singlechip2河南理工大学毕业设计(论文)说明书目 录1 太阳能热水器系统简介 …… 5 1.1 太阳能热水器发展概况 …… 5 1.2 太阳能热水器控制仪的现状 …… 7 1.3 太阳能热水器市场前景分析 …… 8 1.4 太阳能热水器系统功能简介 …… 9 2 单片机系统简介 ……11 2.1 单片机概述……11 2.2 关于单片机的一些基本概 …… 12 2.3 芯片简介…… 15 2.3.1 MSC-51 芯片简介 …… 15 2.3.2 MCS-51 的引脚说明: …… 18 3 传感器的特点及应用 …… 21 3.1 温度传感器及其应用 …… 21 3.2 数字温度传感器 DS18B20 …… 21 4 系统硬件结构与工作原理 …… 24 4.1 系统硬件结构 …… 24 4.2 电加热、电磁阀控制电路 …… 25 4.2.1 光电耦合器 …… 26 4.2.2 双向可控硅 …… 26 4.2.3 电加热、电磁阀控制电路 …… 27 4.3 温度监测与控制电路及其工作原理 …… 28 4.3.1 基本工作原理电路 …… 28 4.3.2 源程序 …… 28 4.4 水位监测及控制电路及其工作原理 …… 38 4.4.1 霍尔效应及霍尔传感器 …… 38 4.4.2 霍尔流量计的工作原理 …… 40 4.4.3 测水量软件流程 …… 41 4.5 显示控制及其实现程序 …… 41 4.5.1 液晶显示器的特点、分类及其他 …… 42 4.5.2 液晶显示器与单片机接口电路 …… 43 4.6 键盘接口电路及其编程 …… 44 4.6.1 键盘接口方式 …… 44 4.6.2 键盘接口电路 …… 45 4.6.3 键盘编程 …… 45 4.7 总模块电路及其编程 …… 46 4.7.1 总模块电路图 …… 46 4.7.2 源程序 …… 473河南理工大学毕业设计(论文)说明书5 仿真与测试…… 58 5.1 利用 proteus 绘制电路图 …… 58 5.2 在 KEIL 中对程序的调试方法 …… 60 5.3 仿真的实现…… 64 致 谢…… 67 参考文献…… 684河南理工大学毕业设计(论文)说明书1 太阳能热水器系统简介1.1 太阳能热水器发展概况能源是人类生存和社会发展的物质基础,一个能够持续发展的社会 应该是一个既能满足当前需要又不危及后代人前途的社会。因而,随着 世界性能源短缺和环境污染的日益严重,节约能源和寻找新的可再生无 污染的能源就摆在了人们的面前。节约能源,尽可能多的用洁净能源代 替高碳量的矿物燃料,也就成为能源和环境建设必须好遵循的基本原则 之一。 太阳能的开发和利用,正是适应了这种需要,据检测,每平方米太 阳能热水器在其寿命期内可减少一吨煤所造成的向大气排放的有害化合 物。因而开发利用太阳能,是减少环境污染的重要选择。1992年联合国 召开了全球与环境发展大会之后,许多国家纷纷将太阳能列入重点开发 项目。 充分开发利用太阳已将它列入建筑节能新技术, 准备推广,太阳热水系统将与被动太阳采暖、光伏器件一起成为21世杨 太阳能建筑结构的一个组成部分。太阳热水要扩展到为工农业生产服务。 太阳能产品本身还存在着使用不方便、不配套、质量档次不高的状况。 同时,由于受自身条件的限制,随着春夏秋冬四季的变化,以及不 同季节不同天气的变化,由于真空集热管太阳能热水器的单一性能,出 水温度和热水存量的不确定性给使用中带来众多不便,同时也造成了对 太阳能的利用效率低下,太阳能热水器也就在一定程度上满足不了不同 用户的不同需要,从而影响了太阳能热水器的长期发展。6河南理工大学毕业设计(论文)说明书1.2 1.2 太阳能热水器控制仪的现状在太阳能热水器的控制方面,其发展就远远落后于太阳能热水器本 身的发展,绝大多数用户对水位(进水)的控制仍然依赖于观察溢流管有 无溢流。但这种方法有明显缺陷:1)在往水箱进冷水时,水箱内存留的热 水往上升,直至从溢流管溢出,这样从溢流口到用户室内这段溢流管所 含容积的温度较高的水白白浪费了,溢流管越长,损失越大。2)进水进 到溢流管溢出为止,即水箱已充满,但当在太阳能的作用下,随着水温 的不断升高,水的体积不断膨胀,将上层温度最高的水从溢流口不断排 出,又造成了大量热能的流失。 为了满足用户的需要,市场上相应也推出了太阳能热水器控制仪。 调查分析 目前市场上的此类装置,存在如下缺陷: 1.智能化程度不高,一方面,人工上水,用户需占用大量时间,使 用十分不方便;另一方面,也造成了对太阳能利用的效率低下; 2.其关键元件水温、水位探头插入水箱中,依靠探头金属与水导电 产生信号来显示水位。太阳能水温升高时,探头上会产生水垢,影响了 探头与水之间的导电性能,整套水位显示系统也就失去了作用,控制仪 也就不能正常使用 ; 3.虽然此类产品种类多,但功能都不齐全,各有侧重,且通用性较 差; 4.交互界面不友好,用户了解信息和操作都不方便。 基于这几点考虑,针对目前市场上的家用太阳能热水器控制系统存 在的缺陷 ,我们做了必要的、有益的调整、改进和完善。以AT89C51单 片机为核心 ,利用霍尔流量计代替传统的金属探头,解决了升温结垢问 题;同时实现对太阳能热水器的水位、补水方式、补水时间的程序化控 制,提高了系统的智能化,同时提高了对太阳能的利用率;通过液晶显 示与用户建立良好的交互界面。7河南理工大学毕业设计(论文)说明书1.3 太阳能热水器市场前景分析在全球能源形势紧张、气候变暖严重威胁经济发展和人们生活健康 的今天,世界各国都在寻求新的能源替代战略,以求得可持续发展和在 日后的发展中获取优势地位。太阳能以其清洁、源源不断、安全等显著 优势,成为关注重点。在太阳能产业的发展中,太阳能热水器的热利用 转换技术无疑是最为成熟的,其产业化进程也较光伏电池、太阳能发电 等产业领先一步。但是目前市场还有待规范,消费群体还有待培育,技 术还有尚须改进,因而对于企业来说还有较大的成长空间。 2005年,中国太阳能热水器年产量已突破1500万平方米,保有量超 过6200万平方米,行业总产值已逾150亿元。2005年中国热水器市场销售 量达到1283.4万台,销售额达到101.6亿元,比上年同期分别增长了20% 与33.7%。 2006年,中国燃气、太阳能及类似能源的器具制造行业累计实现工 业总产值24,125,852千元;实现累计产品销售收入22,071,020千元,比 上年同期增长31.32%;实现累计利润总额为759,646千元,比上年同期增 长54.07%。 2007年1-11月,中国燃气、太阳能及类似能源的器具制造行业累计 实现工业总产值28,248,917千元,比上年同期增长了29.14%;累计实现 产品销售收入27,222,371千元,比上年同期增长了41.02%;累计实现利 润总额955,850千元,比上年同期增长了65.14%。 中国太阳能热水器的年生产量是欧洲的2倍,北美的4倍,现已成为 世界上最大的太阳能热水器生产国和最大的太阳能热水器市场,并仍在 以每年20%-30%的速度递增。但是中国太阳能热水器生产的企业有3500 多家,除皇明、清华阳光、华扬、澳柯玛、北大四季沐歌等10个全国性 品牌因质量、售后服务过硬而市场知名度较高外,行业中存在着大量纷 繁芜杂的杂牌子企业,这种状况不利于行业的长远发展。8河南理工大学毕业设计(论文)说明书1.4 太阳能热水器系统功能简介太阳能热水器控制仪具有功能齐全、智能化强、操作简单方便、人 机交互界面良好等诸多优点:1.4.1 功能上1.太阳能热水器水位测定:通过霍尔双向流量计可较精确的测定目 前太阳能热水器的水量,解决了长期困扰太阳能控制器可靠性的难点。 2.太阳能热水器水温测定与控制:通过温度传感器来探测太阳能热 水器的温度,并通过单片机控制在数码管上以数字形式显示;用户也可 以根据需要选用或不选用辅助电加热器。 3.补水方式选择:用户可以根据自己的需要选择自动补水〔系统一旦 检测到水位低于一定值就自动打开电磁阀补水直到满水位)或手动补水 〔系统根据用户设定的补水时间来进行补水)。同时,也加设了紧急补水 键,(用户第一次按下紧急补水键,就开始补水,系统就会补水到满水位, 若补水当中,用户第二次按下此键,则停止补水)。 3.显示:监测结果以及相应的用户操作,都在液晶上以图形或数字的 方式来显示,直观、明了,用户用起来很方便。 .此外,系统还对多种意外情况做了相应的保护措施。如,当系统检 测到电磁阀打开,而流量计没记数时,则延时2分钟,自动切断电磁阀(防 止用户补水时,自来水公司突然停水);当电加热启动着时,用户如果用 水,则切断电加热,直到用户用水完毕,再重新开启电加热。(防止带电 用水):等等。1.4.2 智能上太阳能热水器满足了不同用户的不同需要,可根据季节不同,用水 状况不同,确定每日的上水时间和次数,充分利用太阳能源;可根据家庭 用水时间和温度,自动进行电补温,克服气候的变化,确保家庭用热水; 一次性设定好后无须操心,由控制器进行自动管理。1.4.3 接口上9河南理工大学毕业设计(论文)说明书单管上下水,一阀多能。它也抛弃了传统的浮球箱来判定水满否, 而是微型化处理,无需溢流管,直接由单片机根据预先设定的满水量判 断并实现自动水满关闭。1.4.4 实用面上现在不光有单个的太阳能热水器用户,也有小区式的太阳能热水器 用户,该设计可以同时满足两种用户的需要。另一方面,控制系统可以 单独使用于太阳能热水器,也可以与可与家用电热水器连用进行控制。10河南理工大学毕业设计(论文)说明书2 单片机系统简介2.1 单片机概述微型计算机的出现与发展已广泛应用到各行各业中,使人们的日常 生活、工作都发生了重大变化,如果没有微型计算机,人们的工作、生 活的质量将受很大的损失。单片微型计算机是微型计算机发展中的一个 重要分支,其独特的结构与性能越来越普及地应用于国民经济的各个领 域。本绪论主要是介绍什么是单片微型计算机:它与微型计算机的区别是 什么;单片微型计算机的发展概况;它的特点和应用。通过对本绪论的学 习,使读者对单片微型计算机有一个初略的认识和了解。 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力 的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称 为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本 功能部件:中央处理器、存储器和 I/O 接口电路等。因此,单片机只需 要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片微型计算机简称单片机。它在一块芯片上集成了各种功能部件: 中央处理器(CP切、随机存取存储器(RAM)、只读存储器(RO峋、定时器/ 计数器、 和各种输入/输出(Fo)接口(如并行FO口、 串行FO口和A/D转换器) 等。由于它的结构与指令功能同步,也经历了四个阶段:第一阶段(1971 一1974年),主要是美国Intel 公司从早先的第一台MCS一4微型计算机, 到后来功能较强的8位微处理器Inte18o08和Fairchild公司的FS微处理 器。这些微处理器虽说还不是单片机,但从此拉开了研制单片机的序幕。 第二阶段(1974一1978)初级单片机阶段,以Intel公司的MCS一48为代表。 这个系列的单片机内集成有8位CPU,并行I/0 口,8位定时器/计数器, 寻址范围不大于4K,且无串行口。第三阶段(1978一1983) 高性能单片机 阶段。在这一阶段的单片机普遍带有串行口,有多级中断处理系统,16 位定时器/计数器。片内ROM,R乃初容量加大,且寻址范围可达64K字节,11河南理工大学毕业设计(论文)说明书有的片内还带有A/D转换器接口。这类单片机有INTEL公司的MCS一51, MOTOROLA公司的6801和ZILOG公司的28等。其中MCS一51系列产品,由于 其优良的性能价格比,特别适合我国的国情,MCS一51系列单片机有可能 稳定相当一段时期。现在,国内的MCS一51热正在升温,随着我国经济建 设步伐的加大,MCS一51系列单片机必将在各个领域大显身手。第四阶段 (1983一现在),8位单片机巩固发展及16位单片机推出阶段。此阶段主要 特征是一方面发展16位单片机及专用单片机:另一方面不断完善高档8位 单片机,改善其结构,以满足不同用户的需要。 MCS一5王系列属高档单片机,近年来,工NTEL公司在提高该系列产 品性能方面作了不少工作,相继推出了不少新产品:8052/8752/8032、低 功耗的CHMOS工艺芯片SOC51/87C51/80C31、具有高级语言编程的芯片 8052AH一BASIC、高性能的C252系列等。在本次设计中我们采用了MCS一 51系列中的89C51来完成产品种的CPU的功能。 在单片机的应用领域中按照单片机的特点,单片机可分为单机引用 和多机应用。单机应用领域有:测控系统、智能仪表、机电一体化产品、 智能接口等。多机应用领域有:功能集散系统、并行多机控制系统、局部 网络系统等。我们所设计的太阳能供热控制系统属于单机应用领域的测 控系统,即利用单片机完成对温度的采集、比较、控制等功能。2.2 关于单片机的一些基本概随着电子技术的迅速发展,计算机已深入地渗透到我们的生活中, 单片机的内容比较抽象,相对已熟悉的模拟电路、数字电路,单片机中 有一些新的概念必须要理解,下面就对这些最基本概念作一说明。 一、总线:一个电路总是由元器件通过电线连接而成的,在模拟电 路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件 之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心, 各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以就 需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器12河南理工大学毕业设计(论文)说明书件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线 的概念,各个器件共同享用连线,所有器件的 8 根数据线全部接到 8 根 公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两 个器件同时送出数据,一个为 0,一个为 1,那么,接收方接收到的究竟 是什么呢?这种情况是不允许的,所以要通过控制线进行控制,使器件 分时工作, 任何时候只能有一个器件发送数据 (能有多个器件同时接收) 。 器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。 在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元 要被分配地址,才能使用,分配地址当然也是以电信号的形式给出的, 由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为 地址总线。 二、数据、地址、指令:之所以将这三者放在一起,是因为这三者 的本质都是一样的──数字,或者说都是一串‘0’和‘1’组成的序列。 换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的 一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不能 由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、 输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更 改,外部的单元能由单片机开发者自行决定,但有一些地址单元是一定 要有的。数据:这是由微处理机处理的对象,在各种不一样的应用电路 中各不相同,一般而言,被处理的数据可能有这么几种情况: 1·地址(如 MOV DPTR,#1000H),即地址 1000H 送入 DPTR。 2·方式字或控制字(如 MOV TMOD,#3),3 即是控制字。 3·常数(如 MOV TH0,#10H)10H 即定时常数。 4·实际输出值(如 P1 口接彩灯,要灯全亮,则执行指令:MOV P1, #0FFH,要灯全暗,则执行指令:MOV P1,#00H)这里 0FFH 和 00H 都是 实际输出值。 三、P0 口、P2 口和 P3 的第二功能使用办法,各端口的第二功能完全 是自动的,不需要用指令来转换。如 P3.6、P3.7 分别是 WR、RD 信号,13河南理工大学毕业设计(论文)说明书当微片理机外接 RAM 或有外部 I/O 口时,它们被用作第二功能,不能作 为通用 I/O 口使用,只要一微处理机一执行到 MOVX 指令,就会有对应的 信号从 P3.6 或 P3.7 送出,不需要事先用指令说明。事实上‘不能作为 通用 I/O 口使用’也并不是‘不能’而是(使用者)‘不会’将其作为 通用 I/O 口使用。你完全能在指令中按排一条 SETB P3.7 的指令,并且 当单片机执行到这条指令时,也会使 P3.7 变为高电平,但使用者不会这 么去做,因为这常常这会导致系统的崩溃(即死机)。 四、程序的执行过程 单片机在通电复位后 8051 内的程序计数器 (PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也 就是说: 在系统的 ROM 中一定要存在‘0000’这个单元, 并且在‘0000’ 单元中存放的一定是一条指令。 五、堆栈 堆栈是一个区域,是用来存放数据的,这个区域本身没有 任何特殊之处,就是内部 RAM 的一部份,特殊的是它存放和取用数据的 方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输 指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即堆栈 指针 SP,每当执一次 PUSH 指令时,SP 就(在原来值的基础上)自动加 1, 每当执行一次 POP 指令,SP 就(在原来值的基础上)自动减 1。由于 SP 中的值能用指令加以改变,所以只要在程序开始阶段更改了 SP 的值,就 能把堆栈设置在规定的内存单元中,如在程序开始时,用一条 MOV SP, #5FH 指令,就时把堆栈设置在从内存单元 60H 开始的单元中。一般程序 的开头总有这么一条设置堆栈指针的指令,因为开机时,SP 的初始值为 07H, 这样就使堆栈从 08H 单元开始往后, 08H 到 1FH 这个区域正是 8031 而 的第二、三、四工作寄存器区,经常要被使用,这会造成数据的浑乱。 当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是能象 普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存 用了。 六、 单片机的开发过程 这里所说的开发过程并不是一般书中所说的 从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的14河南理工大学毕业设计(论文)说明书工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、 地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计 好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也 就被确定了。然后用文本编缉器(如 EDIT、CCED 等)编写软件,编写好 后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简 单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。 运行正确后,就能写片(将程序固化在 EPROM 中)。在源程序被编译后, 生成了扩展名为 HEX 的目标文件,一般编程器能够识别这种格式的文件, 只要将此文件调入即可写片。 七、仿真、仿真机 仿真是单片机开发过程中非常重要的一个环节, 除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主 要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一 块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电 路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份, 对应用电路部份进行测试、调试。仿真有 CPU 仿真和 ROM 仿真两种,所 谓 CPU 仿真是指用仿真机代替目标机的 CPU, 由仿真机向目标机的应用电 路部份供给各种信号、数据,进行调试的办法。这种仿真能通过单步运 行、连续运行等多种办法来运行程序,并能观察到单片机内部的变化, 便于改正程序中的错误。 所谓 ROM 仿真, 就是用仿真机代替目标机的 ROM, 目标机的 CPU 工作时,从仿真机中读取程序,并执行。这种仿真其实就 是将仿真机当成一片 EPROM,只是省去了擦片、写片的麻烦,并没有多少 调试手段可言。常常这是二种不一样类型的仿真机,也就是说,一台仿 真机不能既做 CPU 仿真,又做 ROM 仿真。可能的情况下,当然以 CPU 仿 真好。2.3 2.3 芯片简介2.3.1 MSC-51 芯片简介MCS-51 单片机内部结构15河南理工大学毕业设计(论文)说明书89C51 是 MCS-51 系列单片机的典型产品,我们以这一代表性的机型 进行系统的讲解。 89C51 单片机包含中央处理器、程序存储器(ROM)、数据存储器 (RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数 据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: ·中央处理器: 中央处理器(CPU)是整个单片机的核心部件, 8 位数据宽度的处理 是 器,能处理 8 位二进制数据或代码,CPU 负责控制、指挥和调度整个单元 系统协调的工作,完成运算和控制输入输出功能等操作。 ·数据存储器(RAM) 89C51 内部有 128 个 8 位用户数据存储单元和 128 个专用寄存器单 元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户 只能访问,而不能用于存放用户数据,所以,用户能使用的 RAM 只有 128 个,可存放读写的数据,运算的中间结果或用户定义的字型表。图 2-3-1 89C51 内部结构·程序存储器(ROM): 89C51 共有 4096 个 8 位掩膜 ROM,用于存放用户程序,原始数据或 表格。89C51 ·定时/计数器(ROM): 89C51 有两个 16 位的可编程定时/计数器,以实现定时或计数产生16河南理工大学毕业设计(论文)说明书中断用于控制程序转向。 ·并行输入输出(I/O)口: 89C51 共有 4 组 8 位 I/O 口(P0、 P1、P2 或 P3),用于对外部数据的 传输。 ·全双工串行口: 89C51 内置一个全双工串行通信口,用于与其它设备间的串行数据 传送,该串行口既可以用作异步通信收发器,也可以当同步移位器 使用。 ·中断系统: 中断系统: 中断系统 89C51 具备较完善的中断功能,有两个外中断、两个定时/计数器中 断和一个串行中断,可满足不同的控制要求,并具有 2 级的优先级 别选择。 ·时钟电路: 时钟电路: 时钟电路 89C51 内置最高频率达 12MHz 的时钟电路,用于产生整个单片机运 行的脉冲时序,但 89C51 单片机需外置振荡电容。 单片机的结构有两种类型, 一种是程序存储器和数据存储器分开的形 式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存 储器与数据存储器合二为一的结构, 即普林斯顿(Princeton)结构。 INTEL 的 MCS-51 系列单片机采用的是哈佛结构的形式,而后续产品 16 位的 MCS-96 系列单片机则采用普林斯顿结构。 下图是 MCS-51 系列单片机的内部结构示意图 2-3-2。17河南理工大学毕业设计(论文)说明书图 2-3-2 MCS-51 系列单片机的内部结构示意图2.3.2 MCS-51 的引脚说明:MCS-51 系列单片机中的 8031、8051 及 8751 均采用 40Pin 封装的双 列直接 DIP 结构,右图是它们的引脚配置,40 个引脚中,正电源和地线 两根,外置石英振荡器的时钟线两根,4 组 8 位共 32 个 I/O 口,中断口 线与 P3 口线复用。现在我们对这些引脚的功能加以说明:如图 2-3-3 Pin9:RESET/Vpd 复位信号复用脚,当 89C51 通电,时钟电路开始工作, 在 RESET 引脚上出现 24 个时钟周期以上的高电平,系统即初始复位。初 始化后,程序计数器 PC 指向 0000H,P0-P3 输出口全部为高电平,堆栈 指针写入 07H,其它专用寄存器被清“0”。RESET 由高电平下降为低电 平后,系统即从 0000H 地址开始执行程序。然而,初始复位不改变 RAM (包括工作寄存器 R0-R7)的状态,89C51 的初始态。 89C51 的复位方式可以是自动复位,也可以是手动复位。此外,18河南理工大学毕业设计(论文)说明书RESET/Vpd 还是一复用脚,Vcc 掉电其间,此脚可接上备用电源,以保证单 片机内部 RAM 的数据不丢失。 ·Pin30:ALE/ 当访问外部程序器时, ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE 端将有一个 1/6 时钟 频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当 作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳 过一个脉冲。 如果单片机是 EPROM,在编程其间, ·Pin29: 将用于输入编程脉冲。当访问外部程序存储器时,此脚输出负脉冲选通信号,PC 的 16 位地址数据将出现在 P0 和 P2 口上, 外部程序存储器则把指令数 据放到 P0 口上,由 CPU 读入并执行。 ·Pin31:EA/Vpp 程序存储器的内外部选通线,8051 和 8751 单片机, 内置有 4kB 的程序存储器,当 EA 为高电平并且程序地址小于 4kB 时,读 取内部程序存储器指令数据,而超过 4kB 地址则读取外部指令数据。如 EA 为低电平,则不管地址大小,一律读取外部程序存储器指令。显然, 对内部无程序存储器的 8031,EA 端必须接地。 在编程时,EA/Vpp 脚还需加上 21V 的编程电压。19河南理工大学毕业设计(论文)说明书图 2-3-3 AT89C51 引脚分布图20河南理工大学毕业设计(论文)说明书3 传感器的特点及应用3.1 温度传感器及其应用温度传感器是通过物体随温度变化而改变某种特性来间接测量的。 不少材料、元件的特性都随温度的变化而变化,所以能做温度传感器的 材料相当多。温度传感器防温度变化而引起物理参数变化的有:膨胀、电 阻、电容、热电动势、磁性能七频率、光学特性及热噪声等等。随着生 产的发展,新型温度传感器还会不断地涌现。 由于工业生产中温度测量的范围极宽,从零下几百度到零上几千度, 而各种材料做成的温度传感器只能在一定的温度范围内使用。常用的测 温传感器的种类与测温范围如表2一2所示。温度传感器与被测介质的接 触方式分为两大类:接触式与非接触式。接触式温度传感器需要与被测介 质保持热接触,使两者进行充分的热交换而达到同一温度。这一类传感 器主要有电阻式、热电偶、PN结温度传感器等。非接触式温度传感器无 需与被测介质接触而是通过被测介质的热辐射或对流传到温度传感器, 以达到测温的目的。3.2 3.2 数字温度传感器 DS18B20数字温度传感器 DS18B20 其外形如小功率三极管。 因每一个 DS18B20 都有一个自己特有的 64 位芯片 ID 序列号,可以在一条信号线上挂接任 意多个数字式传感器。表 1 为分辨率 0.0625°C 时温度/数字量关系表。 2.1DS18B20 特点 (1)独有的 1-Wire 接口,只需一个端口管脚进行通信; (2)可简单构成分布式多分支温度测量应用系统; (3)不需要任何外围元件; (4)可通过数据线进行寄生电源供电; (5)测温范围为-55~+125℃; (6)测量精度在-10~+85℃测温范围内时为 0.5℃;21河南理工大学毕业设计(论文)说明书(7)可编程 9~12 位数字温度计,相应分辨率为 0.5~0.0625°C,最 大转换时间分别为 93.75ms 与 750ms; (8)用户可定义非易失性温度报警设置及识别。 2.2DS18B20 的工作时序与命令 DS18B20 采用严格的单总线通信协议,以保证数据的完整性。该协议 定义了几种信号类型:复位脉冲、应答脉冲、读/写0和读/写1。所有 这些信号,除了应答脉冲以外,都由主机发出同步信号。命令和数据都 是字节的低位在前。单总线系统中主设备首先对 DS18B20 进行初始化, 以确认总线上有 DS18B20 在线并做好了操作的准备,再可执行 ROM 功能 命令,然后方可执行存储器功能命令以进行启动温度转换及存储器操作 等控制功能。初始化时序中,主机先通过拉低总线至少 480μs,产生复 位脉冲信号(Tx),接着主机释放总线,并进入接收模式(Rx),上拉 电阻将单总线拉高; 之后, 在单总线器件检测到上升沿后, 延时 15~60μs, 接着通过拉低总线 60~240μs,以产生在线应答脉冲。22河南理工大学毕业设计(论文)说明书DSl8B20 的 ROM 功能命令如表 2 所示。 DSl8B20 的存储器功能命令如表 3 所示。23河南理工大学毕业设计(论文)说明书4 系统硬件结构与工作原理系统由硬件和软件两部分组成:系统的硬件:1)温度传感及控制电 路;2)水位传感及控制电路;3)键盘输入电路;4)液晶显示电路四部分 组成。软件编写主要实现自动监测及控制温度和水位,以及实现建立良 好的人机交互界面。4.1 4.1 系统硬件结构AT89C51 单片机共有内共有 4 组 8 位 I/O 口(P0、 P1、P2 或 P3),用 于对外部数据的传输。在控制器中各个端口的工作分配如下: P0口接RESPACK-8排阻,P1.0-P1.3接四位数码管,P2口接键盘,用于水 位开关控制阀,P3.7接DS18B20温度传感器,P3.5和P3.6接蜂鸣器。 图4-1-1为89C51单片机管脚分布图。 图4-1-2为系统结构示意图。 图4-1-3 为系统与太阳能热水器配合的工作示意图。图4-1-189C51 管脚分布24河南理工大学毕业设计(论文)说明书图4-1-2系统结构示意图图4-1-3控制系统的工作示意图电加热、 4. 2 电加热、电磁阀控制电路对电磁阀以及电加热的控制,由于是通过微信号控制大电流,大功 率,所以必须在开关和单片机之间进行很好的隔离,以免大电流信号影25河南理工大学毕业设计(论文)说明书响单片机正常工作。4.2.1 光电耦合器光电耦合器是一种以光为媒介来传输电信号的光电器件,通常是由 发光器件(可见光LED或红外LED)和受光器(光电半导体管)封装在同一管 壳内组成。当输入端加上电信号时,发光器便发出光线,受光器因受到 光照而产生光电流,并从输出端r xiaoshu2; unsigned char xiaoshu; bit fg=1; //测量到的温度的整数部分 //小数第一位 //小数第二位 //两位小数 //温度正负标志unsigned char button; //最近一次被按下的建 unsigned int temp; //温度设定值void Delay(unsigned int tc) {while( tc != 0 ) {unsigned int i; for(i=0; i0;i--)30//输出小数点后第一位河南理工大学毕业设计(论文)说明书for(j=200;j>0;j--); temp=P2; temp=temp & 0x0f; if (temp!=0x0f) { temp=P2; temp=temp & ;0x0f switch(temp) { case 0x0e: button=0; break; case 0x0d: button=3; break; case 0x0b: button=6; break; case 0x07: button=9; break; } temp=P2; temp=temp & 0x0f; while(temp!=0x0f) { temp=P2; temp=temp & 0x0f;31河南理工大学毕业设计(论文)说明书} } } P2=0xff; //P2^5=0; jian1=0; temp=P2; temp=temp & 0x0f; if (temp!=0x0f) { for(i=60;i>0;i--) for(j=200;j>0;j--); temp=P2; temp=temp & 0x0f; if (temp!=0x0f) { temp=P2; temp=temp & 0x0f; switch(temp) { case 0x0e: button=1; break; case 0x0d: button=4; break; case 0x0b: button=7;32河南理工大学毕业设计(论文)说明书break; case 0x07: button=10; break; } temp=P2; temp=temp & 0x0f; while(temp!=0x0f) { temp=P2; temp=temp & 0x0f; } } } P2=0xff; //P2^6=0; jian2=0; temp=P2; temp=temp & 0x0f; if (temp!=0x0f) { for(i=60;i>0;i--) for(j=200;j>0;j--); temp=P2; temp=temp & 0x0f; if (temp!=0x0f) { temp=P2;33河南理工大学毕业设计(论文)说明书temp=temp & 0x0f; switch(temp) { case 0x0e: button=2; break; case 0x0d: button=5; break; case 0x0b: button=8; break; case 0x07: button=11; break; } temp=P2; temp=temp & 0x0f; while(temp!=0x0f) { temp=P2; temp=temp & 0x0f; } } } } void Set_Temp() {34河南理工大学毕业设计(论文)说明书unsigned int button1=10,button2=10; key(); if(0==button) { P1=P1&0xfe; P0=seg7code[10]; //负号Delay(8); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[temp/10]; //输出十位数 Delay(8); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[temp%10]|0x80; //输出个位和小数点Delay(8); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[10]; Delay(4); P1=P1|0x0f; } while(button==10) { while(1) { P1=P1&0xfe; P0=seg7code[10]; //负号 //输出小数点后第一位Delay(8); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[button1]; //输出十位数 Delay(8); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[button2]|0x80; //输出个位和小数点Delay(8); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[10]; Delay(4); P1=P1|0x0f; key();35//输出小数点后第一位河南理工大学毕业设计(论文)说明书if(button!=10) { button2=button1; button1=button; P1=P1&0xfe; P0=seg7code[10]; //负号Delay(8); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[button1]; //输出十位数 Delay(8); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[button2]|0x80; //输出个位和小数点Delay(8); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[10]; Delay(4); P1=P1|0x0f; key(); if(button1!=button) { button1=button2; button2=button; P1=P1&0xfe; P0=seg7code[10]; //负号 //输出小数点后第一位Delay(8); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[button1]; //输出十位数 Delay(8); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[button2]|0x80; //输出个位和小数点Delay(8); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[10]; Delay(4); P1=P1|0x0f; }36//输出小数点后第一位河南理工大学毕业设计(论文)说明书} key(); if(11==button) { break; temp=button1*10+button2; } } } } void main() { while(1) { Set_Temp(); Led(); if(xdata>50)/*下水*/ { P3^0=1;/*下水电机*/ P3^1=0;/*上水电机*/ } if(xdata 而玻璃内表面还涂有一层定向层,很易被破坏。42河南理工大学毕业设计(论文)说明书3)防止受潮。由于LCD是低压、微功耗的,液晶材料电阻率极高。 所以由于潮湿造成的玻璃表面导电就足以影响显示。严防静电。由于LCD 工作电压极低,内阻很大,静电会导致串扰现象 。4.5.2 液晶显示器与单片机接口电路液晶显示器件与其控制器件、驱动电路是紧密相关的,显示器必须 通过控制器、驱动器才能实现显示。图形液晶显示模块的应用,实际上 就是其配套的控制电路的应用。 二、 液晶显示控制器与89C51的接口电路 在内藏控制器的液晶显示模块中,己经完成了控制器与液晶显示驱 动器显示缓冲区的接日工作, 图4-5-1则是液晶显示模块与89C51的接口电 路。图4-5-1液晶显示模块与89C51的接口电路由于在学校实物设计的局限性,实际采用数码管焊电路。电路图如 下图4-5-2所示。43河南理工大学毕业设计(论文)说明书图4-5-2 数码管与89C51的接口电路4.6 键盘接口电路及其编程4.6.1 键盘接口方式P2.0-P2.4 接按键,用于对热水器的温度和水位控制。44河南理工大学毕业设计(论文)说明书4.6.2 键盘接口电路图 4-6-1 键盘接口电路图4.6.3 键盘编程源程序如下: /*键盘扫描模块*/ unsigned char button=6; //最近一次被按下的建 sbit HOTUP=P2^0;45//加热键河南理工大学毕业设计(论文)说明书sbit WATER=P2^1; sbit SETTEMP=P2^2; sbit TEMPADD=P2^3; sbit TEMPSUB=P2^4; void key() { Delay(100); if(HOTUP==0)button=1; if(WATER==0)button=2; if(SETTEMP==0)button=3; if(TEMPADD==0)button=4; if(TEMPSUB==0)button=5; }//加水键 //设置温度键 //温度增加 //温度减小4.7 总模块电路及其编程4.7.1 总模块电路图总模块电路图如下如图 4-7-1:46河南理工大学毕业设计(论文)说明书图4-7-1太阳能热水器总模块电路图4.7.2 源程序源程序如下: #include code unsigned char seg7code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //显示段码 ////////////////////////////////////////////////////////////// /*测水位模块*/ sbit waterfull=P3^0; sbit water30=P3^1; //水满 //30L水位////////////////////////////////////////////////////////////// /*测温模块*/ sbit TMDAT = P3^7; //DS18B20的数据输入/输出脚DQ unsigned int sdata; unsigned char xiaoshu1; unsigned char xiaoshu2; unsigned char xiaoshu; bit fg=1; //测量到的温度的整数部分 //小数第一位 //小数第二位 //两位小数 //温度正负标志 //延时程序void Delay(unsigned int tc) {while( tc != 0 ) {unsigned int i; for(i=0; i0;useconds--);47// 延时河南理工大学毕业设计(论文)说明书} // // // unsigned char { unsigned char TMDAT = 0; Delay2(45); TMDAT = 1; Delay2(3); presence = TMDAT; Delay2(25); return(presence); // 0=presence, 1 = no part } unsigned char { unsigned char unsigned char i; value = 0; read_byte(void) presence; // pull DQ line low // leave it low for 480us // allow line to return high // wait for presence // get presence signal // wait for end of timeslot // presence signal returned 初始化ds1820 返回1 ds1820存在 0 ds1820不存在 ow_reset(void) //ds18b20复位for (i=8;i>0;i--) { value>>=1; TMDAT = 0; start timeslot TMDAT = 1; high Delay2(1);48// pull DQ low to// then return河南理工大学毕业设计(论文)说明书if(TMDAT)value|=0x80; Delay2(6); of timeslot } return(value); } void write_byte(unsigned char val) { unsigned char i; for (i=8; i>0; i--) at a time { TMDAT = 0; start timeslot TMDAT = val&0x01; Delay2(5); remainder of timeslot TMDAT = 1; val=val/2; } Delay2(5); } // hold value for // pull DQ low to // writes byte, one bit // wait for restvoid tmstart(void) { ow_reset(); Delay(2); //复位 //延时//发送ds1820 开始转换write_byte(0xcc);//跳过序列号命令49河南理工大学毕业设计(论文)说明书write_byte(0x44); }//发转换命令 44H,//********温度存在全局变量 sdata中.小数存在xiaoshu中******** void tmrtemp(void) { unsigned char a,b; ow_reset(); Delay(2); //复位 //延时 //跳过序列号命令 //发送读取命令 //读取温度write_byte(0xcc); write_byte(0xbe); //a = 0x03; a = read_byte(); //b = 0x0a; b = read_byte(); fg=1; if(b>0x7f) { //a=~a;//读取低位温度//读取高位温度//最高位为1时温度是负//补码转换,取反加一if(a==0x00)//修改程序,把补码转换成为源码 b=b-1; a=a-1; a=~a; b=~b; //b=~b+1; fg=0; } sdata = a/16+b*16; //整数部分 //读取温度为负时fg=0xiaoshu1 = (a&0x0f)*10/16; //小数第一位50河南理工大学毕业设计(论文)说明书xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位 xiaoshu = xiaoshu1*10+xiaoshu2; //小数两位 } void Read_Temp(void) { tmstart(); Delay(5); tmrtemp(); } //如果是不断地读取的话可以不延时 // //读取温度,执行完毕温度将存于TMP中 // /*测温模块*/////////////////////////////////////////////////////////////// /*显示模块*/ void Led() {int i; Delay(400); for(i=0;i<3;i++) { if(fg==1) { P1=P1&0xfe; P0=seg7code[sdata/10]; Delay(5); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[sdata%10]&0x7f; //输出个位和小数点 Delay(5); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[xiaoshu1]; //输出小数点后第一位 //输出十位数 //温度为正时显示的数据Delay(5); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[xiaoshu2]; Delay(4); P1=P1|0x0f; }51//输出小数点后第二位河南理工大学毕业设计(论文)说明书if(fg==0) {//温度为负时显示的数据P1=P1&0xfe; P0=seg7code[10]; //负号Delay(5); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[sdata/10]; //输出十位数 Delay(5); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[sdata%10]&0x7f; //输出个位和小数点Delay(5); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[xiaoshu1]; Delay(4); P1=P1|0x0f; } } Delay(400);//显示水位 for(i=0;i<3;i++) { if(water30!=0&waterfull!=0)//水位低于30L显示030{ P1=P1&0xfe; P0=seg7code[0]; //0 //输出小数点后第一位Delay(5); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[3]&0x7f; //3 Delay(5); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[0]; //0Delay(5); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[10]; Delay(4); P1=P1|0x0f; }52//-河南理工大学毕业设计(论文)说明书if(water30==0&waterfull!=0)//水位超过30L但是没满显示030+ { P1=P1&0xfe; P0=seg7code[0]; //0Delay(5); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[3]; //3 Delay(5); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[0]; //0Delay(5); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[1]; Delay(4); P1=P1|0x0f; } if(water30==0&waterfull==0)//水位全满 { P1=P1&0xfe; P0=0x8e; //F //1Delay(5); P1=P1|0x0f; P1=P1&0xfd; P0=0xc1; //U Delay(5); P1=P1|0x0f; P1=P1&0xfb; P0=0xc7; //LDelay(5); P1=P1|0x0f; P1=P1&0xf7; P0=0xc7; //LDelay(4); P1=P1|0x0f; } } } /*显示模块*/ //////////////////////////////////////////////////////////////53河南理工大学毕业设计(论文)说明书/*键盘扫描模块*/ unsigned char button=6; //最近一次被按下的建 sbit HOTUP=P2^0; sbit WATER=P2^1; sbit SETTEMP=P2^2; sbit TEMPADD=P2^3; sbit TEMPSUB=P2^4; void key() { Delay(100); if(HOTUP==0)button=1; if(WATER==0)button=2; if(SETTEMP==0)button=3; if(TEMPADD==0)button=4; if(TEMPSUB==0)button=5; } /*键盘扫描模块*/ ////////////////////////////////////////////////////////////// /*设定温度模块*/ unsigned int temp=50; //温度设定值 //设定温度时的个位和十位 //设定温度 //加热键 //加水键 //设置温度键 //温度增加 //温度减小unsigned int button1=10,button2=10; void Set_Temp() { key(); while(3==button) { button=6; while(1)54河南理工大学毕业设计(论文)说明书{ ///////////////////// key(); if(4==button)temp++; if(5==button)temp--; P1=P1&0xfe; P0=seg7code[10]; //负号Delay(8); P1=P1|0x0f; P1=P1&0xfd; P0=seg7code[temp/10]; //输出十位数 Delay(8); P1=P1|0x0f; P1=P1&0xfb; P0=seg7code[temp%10]&0x7f; 数点 Delay(8); P1=P1|0x0f; P1=P1&0xf7; P0=seg7code[10]; Delay(4); P1=P1|0x0f; button=6; //////////////////////// key(); if(3==button) { button=6; break; } } } //输出小数点后第一位 //输出个位和小} /*设定温度模块*/55河南理工大学毕业设计(论文)说明书////////////////////////////////////////////////////////////// /*控制模块*/ sbit MOTO=P3^5; sbit JIARESI=P3^6; void PID() { if(1==button){JIARESI=0;MOTO=1;} if(2==button){MOTO=0;JIARESI=1;} if(sdata👁️ 阅读量:0
© 版权声明:本文《太阳水》内容均为本站精心整理或网友自愿分享,如需转载请注明原文出处:https://www.zastudy.cn/wen/1686539726a285926.html。