毕业设计(论文)微机控制LED点阵图文显示系统的设计.doc
目录摘要2一、绪言3(一)LED点阵显示屏的特点3二、微机控制_LED点阵显示系统的总体设计3(一)微机控制LED点阵显示系统的基本构成3(二)微机控制LED点阵显示系统的功能及工作过程4三、主控电路6(一)主CPU电路6(二)副CPU电路10(三)异步双口RAM12四、显示单元15(一)显示单元电路15(二)在电路设计及调试中的几个问题17五、主控软件18(一)软件的基本构成18(二)软件的具体实现191.汉字字库的提取202.通信控件21六、附属单元及可靠性预计25(一)附属单元251.打铃控制开关25(二)点阵显示屏的可靠性设计27七、总结与展望28(一)总结28(二) 展望28参考文献29微机控制LED点阵图文显示系统的设计贾朋生摘要:本文提出了一种实现微机控制LED点阵显示屏的新方案。论文从上位机信息的输入开始,到显示屏的最终显示,详细的给出了电路的设计方案和软件流程。并根据LED显示系统中的具体技术难点讨论了相应的解决方案。 在总体设计上,运用集散控制理论,在统一协调的基础上进行分级递阶控制,并通过功能分散、危险分散来达到设计的优化。在此基础上,为了提高显示数据的传送速度,本文采用双端口静态随机存储器(Dual-Port SRAM)使双CPU共享数据区,实现大量数据的高速交换。多单片机技术和嵌入式结构的运用,使系统实现多机并行处理和LED显示单元的模块化。整个系统采用了RS-485通信标准实现批量数据的快速准确传送。关键词:LED显示屏;显示单元;单片机;双口RAM;可靠性中图分类号:TP391The microcomputer controls the LED lattice chart article display system the design Jia Peng shengAbstract:This article puts forward with a kind of new scheme on the LED display screen controlled by microcomputer. From input of information of epigyny machine to output of ultimate screen display, the various design schemes and software flow charts are studies in detail. Further more, relative measures are taken according to concrete technology difficulty of LED display system.Based on the Total Distributing Control Theory and classified step by step in uniform and harmonious style, the whole design finally achieves optimization through function distribution and danger distribution. In order to improve transmission speed of display data, Dual-Port SRAM is used and double CPU is able to share with data unit.As a result, a great deal of data realizes exchange in high speed. The system can complete modularization of parallel processing and LED Display unit by use of multisinglechip technology and embedded structure. RS-485 communication standard advances batch data intransmitting fast and exactly.Key Word:LED display reliability,screen, display unit,Dual-Port SRAM一、绪言 LED点阵显示屏具有美观的画面、灵活的内容更换、较低的功耗、较长的寿命等优点,被广泛运用在商场、街道、广场、车站和机场等人群密集或流动量大的场合,用来及时的传播信息和电视,尤其用来播放广告、产品介绍等更有良好的经济效益和社会效益。 其主要原理是将要显示的图文信息首先进行数字化处理,使图文信息转换成相应的数字化视频信号,经过数字通信系统将数字视频信号传输到LED显示屏显示缓存中,由显示单元控制电路读取相应的显示信息进行显示。由于LED显示屏在进行图文显示时,其显示方式丰富多变,因此其相应的视频控制模块也十分复杂,一般分为单色显示屏和彩色显示屏两大类。 随着科学技术的发展以及制造工艺的进步,LED显示屏也在不断的进步和完善。高新技术使LED显示系统与以前相比有了更为优异的性能。当前的LED显示系统主要有以下特点:1.先进的分布式扫描技术 显示部分的扫描采用扫描控制技术,显示部分被分成不同的单元,独立进行扫描。2.高性能的通信接口 显示屏与控制微机之间一般可靠的通信距离大于1000米,可抗高电压的静电放电击穿。采用RS-485或RS-422工业总线。3.可视性好 采用高性能LED晶片构成的显示屏具有高亮度、色彩鲜艳、视角大,寿命长(不少于50,000小时),稳定性高,响应速度快等特点。4.易于安装 采用显示单元板或显示单元箱体,可根据用户要求和应用场所要求任意组装成所需要的显示屏尺寸,并且便于安装和维护。二、微机控制_LED点阵显示系统的总体设计(一)微机控制LED点阵显示系统的基本构成 微机控制LED点阵显示系统主要由主控计算机、通信部分、控制部分、显示部分和附属部分五大部分构成。系统的基本组成如图2-1所示。主控微机通信部分I(通信转换)主控部分通信部分II附属功能控制部分显示部分 图2-1 系统的基本组成框图一般以IBM/PC及其兼容机作为系统的主控微机,用于接收用户的输入信息并向显示屏发送数据。整个系统的通信部分分为两个模块,模块I用来进行通信标准的转换即把RS-232总线标准转换为RS-485总线标准。模块II用来接收RS-485总线标准的数据并向显示模块发送显示数据。控制部分作为显示屏的核心则主要进行系统进程的控制、数据的存储发送以及外部控制信号的输出。显示部分根据需要由一定数量的显示单元构成,按显示单元划分为若干显示区域,并采用分布式扫描技术,各单元独立进行扫描显示。附属功能控制部分主要是执行如打铃控制信号的输出等一些附属控制功能,它是在控制部分的管理、监控下完成其功能的。(二)微机控制LED点阵显示系统的功能及工作过程 微机控制LED点阵显示系统主要用在公共场所显示文字信息。用户在微机上通过控制软件将编辑好的文字和相应的控制命令经通讯线路传至系统的控制部分,显示屏即可根据用户选择的方式逐页循环显示用户编辑好的文字。本系统还具有脱机显示方式。用户将显示内容传至显示部分后,计算机就可以不再介入显示过程,显示系统就可以根据用户设定的模式显示所要显示的信息。显示屏工作过程如下:用户将待显示的信息输入主控计算机中,由计算机中的控制软件把输入的信息转换成相应的数据,经微机串行接口发送到RS-232C数据总线上1。通信转换电路将RS-232标准的数据转换成RS-485标准,以便进行远距离传输。主控部分的通信接口接收RS-485标准的信号后,将其转换成CMOS电平信号存储在缓冲区内。主控CPU识别控制命令及显示数据并执行相应的操作。副CPU则从显示缓冲区取出显示数据发送给显示单元。显示单元接收到本单元的数据后,按照规定的频率在本区域内独立进行扫描显示。微机控制LED点阵显示系统的功能流程图如图2-2所示。图2-2 微机控制LED点阵显示系统的功能流程图三、主控电路 主控电路作为点阵显示系统的核心部分,其主要是将接收到的显示数据存储到视频显示缓冲区,同时将显示缓冲区的数据按地址分配给各显示单元。主控电路原理图如图3-1图3-1主控电路板原理框图所示。(一)主CPU电路 主CPU采用89C51单片机,外扩一片74HC373实现数据和地址总线的分离,74HC139为2-4线译码器,用于输出片选信号。DS12887为整个系统提供时I旬基准。MAX813L实现电压监测和看门狗功能,防止系统因电源干扰和其它干扰出现死机现象。CL232和MAX485担负主CPU的串行通信功能。电路中采用高速光藕6N136来进行串行通信的光电隔离,增强系统的抗干扰性。DS12887包含114字节的用户RAM、实时时钟占用了10字节、另外控制寄存器占用了4字节2。除了下面几个寄存器外,128字节中的其它字节都可直接读写。 (1)寄存器C, D为只读寄存器。 (2)寄存器A的位7只能读。 (3)秒寄存器的高位只能读。MAX813L: MAX813L是美国MAXIM公司生产的带电压监测的单片机看门狗电路。MAX813L在上电、掉电期间及在电压降低的情况下可产生一个复位信号。此外,MAX813L还带有一个1. 6秒的看门狗定时器,其具有1. 25V门限的电源故障报警电路可用于检测电池电压和非5V的电源。MAX813L主要特点:u .精确的电源监控(4. 65V门限)u .去抖动的手动复位输入u .看门狗定时器u .200ms复位脉冲宽度u .高电平有效的复位输出 主CPU与计算机之间的通信采用两种通信标准,即RS232C和RS485。如果计算机离显示屏相对较近则可采用RS232C标准进行通信;反之,则采用RS485进行通信。 RS-232C通讯标准规定:逻辑“1”为-3V-15V,逻辑“0”为+3V-+15V,其异步传输最高速率规定为20Kbps。系统是采用MAX485芯片来进行RS485标准通信的。MAX485芯片内集成有发送器和接收器。 主CPU工作流程:主CPU软件流程如图3-2。主CPU上电后首先确认是冷启动还是热启动,如果是冷启动,则在初始化过程中将各种标志位及内存清零,设定各种可编程控制寄存器;如果是热启动,则意味着是主CPU在受干扰处于非正常工作状态后由看门狗电路复位而重新启动的,在这种情况下则不能将内存全部清零,而应尽可能的恢复以前的工作状态3。图3-2主程序软件流程 主CPU的程序在系统正常工作后首先查询是否有存储的显示内容,其次还要查询是否收到计算机发来的命令,当收到命令后,对命令进行解释译码并执行相应功能,如初始化接收缓冲区、设置时钟芯片等。(二)副CPU电路副CPU有两个单片机,其中一片为AT89C51,同主CPU一样也外扩一片74HC373,采用74HC139作译码器。另一片则为AT89C2051,它负责读取温度传感器DS18B20的数据,并进行一定的浮点运算,转换成分辨率为0.1 °C的温度值。副CPU电路中的28C256 图3-3副CPU工作流程是用来存储时间和温度的点阵字模。副CPU与显示屏的通信:副CPU与显示屏的通信采用RS485通信标准。这样可以利用RS485通信的优良性能高速的传输数据。由于MAX485芯片有较强的抗共振干扰的能力,再配以6N136高速光藕进行光电隔离,大大的提高了传输的准确率。副CPU与显示屏的通信格式与主 CPU的通信格式是基本一致的。但其通信速率要比主CPU高得多。实际中应用的速率是单片机晶振频率的三十二分之一,即375Kbps。之所以采用比主CPU高得多的传输速率,是因为副CPU不但要传送主CPU已发送到显存的数据,而且还要将时间、温度等自身转换后的点阵信息发送给显示单元4。为了达到速率上的匹配,副CPU的通信速率必须要比主CPU高许多,否则当上位机连续变换显示内容,而副CPU通信速率低于要求时,会发生丢失显示内容的现象。副CPU工作流程:副CPU软件流程如图3-3。副CPU上电后也首先检测是冷启动还是热启动,以进行相应的初始化。副CPU还提供显示屏定时开关功能。 副CPU的外中断INT1的中断源是由DS12887产生的。DS12887的SQW管脚方波的输出频率被设为1024KHz。当副CPU进入中断入口后,首先查询打铃允许标志位,该位置1则允许打铃,反之禁止打铃。若允许打铃,副CPU进一步查询当前的系统时间是否有与设置的打铃时间相一致的,有则在打铃输出管脚输出高电平,并启动时间计数器,然后退出中断。时间计数器20秒后溢出,副CPU会将打铃输出管脚拉低。(三)异步双口RAM 双端口RAM提供了两个完全独立的端口,每个端口分别有自己独立的控制线、地址线和I/0数据线。两个CPU可以独立的读写任意双端口RAM单元使用双端口RAM在两个CPU之间共享信息有很多优点:速度快,方式简单,存取共享信息所用的时间一般与存取CPU外部RAM中数据所用时间一样。总之,对两个CPU中的任意一个而言,双端口RAM等效于CPU的外部RAM,并且通过适当设计可消除读写双端口RAM的系统等待时间。 双端口RAM在使用上应注意的一个问题就是有可能发生争用。当两个端口的CPU同时取同一双端口RAM单元时,就产生了争用,会出现写入值和读出值不是所期望的值的数据混乱状态。通常,有四种争用解决方案:硬件判优方案,中断方案,令牌传递方案和软件判优方案。 下面以在系统中实际使用的DT7005为例,说明这四种方案:l 硬件判优方案 当出现争用现象时,双端口RAM的片内判优电路确定某一个具有优先权的端口可以继续对该端口进行读写操作。对该端口而言,就像未发生争用一样:硬件判优电路把另一个被延迟存取的端口的/BUSY引脚置为有效(低电平)。在/BUSY有效期间对该端口的读写操作是无效的。当具有优先权的端口完成对争用单元的读写操作后,硬件判优电路把延迟存储端口的/BUSY引脚置为高电平,这时延迟存取的端口可以继续存取5。l 中断方案 中断方案向每个端口分配一个双口RAM单元,该单元叫信箱或消息中心。当右边端口写右边的信箱单元时,将左边的/INTL清0;左边读该单元时,将/INTL置1。对左边也有类似的功能。左、右两个端口的信箱单元的偏移地址不同。l 软件判优方案 软件判优的基本思想是在两个端口的CPU之间建立“握手”信号,一个端口在存取双端口RAM之前,先看对方是否在用双端口RAM,若未用,则本方使用双端口RAM并通过握手信号通知对方本端口已占用了双端口RAM;对双端口RAM操作结束后,再通知对方本方停止占用双端口RAM。软件判优方案也不要CPU插入等待周期,但软件较复杂且要占用一些CPU硬件资源,故也不十分可取。图3-4令牌控制原理l .令牌传递方案 DT7005有8个独立于双端口RAM的锁存器逻辑,即8个令牌,提供了对令牌方案的硬件支持。DT7005可最多分成8个区间段,每个区间段用一个令牌来控制。因为令牌数目较多,还可以用来控制其它的共享硬件资源6。令牌控制原理见图3-4所示。 使用双端口RAM或其它共享资源应按这样的步骤进行:申请令牌,然后判断申请是否成功;若成功,可使用该令牌控制的双端口RAM区间段;若不成功,可继续申请或转向其它应用;使用这个区段后,释放令牌。下面详述本系统是如何实现这个过程的。(1)申请令牌 申请令牌的端口先把本端口的/SEM清0 (SEM是令牌的选择信号,可连到89C51单片机P1口的一位上,如P1.0)。由地址线A0-A2来区分8个令牌的位置。通过数据线DO向未用的令牌位置写0,即完成了令牌的申请。其它的地址、数据线可任意为0或1,但不应使地址落入已使用的其它片外RAM或接口空间内。/OE, R/W用法与标准双端口RAM一致。程序段如下: CLR P1.0;清0/SEM MOV DPTR, #8000H;8000H应为一未用单元,为令牌0的地址 MOV A, #00H MOVX DPTR, A;向令牌0写0申请令牌0 (2)判断令牌申请是否成功 通过读本端口令牌标识,由读入值来判断是否申请成功。读令牌标识时,值扩展到所有数据线上,标识是0,读出地址全0,表示申请成功;否则,读出全1,表示令牌申请失败。程序段如下: CLR P1.0;清0/SEM FAIL: MOV DPTR,#8000H;SUCCESS: MOVX A,DPTR; CJNE A,#00H, FAIL;申请令牌失败,转FAIL标号程序段 LJMP SUCCESS;申请令牌成功,转SUCCESS标号程序段 左右端CPU都未申请令牌时,处于初始状态/QL=QR=O, A=B=C=D=1。这时左端口CPU向令牌写出0时,/QL=1,使C=B=O,D=A=1,接着左端口读出令牌状态为0,申请成功。这时若右端口CPU再去申请该令牌,使/QR=1,申请被挂起,且A, B, C, D状态不变,右端口读出的令牌状态仍为1,右端口申请不成功。 (3)释放令牌 左端口CPU使用完双端口RAM后,通过向令牌标识写1释放令牌。程序段如下: CLR P1.0;清0/SEM MOV DPTR,#8000H;8000H应为一未用单元,为令牌0的地址 MOV A, #00H MOVX DPTR, A;向令牌0写1释放令牌0 左端口CPU向令牌标识写1后,/QL=0, C=1,释放令牌。若右端口的令牌请求触发器有请求挂起,即/QR=1,左端口CPU释放令牌后,使C=B=1, D=A=O,右端口CPU马上获得令牌。因此,必须注意右端口CPU申请令牌失败后,要不断的读令牌标识,左端口CPU一释放令牌,右端口就可获得令牌,进行双端口RAM操作。若右端口CPU申请令牌失败后转去处理其它事务,则必须先释放令牌。否则左端口释放令牌后,右端口获得令牌,但右端口己转到其它事务处理,即不撤销申请也不操作双端口RAM,使左端口无法再次获得令牌,令牌系统被挂起7。 同其它方案相比,令牌传递方案不仅CPU不必插入等待周期而且还以较高的效率解决了两个CPU的争用问题。故在实际应用中本设计采用了此种方案。图4-1显示单元电路原理结构图四、显示单元显示单元是系统中负责将用户所示的内容显示出来的部件,所以它是系统与用户交互最直接的部分。因此显示单元性能的优劣在很大程度上决定着整个系统的好坏。 由于在不同的场合需要不同尺寸大小的点阵显示屏,这就要求在系统设计上采用模块化设计。本系统是以24×24点阵为一个单元,根据实际需要拼装成所需尺寸的显示屏。点阵显示单元的电路原理结构图如图4-1所示。(一)显示单元电路 每一个显示单元都有一个89C51作为其微处理器,一片6264 (8K×8bit)的RAM作为其显示缓冲区。显示单元采用74HC373实现数据和地址总线的分离,74HC138作为地址译码器,用X25045来监控微处理器的复位、死机及存储少量的非易失性信息。以RS-485总线标准作为显示单元与主控电路的通信标准。显示单元采用74HC273作为点阵的行驱动器,MC1413作为列驱动器,用4051作为行到列的译码器。显示单元中采用的X25045是美国Xicor公司生产的可编程看门狗电路把三个在微控制器为基础的系统中常用的外部功能元件集成为单一的低成本、低功耗器件8。图4-2显示单元定时中断流程复位(RESET)控制器监视系统中Vcc电平且在上电、掉电期间与电压降低的情况下产生一个复位(RESET)脉冲。如果在设置的超时周期内看门狗定时器未被复位,那么它将产生一个RESET(复位)脉冲。EzPROM按512字节组织,且具有先进的数据保护。显示单元主要工作原理: 当微处理器的串行中断接收到显示命令后,置相应的标志。主程序查询标志后进行必要的初始化。显示单元的刷新功能由单片机的定时中断来完成,其流程图如图4-2所示。由于显示屏由许多显示单元组成,且采用分布式扫描方式,这样各显示单元都是相互独立的,即使某一个显示单元在某一时刻受到千扰,造成这个单元显示有误,但对整个屏幕的影响并不很大使得显示屏在整体上仍然可看;在下一时刻,随着扫描电路的刷新,系统又会全面恢复正常。所以,这种分布式扫描的模块化设计极大的提高了系统的稳定性。 在显示单元的电路中,其行列选通信号的译码电路如图4-3所示。 在电路中,单片机的高两位地址线A13, A14经74HC138进行二一4译码,译码后的信号用来选通行驱动器(74HC273)。为了节省单片机的口线及简化电路,电路中再次使用74HC138的译码信号,将信号送至4051的A, B,C切换端,这样经二次译码后的信号就可直接送至MC1413(列驱动器),从而达到行列选通信号的同步。图4-3显示单元行列译码电路(二)在电路设计及调试中的几个问题1.点阵的亮度 在设计点阵显示屏时,首先要考虑点阵显示屏所安放的位置,如在室外则选用室外高亮的LED点阵。若在室内,可选择室内专用的LED。这样通过选择适当的LED点阵类型来保证点阵显示屏在使用中的亮度。 另外由于显示单元采用动态扫描技术,每个发光点被点亮的时间只有静态发光时间的几分之一,因此要想使动态扫描点阵的亮度达到所要求的亮度,其瞬时点亮电流一般至少为静态电流的四倍以上。这样在电源和驱动电路的设计上就必须保证有足够的容量。2.地线 由于点阵显示单元的耗电量非常大,占整个系统的百分之九十以上。一般单个显示单元的瞬时扫描电流就可达到一安培左右,这样显示单元的地线必须有足够的宽度,以防止地线的电阻过大,导致地线上出现很大压降,引起逻辑电平混乱,锁存器锁存电平错误,显示屏上出现干扰9。3.扫描频率 显示单元的扫描频率一般要有比较严格的要求,在实际使用中,本系统采用52赫兹的刷新频率,即约19.2毫秒刷新一次。当显示屏幕以滚动方式显示时,还必须协调滚屏与动态扫描的频率。也就是说在显示屏向左(或右)滚动一列的时间内,动态扫描电路必须全部扫描完本单元24列一轮以上。综合以上要求,本系统实际上扫描一列的时间设定为0.8毫秒,显示屏向左(或向右)滚动一列的时间是19.2毫秒。五、主控软件 主控计算机对显示屏的监控功能主要是通过其运行的主控软件来实现的,主控软件通过计算机的串行口发送、接收数据,对显示屏进行显示控制和传送显示数据。(一)软件的基本构成1.编程工具的选择随着计算机的发展,微机的软件开发平台己由DOS转入Windows,在图形化Windows图5-2 主程序流程操作系统下,提出了可视化的软件开发方法。Delphi是Borland公司在Visual Basic之后推出的软件开发工具,Delphi与其它编程语言相比具有很多优点,是首选的Windows环境下的快速软件开发工具。2.软件的基本构成图5-3 更改显示内容模块流程图图 5-4设定打铃时间模块流程图 按功能划分,整个主控软件是由更改显示内容模块、设置打铃时间模块、设置系统时间模块和数据通信模块四部分构成。软件的设计力求具有良好的用户界面,清晰的菜单窗口,用户可以根据需要选择使用。其主程序流程如图5-2。 如图所示,主控软件的各部分功能与相应的程序模块一一对应。每个模块都执行各自的功能,每一层模块和下一层模块的功能都是调用关系。由于各模块功能单一,所以上层模块与下层模块之间只存在调用与返回关系,同层模块之间没有联系。各模块是功能内聚性模块,模块之间藕合很松。 系统运行时,显示出图形界面,用户用鼠标或键盘选择相应的功能,由操作系统收集到这些消息,然后送给本程序,消息处理机制根据消息的内容分别调用各功能模块,各功能模块执行相应的功能,并返回操作系统。(二)软件的具体实现 软件直接利用DELPHI提供的各种可视化编程控件,如Richedit,SpeedButton, Image, Lable, ProgressBar等等。这样编程人员就可以集中精力考虑软件的核心算法,较好的运用了软件的继承性。更改显示内容模块、设置打铃时间模块、等主控软件的功能模块具体程序流程如图5-3, 5-4所示。在主控软件中主要运用了汉字字库提取和控件编制两项技术。汉字字库提取是从汉字字库中提出输入汉字的点阵信息。编制控件则是运用面向对象的编程技术,利用Windows进程及消息机制,编制成灵活的模块化的控件。1.汉字字库的提取(1)汉字的表示及编码 使用过计算机的人都知道,英文在计算机内的表示是采用ASCII码的方式,每个英文字母在计算机内部用一个ASCII码表示。中文的表示也采用ASCII码的形式,所不同的是一个汉字对应两个ASCII码。我国正式发布国家标准信息交换用汉字编码字为6763个,将比较常用的3755个列为一级汉字,将其余3008个列为二级汉字,而且一级汉字的排序按照拼音顺序,二级汉字的排序采用部首顺序方法。GB2312用两字节表示一个代码,总共规定了94×94=8836个代码。中间有一些空代码,即没有对应汉字。(2)点阵汉字原理 汉字在计算机中处理时是采用图形的方法,即每个汉字就是一个图形。显示一个汉字就是显示一个图形符号,这个图形符号称为汉字字模。每个汉字在计算机中都对应一个字模,字模分为两种类型。一种是点阵字模,一种是矢量字模。 点阵汉字是汉字字型最基本的表示法。点阵字模的原理是把汉字的方形区域细分为若干小方格,每个小方格便是一个基本点。在方形范围内,凡笔画经过的小方格便形成黑点,不经过的形成白点,若黑点代表1,白点代表0,那么小方格恰好可以用一个二进制位表示。这样制作出来的汉字称为点阵汉字。(3)点阵汉字的显示 24× 24点阵汉字字模的每一竖行占3个字节。也就是说24× 24大方格的第一竖行的黑白点是由这3个字节来决定的。将其数字转化为二进制,0的地方不填充,1的地方填充为黑色,如此循环把24格全填充好后,画出了汉字的第一竖行。逐个读取字模,将24列全部画出来,这样就显示了一个完整的汉字10。2.通信控件(1)面向对象方法 在面向对象的设计方法中,对象(object)和传递消息(messagepassing)分别是表现事物与事物间相互联系的概念。类(class )和继承(inheritance)是适应人们一般思维方式的描述范式。方法(method)是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性(encapsulation)和继承性。通过继承能体现类与类之间的关系,以及由此带来的动态聚束(dynamic binding)和实体的多态性(polymorphism),从而构成了面向对象的基本特征。(2) Delphi下的具体实现方法 为了将通信子程序封装成一个不可视的控件,控件源代码必须包含一个来自Tcomponent的对象派生(或一个后代)和一个RegisterComponent调用。由于抽象对象类型Tcomponent是所有控件的基础类型,因此从Tcomponent直接继承所创建的控件就是非可视化控件。控件单元必须包含一个Register过程,在该控件注册时,控件所包含的位图资源将被用在该Component Palette上11。简而言之,建立自定义控件的过程包含下列几步:Ø 建立包含新控件的库单元Ø 从己有控件类型中继承得到新的控件类型Ø 增加属性、方法和事件Ø 用Delphi注册控件Ø 为控件的属性方法和事件建立Help文件定义控件属性 属性(Property)是控件中最特殊的部分,主要因为控件用户在设计时可以看见和操作它们,并且在交互过程中能立即得到返回结果。属性也很重要,因为如果将它们设计好后,将使用户更容易地使用,自己维护起来也很容易。 属性提供非常重要的好处,最明显的好处是属性在设计时能出现在Objectinspector窗口中,这将简化编程工作,因为你只需读用户所赋的值,而不要处理构造对象的参数。从控件使用者的观点看,属性象变量。用户可以给属性赋值或读值,就好象属性是对象的域。从控件编写者的观点看属性比对象的域有更强的功能。 使属性数据可用的最简单的办法是直接访问。属性声明的read和write部分描述了怎样不通过调用访问方法来给内部数据域赋值。但一般都用read进行直接访问,而用write进行方法访问,以改变控件的状态。事件 对编程人员来说事件一般分为两种,即标准事件和自定义事件。Delphi带的所有控制继承了大多数Windows事件,这些就是标准事件。程序员可通过一定的方式进行调用。定义自定义事件一般分为触发事件、定义处理过程类型、声明事件、调用事件四步骤。触发事件: 定义自己的事件要遇到的第一个关键是:当使用标准事件时不需要考虑由什么触发事件。 当两种事情一状态变化和用户交互一发生时,处理机制是相同的,但过程稍微不同。用户交互事件将总是由Windows消息触发。状态改变事件也与Windows消息有关,但它们也可由属性变化或其它代码产生。你拥有对自定义事件触发的完全控制。定义处理过程类型: 一旦你决定产生事件,就要定义事件如何被处理,这就是要决定事件处理过程的类型。在大多数情况下,定义的事件处理过程的类型是简单的通知类型(1'NotifyEvent)和己定义的事件类型。声明事件: 当你决定了事件处理过程的类型,你就要准备声明事件的方法指针和属性。为了让用户易于理解事件的功能,应当给事件一个有意义的名字,而且还要与部件中相似的属性的名称保持一致。Delphi中所有标准事件的名称都以“On”开头。这只是出于方便,编译器并不强制它。Object工nspector是看属性类型来决定属性是否是事件,所有的方法指针属性都被看作事件,并出现在事件页中。调用事件: 一般说来,最好将调用集中在事件上。就是说在部件中创建一个虚方法来调用用户的事件处理过程和提供任何缺省处理。当调用事件时,应考虑以下两点:Ø 必须允许空事件Ø 用户能覆盖缺省处理 不能允许使空事件处理过程产生错误的情况出现。就是说,自定义部件的正常功能不能依赖来自用户事件处理过程的响应。实际上,空事件处理过程应当产生与无事件处理过程一样的结果。用Delphi注册控件 为了让Delphi识别自定义控件,并将它们放置于Component Palette上,你必须注册每一个控件。注册一个控件要在控件所在单元里加入Register方法,这包括两个方面的内容:声明注册过程和实现注册过程。 一旦安装了注册过程,就可以将控件安装在选择板上。注册过程要在控件所在单元中写一个过程,该过程必须以Register命名。Register必须出现在库单元的interface部分,这样Delphi就能定位它。在Register过程中,可以为每个控件调用过RegisterComponents。提供有关属性和事件的帮助 编写适当的帮助文件是编程的一个良好风格。Delphi提供了创建和插入Windows Help文件的工具,包括Windows Help编译器HC. EXE。为自定义控件建立Help文件的机制与建立任何Help文件没什么不同,但需要遵循一些约定以与库中其它Help兼容。保持兼容性的方法如下:Ø 建立Help文件Ø 增加特殊的注脚Ø 建立关键词文件Ø 插入Help索引(3)基于WIN95/NT的串行通信机制 Windows操作系统的机制禁止应用程序直接访问计算机硬件,但它为程序员提供了一系列的标准AP工函数,使得应用程序的编制更加方便并且免除了对有关硬件的调试麻烦。在Windows95/NT中,原来Windows3.X的WM_ COMMNOTIFY消息己被取消,操作系统为每个通信设备开辟了用户可定义大小的读/写缓冲区,数据进出通信口均由操作系统后台完成,应用程序只需对读/写缓冲区操作即可。WIN95/NT中几个常用的串行通信操作函数如下13: CreateFile(szDevice,fdwAccess,fdwShareMode,lpsa, fdwCreate fdwAttrsAndFlags, hTemplateFile);打开串行口 C1oseHandle (hComm);关闭串行口 SetupComm(hComm, dwRxBufSize, dwTxBufSize);设置通信缓冲 区的大小 ReadFile(hComm, inBuff, nBytes,&nBytesRead,&overlapped); 读串口操作 WriteFile(hComm, outBuff, nToWrite,&nActualWrite,&overlapped); 写串口操作 BOOL SetCommState( HANDLE hFile,/handle of communications device LPDCB 1pDCB/address of device-control block structure ):设置通信参数 BOOL GetCommState( HANDLE hFile,/handle of communications device LPDCB 1pDCB/address of device-control block structure );获取默认通信参数 BOOL ClearCommError( HANDLE hFile,/handle to communications device LPDWORD 1pErrors,/pointe