太阳能热水器智能水位水温控制仪的设计(共42页).doc
精选优质文档-倾情为你奉上摘 要本文设计了一个太阳能热水器智能控制系统。它以89C52单片机为核心,配合电阻型4档水位传感器、负温度系数NTC热敏电阻温度传感器、8255A扩展键盘和显示器件 、驱动电路(电磁阀、电加热、报警)等外围器件, 完成对太阳能热水器容器内的水位、水温测量、显示;时间显示;缺水时自动上水,水溢报警;手动上水、参数设置;定时水温过低智能电加热等功能。其中本文第一章主要说明了太阳能热水器智能控制系统的研究现状和本课题的主要任务,第二章对系统的整体结构作了简单介绍,第三章重点介绍了水位水温测量电路,第四章介绍了时钟电路,第五章介绍了显示和键盘电路,第六章对其他电路作了介绍,第七章是对水位测量电路的硬件调试。本系统对于水位传感器、水温传感器的电阻数据的处理均采用独特的RC充放电的方法。它与使用A/D转换器相比,电路简单、制造成本低。特别适用于对水位、水温要求不精确的场合。关键词:太阳能,热水器,控制器,89C52,RC充放电专心-专注-专业AbstractThis article has designed a intelligence control system for solar-powered water heater. It take the 89C52 microcontroller integrated circuit as the core, the coordinate 4 grades of waters level resistance sensor, the negative temperature coefficient NTC thermistor temperature sensor,the 8255A expansion keyboard and the demonstration component, the actuate circuit (solenoid valve, electric heating, warning) and other periphery component, completes to the water level and temperature measure and demonstrate; the time demonstrate; lack of water automatically upstream, the water overflow warn; fixed time intelligencely electric heat.The first chapter of this article mainly explained the research situation of the solar-powered water heater intelligence control system and the primary mission of this topic. The second chapter has made the simple introduction to the overall construction of the system .The third chapter introduced with emphasis on the water level and water temperature metering circuit.The fourth chapter introduced the clock circuit .The fifth chapter introduced the demonstration and the keyboard circuit,.The sixth chapter has made the introduction to other circuits. The seventh chapter is the hardware debugging of the water level measuring circuit.Regarding the process of the water level sensor and water temperature sensor resistance data this system uses the method of the unique RC electric sufficient and discharging. Compared to using the A/D converter, the electric circuit is simple, the production cost is low. Specially it is suitable for the water level and the water temperature measuring requested unprecise situation.Key word: Solar energy, water heater, controller, 89C52, RC electric sufficient and discharge 目 录第一章 引 言1.1 课题的背景意义随着太阳能热水器的迅速推广,广大消费者对太阳能热水器特别是太阳能热水器控制器的要求越来越高,太阳能热水器商家为使自己的产品能在市场上生存和发展,在不断提高太阳能热水器热水性能的同时,也不断加大力度满足消费者对于太阳能使用方便的要求,于是太阳能热水器的智能化程度越来越高。本设计追踪科技应用前沿,跟踪市场,根据论文资料及市场现有产品模型,在加上自己的理解和创意,模仿出了一套智能化的太阳能热水器控制系统。本系统完全跟随太阳能热水器本身智能化程度和成本的要求,为太阳能热水器提供了一套智能化程度高、性能良好、使用方便、经济实惠的配套控制系统。1.2 太阳能热水器和其控制器的发展现状中国太阳能热水产业的发展始于上世纪80年代,当时的市场定位是农村或中小城镇的低收入家庭。90年代后期,住宅商品化的发展以及家庭对热水需求的大幅度增长为太阳能热水器的发展提供了市场空间, 太阳能热水器的生产规模进一步扩大,形成了一些有一定知名度的产品和品牌。自上世纪90年代以来,我国太阳能热水器行业保持了10多年的快速增长 ,2005年 太阳能热水器年生产量为1 500万平方米,是2000年640万平方米的2倍多,到2005年底,我国太阳能热水器保有量超过7500万平方米是2000年2600万平方米的近3倍。目前,我国既是世界上最大的太阳能热水器生产国,同时也拥有世界上最大的太阳能热水器市场。至2005年,全国有1000多家有一定规模的太阳热水器生产企业,年总产值达150多亿元,出口创汇2000万美元,全行业提供约30多万个就业机会,产生了显著的经济、环境和社会效益1。到目前已有许多太阳能品牌为大家耳熟能详,如皇明、桑乐、四季牧歌、力诺等。总之,太阳能热水器已是一件和电视机、洗衣机一样必不可少的家用电器。进步源于竞争,在我国太阳能拥有广阔的市场,当然也有更大的竞争,各大商家为了使自己的产品在市场上立足并长远发展,不断提高太阳能热水器的性能,其中太阳能热水器控制器以其灵活、贴近客户成为商家竞争的热点。目前,各大商家纷纷提高太阳能热水器的智能化程度来满足消费者的需求。许多太阳能热水器的功能有:开机自检、温控上水、强制上水、水位预置、水质设置、水温指示、低水压上水、水位显示、防高温空晒、缺水报警、自动防溢流、 缺水上水、手动上水、故障提示等许多贴近客户需求的功能。目前太阳能控制器的控制器基本实现数字化,以单片机为控制核心的控制系统占领太阳能热水器的主要市场。在市场调查中发现,太阳能控制单片机的型号较多,其中应用最多的是51系列和PIC系列单片机。其基本框图如图1-1所示。图1-1 市场太阳能热水器基本框图2太阳能热水器控制系统可以实现水位显示、水位控制、温度显示、防冻等多种功能,其中对水位的检测、控制,实现水位显示、自动上水、超限报警是太阳能热水器控制系统的核心。目前大多数太阳能热水器的水位传感器都采用分段式水位传感器,因为太阳能热水器对水位精确度的要求不高,并且分段式传感器的成本很低。图1-2是常用的一种分段式热水器传感器的基本原理。对于温度的检测便于用户的使用和控制电加热。目前,温度传感器的应用种类较为繁杂,有直接使用热电阻、热电偶的,也有使用数字温度变送器(如MAX6674)的。在显示方面多采用LED显示或LCD液晶显示。图1-2 一种分段式水温传感器31.3 课题的研究内容本课题主要是对市场现有产品的仿制,要能够实现太阳能热水器的完整功能。本课题以89C52单片机为核心配合传感器、显示器件、电磁阀、电加热器、报警器等外围器件,采集热水器储水箱中的水位、水温信号,通过控制电动机的运转、电加热器加热来控制储水器的水位、温度,并完成水位、水温显示,时间显示,水溢报警等功能。另外配有键盘,可以实现手动上水、手动电加热、设置水位、设置温度等功能。第二章 太阳能热水器智能水位控制系统整体结构介绍太阳能热水器整体结构大致可以分为四大部分:1水位、水温测量电路。这部分用于采集水位水温信号给单片机,是太阳能热水器控制器最关键的部位。2时间、水位、温度显示和键盘电路。这部分用于系统和人的信息交互,有对太阳能热水器状态的直观显示,也有用于人对系统控制的键盘电路。3时钟电路。给系统提供时间显示和参考时间。4驱动电路。包括电加热、上水电磁阀、报警电路,是整个系统的执行部分。系统的整体结构图如图2-1所示。图2-1 太阳能热水器控制系统整体结构图第三章 水位和水温测量电路硬件设计水位测量和水温测量是太阳能热水器控制系统的最重要部分,是实现其他功能的基础,此部分性能好坏将关系到整个系统的优良程度,所以设计一个性能良好的水位、水温测量系统是本设计的重点。3.1 水位测量电路水位测量可以有多种方法,需从性能和成本两方面进行考虑,选择合适的方案。3.1.1 方案比较选择1排阻分档键盘式水位传感器在许多资料中都介绍了一种类似键盘电路的分档水位传感器,其原理图如图3-1所示。图3-1 排阻式水位测试电路示意图4它的工作原理类似于键盘的工作原理,用 5根不锈钢针分别置于水箱内的 四种不同高度的位置,当某个钢针不接触水面时,其输出为高电平;当其与水面接触时则输出低电平。它们的输出接至电子开关CD4069,经过CD4069反向并经74LS244驱动后分别接入89C52的 P10P13引脚。CPU对这些引脚进行判断后 ,送去显示相应的水位值。显示共分 4档 ,每档为满水位的25% 。这种方法简单,易实现,省去了传统的 AD转换器,成本低,虽然不精确但可以满足使用要求4。2RC充放电式水位传感器测量电路这种电路资料较少,但我们在市场上购买的桑乐太阳能的水位和水温传感器就是基于这种原理,其基本形状如图3-2所示。图3-2 桑乐太阳能水位水温传感器外形图从图3-2中我们可以清楚的地看到传感器外形非常简单,一共只有4个端口,其中一个是防冻接口,没有使用,使用的只有3个端口,在可用的三个端口上分别标有公共、水位、水温标志,由此可知测量水位、水温都只用了一个端口。观察传感器可知水位传感器有5个与水接触点,我们从上到下依次命名它们为15触点。我们分别测量了触点不同接法时公共和水位两端口之间的电阻,数据如表3-1所示。由上述测试结果的电阻值得出这样的规律,那就是电阻的并联短接,其原理如图3-3所示。表3-1 输出电阻值表短接方式无短接1、21、2、31、2、3、41、2、3、4、5输出电阻值(k)极大2512.58.66.3图3-3 桑乐太阳能水位传感器原理它的工作原理是,水面每接触一个钢针就会多并联一个电阻,电阻随水位变化而规律的变化。利用单片机的一个口周期性的给电容电路充放电,然后用图3-4 RC充放电式水位传感器测量电路原理图单片机监测电容两端电压的变化,因为电容电压的上升或下降时间t=RC,所以用单片机记录这个时间就能判别电阻的变化,进而转化为水位的变化进行显示及其他动作。3传感器选择RC充放电式水位传感器测量电路,明显优于排阻分档键盘式水位传感器的地方有:(1)接线简单,排阻分档键盘式水位传感器需要四根导线传输水位信号,而RC充放电式水位传感器仅需要两根就能完成,这对于线路较长的太阳能热水器传输信号电路来说能节省相当多的导线资源。(2)给水温测量电路设计带来方便,RC充放电式水位传感器的原理可以同样运用到热电阻温度测量电路中。(3)占用较少的I/O口,仅需两个I/O口就能完成水位检测任务,极大地节约了单片机的I/O 口资源。综上比较可见选用第二种方案较为优越。3.1.2 水位测量电路的具体设计及优化1直接接单片机I/O口检测单片机中的定时器可以提供电压变化时间的纪录,接下来就是如何将电压的变化传递给单片机。一种简单的方案是:用P1.0口给RC电路周期性的充放电,然后用P1.1口监测电容的电平变化,完成计时,这种方案看上去简单易实现,但实际则行不通。按刚才提到的方法接图如图3-5。这样做得到的结果是P1.1的电压一直保持高电平,即电容电压一直保持高点平。这与单片机内部电路有关,单片机的内部电路如图3-6所示。图3-5 直接用I/O检测电容电压测量水位电路原理图图3-6 P1口的位结构5从图中可见,P1口只有高电平和低电平两种状态,当P1.1口为高电平时,将电容端与P1.1连接,VCC会通过内部上拉电阻持续给电容充电,所以监测电容电压一直为高电平。而当将其置低电平时,P1口相当于接地,将会出现相反的情况,其通过地一直给电容放电,电容电压一直低电平。2采取与I/O隔离并用中断监测电容电压的电路这样需要将电容电压与单片机监测端口隔离,采取如图3-7所示电路。 图3-7 水位测量电路1 LM358的应用LM358的正向输入端接电容电压正端,反向输入端与输出端相连,构成电压跟随器。电压跟随器的显著特点就是,输入阻抗高,而输出阻抗低,一般来说,输入阻抗要达到几兆欧姆是很容易做到的。输出阻抗低,通常可以到几欧姆,甚至更低,也就是说电压跟随器有较好的隔离作用,使输出对输入影像较小,正好满足我们的要求6。LM358的输出电压幅度为0 至Vcc-1.5V,而要跟随的电压范围为05V,所以应选用大于+6.5V的电源供电,这里选用+12V单电源供电2LM393的作用给比较器设置+3V的参考电压,将电容电压的指数曲线变成矩形波,波形图如图3-8所示。将参考电压接同相输入端,比较电压接反相输入端,从而实现电容电压在上升到参考电压时比较器产生下降沿信号,作为单片机的外部中断信号。如图3-8所示。根据LM393的特性本设计电源电路提供的电压,选用+5v给其供电。由LM393的内部原理图可知LM393的输出为集电极开路,它的输出高电平与LM393的电源无关,但须接外部电源和上拉电阻。在图3-7所示的水位测量电路中并未有这样的上拉电压电路,是因为单片机内部INT0、INT1口已经具备了这样的电路。INT0、INT1的内部电路类似于P1口如图3-6所示。另外LM393的同相输入端输入和反相输入端输入之间有相互嵌位作用,+5V电源和分压电阻提供的+3v参考带电平对反相输入端输入有嵌位作用,如果不接LM358 电源跟随器而与电容直接相连,显然会影响电容电压的变化,这就是要加电压跟随器进行隔离的原因。图3-8 电容电压与比较器输出信号(仿真和实测)3充电时间的设定和电容的选择电容充电时间的计算公式为: (3-1)T即位电容电压上升时间。编程使P1.0口输出周期性的方波,给电容充放电,方波半周期(充电或放电时间)为,应使方波半周期大于电容电压上升时间,即: (3-2)如果使用单片机主程序一直循环给P1.4口输出方波,方波的周期可以很大,超过几秒甚至几十秒,但是这样主程序就只能干这一项工作,影响单片机的其他工作。所以要用定时器来实现方波输出。这样用定时器就可以用定时中断使P1.4口输出方波,又不影响单片机的其他工作。这样方波的周期就受定时器定时时间的限制。89C52单片机定时器共有4种定时方式,其中定时时间最长的为定时方式1。当定时器/计数器在方式1下做定时器用时,其定时时间计算公式为: (3-3)采用12M的晶振,晶振周期为S,因为采取定时器终端方式,所以N=0XFFFF=65536。所以: (3-4)那么当T=30ms,计数初值为0X8AD0=35536。定时输出30ms其程序如下:void main() initial(); while(1) display();void timer_t1() interrupt 3 TH1=0X8A; /重新给定时器1赋值 TL1=0XD0; P1_4=!P1_4; /充放电变换if(P1_4) /充电开始时启动定时器0 TL0=TH0=0X00; /定时器0赋初值0 TR0=1; /启动定时器0 如图3-6,这里用INT0 中断来监视记录电容变化,内部编程实现计时器对电容电压上升时间的记录,所以可以通过将计时器寄存器里的值显示出来的方式直观显示电容电压结果,来确定合适的电容。以下是编程实现这一过程的结果。表3-2 不同电容大小时计数器寄存器中的值一水位二水位三水位四水位TH0TL0TH0TL0TH0TL0TH0TL02uFA0B48598708360651uF64704950384032340.22uF2180A31728016472由表格数据可见当选用2uF电容时,应需较大的充放电时间,充放电不够充分,所以计数器寄存器中的值大而不准;而当取0.22uF电容式计数寄存器TH0的值仅为1或2,非常不利用区分;当取1uF电容时,数据大小合适,分段明显,所以应选用1uF电容。另外,电容两端的最高电压为+5V,最低电压为0V,所以所选电容的耐压留有一定裕量为最大电压的3倍,所以应选取耐压为15V以上的电容。由表3-2知R最大值为25K,所以: (3-5)又由式3-8得: (3-6)这样由公式3-5、3-6得到。因此取充电和放电时间为30ms。4、编程实现水位处理由于水电阻的波动性和电容的不稳定性等原因,计数器中的数值会有一定的波动,所以需要对数据进行相应的处理显示水位。其中buf1为计数器0寄存器中的值。void LvRead() if(buf1>60) WTLV=1; /显示1水位L3=0;L2=1;L1=1;L0=1; else if(buf1>45) WTLV=2; /显示2水位 L3=1;L2=;L1=1;L0=1; else if(buf1>36) WTLV=3;/ 显示3水位 L3=1;L2=1;L1=0;L0=1; else WTLV=4;/ 显示4水位 L3=1;L2=1;L1=1;L0=0;3.2 水温测量电路水温测量电路的设计包括传感器的选择和测量电路的选择。考虑到性价比等原因,市场上大部分太阳能热水器的温度传感器都选用NTC负温度系数热电阻,本系统也选用这种。下面主要论述测量电路。3.2.1 方案比较选择温度测量方案很多,下面通过比较选择合适的测量方法。1 热电阻A/D转换式水温传感器图3-9 热电阻A/D转换电路原理图A/D转换式水温传感器的原理是,利用热敏电阻的阻值随温度变化的特性,将随温度变化的电阻信号转化为变化的电压信号,然后将这个电压信号经运放放大处理成05V的电压信号,电压信号经A/D转换变成数字信号送给单片机。这种电路测量比较精确,但需用A/D转换器,而A/D转换的价格较贵,会加大成本,另外A/D转换需占用8个数据口和两个片选口及两个控制口共12个I/O口。2RC充放电式热电阻水温传感器测量电路RC充放电式热电阻水温传感器测量电路的原理与前面提到的RC充放电式水位传感器测量电路原理完全相同,只要把水位电阻换成热电阻就可以了。其缺点是不够精确,但成本很低,对于对温度要求不算精确的太阳能热水器系统,完全可以满足我们的需要。另外与A/D转换式温度传感器相比,其优势还是十分突出的:(1)仅需2个I/O口就能完成对温度的检测,节约了单片机的I/O,有利于降低成本。 (2)实现起来也十分简单。3.2.2 水温测量电路的设计及温度计算方法1水温测量电路图3-10 水温测量电路原理图对太阳能热水器中水的温度进行控制及显示,需对热水器水温与出水温度进行检测。对于热水器来说温度控制与显示的精度要求并不高,因此本设计采用负温度系数NTC 热敏电阻作为测温元件,利用NTC 热敏电阻阻值随温度变化而改变的特性实现测温。2水温计算方法NTC 热敏电阻的阻值与温度的准确关系为: (3-7)式中R0 为温度为T0 时的电阻值,T0 为基准温度298.15K, 即25 。为材料系数。R0 与由热敏电阻生产厂家给出7。由式3-7可得: (3-8)由式3-3和式3-4可得; (3-9)经测试T0=25的计数器寄存器中的值=16384。将T0 、值代入上式并用摄氏温度表示时水胆温度为; (3-10)因为89C52单片机无法进行直接的对数运算,按上述公式计算温度值将是十分困难的。在这里查表法是一种经常采用的解决办法,即事先计算出所有可能的计时结果所对应的温度值以表格形式写入控制程序,每次转换完毕后查表得出所对应的温度值。但此种方法需占用较多的程序储存空间本设计采用一次线性插值法对温度与A/D 转换结果之间的关系进行分段线性化,以少量单片机能直接进行的运算的组合去逼近目标函数。图3-11为温度T 与计时器计时结果N之间的关系曲线。图3-11 计时寄存器值N与温度T的关系曲线其中圆滑曲线为实际的T-N关系曲线设计中根据使用要求将曲线在0 -90 范围内分3 段采用图中的3 段直线断代替实际曲线。曲线按式3-10 计算出图中各线段端点坐标值为:N1=1000,T1=90(); N2=7549,T2=43(); N3=20000,T3=20(); N4=56450,T4=0();分段线性化后温度T 的近似计算公式: ,() (3-11),() (3-12),() (3-13)为了能在单片机上进行计算,将以上三式进一步变换成如下形式(其中int为取整函数): T=97-int(N*8/1000), (3-14) T=50-int(N/1000), (3-15) T=30-int(N*5/10000), (3-16)式3-14、 3-15 和3-16 的计算过程仅需通过简单的几步移位与加减法操作即可实现,与通过式3-10 计算并进行四舍五入圆整的结果相比较单片机通过式3-14、 3-15 和3-16计算出的温度值在020 范围内误差不超过2,在20 90 范围内误差不超过1,并且计算出的温度值与A/D 转结果之间保持良好的单调递增关系。3程序实现测量水温程序与水位程序类似,由单片机口给电容发矩形波充放电,然后检测中断计时,根据计数器中的值来判断当前温度。也就是水温测量程序包含中断计时和数据处理两部分。定时器0和1已经被水位测量电路,和充电定时占用,所以这里需可以编程序实现水位和水温中断轮流开关,来轮流使用定时器0,计算温度传感器的上升时间。数据处理公式已在上面列出。下面列出数据处理程序,其中buf3、buf2为中断1得到的定时器1中的值,中断程序见附件。void TmRead() uint val; val=buf3*256+buf2; if(val<7549) TMP=97-int(val*8/1000); else if(val<20000) TMP=50-int(val/1000); else TMP=30-int(val*5/10000); 3.3 水位、水温测量电路的整体设计 由上面的分析知道,两者的电路原理一样,都是用P1口给电容充电,用中断检测电容电压变化。作为充电口P1口的作用相当于电源(充电时)或地(方电时),所以可以用同一个口为两个冲放电回路充电,两个回路是独立的。LM393和LM358 都是双运放、8脚DIP封装,恰好用于水位和水温检测两路。下面图3-12 是实际的水位和水温测量电路图。图3-12 水位和水温测量电路实际电路图以P1.0口作为水位和水温电路的公共充0放电口,以INTO作为水位测量电路的中断检测口,以INT1作为水温测量电路的中断检测第四章 显示电路键盘和显示电路是太阳能热水器水位控制系统与用户的接口,用户通过显示来观察水温、水位、时间等状态值,再根据观察到的值,通过键盘对太阳能热水器进行控制。本章设计了较为合理的键盘和显示电路完成这些功能。4.1 方案选择太阳能热水器系统需要用数码管显示时间和温度,时间精确到分,24或12小时制,这就需要4位显示;而温度显示范围为099度,这又需要2位显示。对于六位显示,采用占用I/O较少的动态扫描方式,也需要六位位选码数据线,八位段选码数据线,共需14个I/O口。键盘采用复用方式,仍需要至少4个I/O口。键盘和显示电路共需18个I/O口,89C52单片机共有4×8个I/O口,而又有8个口有特殊功能,也就是常用的共有3×8个I/O口,该系统的其他设置也还要占用大量I/O口,显然这样太浪费资源。4.1.1 8255A芯片介绍Intel公司生产的可编程并行接口芯片8255A已广泛应用于实际工程中,例如8255A与A/D、D/A配合构成数据采集系统,通过8255A连接的两个或多个系统构成相互之间的通信,系统与外设之间通过8255A交换信息,等等,所有这些系统都将8255A用作为并行接口。 18255A的引脚功能定义8255A的原理结构如图5-1所示。它采用40脚的DIP封装,其引脚定义如表5-1所示。8255A为一可编程的通用接口芯片。它有三个数据端口A、B、C,每个端口为8位,并均可设成输入和输出方式,但各个端口仍有差异: 端口A(PA0PA7):8位数据输出锁存/缓冲器,8位数据输入锁存器;端口B(PB0PB7):8位数据I/O锁存/缓冲器,8位数据输入缓冲器;端口C(PC0PC7):8位输出锁存/缓冲器,8位输入缓冲器(输入时没有锁存)。控制寄存器高四位 低四位端口A端口B端口CB组A组VCCD7D0A1RESETA0PC3PC0PA7PA0PB7PB0PC7PC4GND图4-1 8255A输入输出口和编程模型表4-1 8255A引脚定义引脚名功能连接去向D0D7数据总线(双向)CPURESET复位输入CPU片选信号译码电路读信号CPU写信号CPUA0,A1端口地址CPUPA0PA7端口A外设PB0PB7端口B外设PC0PC7端口C外设VCC电源(+5V)/GND地/在模式控制下这个端口又可以分成两个4位的端口,它们可单独用作为输出控制和状态输入。 端口A、B、C又可组成两组端口(12位):A组和B组,参见图5-2。在每组中,端口A和端口B用作为数据端口,端口C用作为控制和状态联络线。 在8255A中,除了这三个端口外,还有一个控制寄存器,用于控制8255A的工作方式。因此8255A共有4个端口寄存器,分别用A0、A1指定: A1=0,A0=0,表示访问端口A; A1=0,A0=1,表示访问端口B; A1=1,A0=0,表示访问端口C; A1=1,A0=1,表示访问控制寄存器。28255的工作方式图4-2 方式控制字8255A有三种基本工作方式: 方式0:基本的输入/输出 方式1:有联络信号的输入/输出; 方式2:双向传送。A组可采用方式0方式2,而B组只能采用方式0和方式1,这由8255A的方式控制字控制。当向A1=1、A0=1的端口寄存器(即控制寄存器)发送D7=1的控制字时,其作用为方式控制字,各个位的含义如图5-2所示。工作方式介绍方式0 基本的输入/输出 将端口信号线分成4组,分别由方式控制字的D4、D3、D1、D0控制其传送方向,当某位为1时,相应的端口数据线设置成输入方式;当某位为0时,相应的端口数据线设置成输出方式。 特别注意,当将C口的低4位设置成同一传送方向时,则端口C可用作为独立的端口,因此,8255A提供了3个独立的8为端口9。方式1 有联络信号的输入/输出方式2 双向传送本设计用方式0,所以方式1、方式2不再详细介绍。4.1.2 8255A在太阳能热水器控制电路中的作用单片机与8255A的连接如图5-3所示,如图所示分别将8255A的 读、写、复位端口与单片机的读、写、复位端口相连。A0、A1、为8255A的地址口,D0-D9为数据口。P2.5与A1相连,P2.6与A2相连,P2.7与相连,提供8255的端口地址信号。单片机的P0口为8255A提供数据输出输入。8255A共占用单片机11个常用I/O口,比直接显示键盘电路节省了7个I/O口。图5-3 单片机与8255A连接图4.2 显示电路工作原理4.2.1 8255A显示电路的硬件结构。8255A扩展显示及键盘电路如图 5-4所示。图4-4 用8255A扩展的键盘和显示电路在显示电路中用8255A的PA口输出位选信号,通过74F07接LED显示器的片选引脚。7407是TTL门集成的六路输出缓冲器/驱动器,因为本系统采用的是共阴极LED显示器,位选应接低电平,可能有几十毫安的电流输出,而单片机的I/O口最大能承受几毫安的灌电流,所以需用7407来接受较大的输出电流。PB口输出的段选信号,通过74LS245芯片接LED段码引脚,因为8255A的输出电流一般是微安级的,而LED一般则要求5到几十毫安的电流,不能直接驱动LED,而74LS245的高电平输出电流在15毫安左右,可以驱动LED显示。另外74LS245的输出接上拉电阻,帮助驱动显示器。LED显示器是由发光二极管显示子段组成的显示器件。在单片机系统中通常使用的是七段LED显示器,这种显示器有共阴极共阳极两种,在这次设计中选用共阴极LED显示器。共阴极七段LED显示器的管脚如图5-5所示图4-5 共阴极LED显示器的原理和管脚图表4-1 共阴极LED显示器七段码显示字符共阴极七段码显示字符共阴极七段码03FH96F106A7725BB7C34FC39466D5E56DE7967DF71707P7387FU3E4.2.2 8255A实现显示方法8255A 的PA、PB口作为输出口驱动数码管显示;PC口用作输入口监测键盘输入,所以这里须用工作方式0基本输入输出口工作方式,其方式控制字为。8255A的RESET引脚与单片机的RESET引脚直接相连,当单片机复位时,8255A同时复位。单片机的P2.7口与8255A的片选信号 相连,显示期间一直输出低电平,选中8255。在P2.5、P2.6都输出高电平时,即A1=1,A2=1时,=0,单片机输出写信号,访问控制寄存器,将方式控制字通过单片机的P0口与8255A的D0-D7数据口送给8255的控制字寄存器。由图5-3的连接方式知控制字寄存器地址为:0111 1111 1111 1111,即0x7FFF,向该地址写入控制字即可。当P2.5、P2.6都输出低电平时,A1=0,A2=0时,=0,单片机输出写信号,访问端口A,将位选码送出,选中要显示的位,即端口A地址为:0001 1111 1111 1111=0x1FFF,向该地址写入位选码即可。然后将P2.5=0,P2.6=1,即A1=0,A2=1,=0,单片机输出写信号,访问端口B,将段选码送出,保持几毫秒的延时,使LED显示。即端口C地址为:0101 1111 1111 1111=0x5FFF,向该地址写入段选码即可。显示程序如下:/*定义8255A字符型字位口*/#define DIGPORT XBYTE0x1FFF/PA口地址,位选码地址#define WORDPORT XBYTE0X3FFF/PB口地址,段选码地址#define CCOM XBYTE0X7FFFF/控制字寄存器地址#define KPORT XBYTE0X5FFF/PC口,键盘扫描地址void display(void) uchar i; /显示缓冲区首