基于单片机的led显示屏设计_第1页
基于单片机的led显示屏设计_第2页
基于单片机的led显示屏设计_第3页
基于单片机的led显示屏设计_第4页
基于单片机的led显示屏设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的led显示屏设计随着人们生活环境的持续改善和美化,在许多场合能够看到LED灯。在大型商场车站,地铁站以及各类办事窗口等越来越多的场所需要用LED点阵显示汉字或者图像。LED行业已成为一个快速进展的新兴产业,市场空间庞大,前景宽敞。LED显示屏是利用发光二极管点阵模型或者像素单元组成平面的显示屏幕。不但拥有色彩丰富,组态灵活,能够适应室内外各种环境的特点,还具有发光效率高,使用寿命长的优势。LED显示屏经历了初期的不可更换显示内容,单色,双色的图文显示到现在的可随时更换显示内容,全彩色的视频显示,历经进展,LED显示屏得到了广泛的应用和进展。LED点阵显示屏概述目前,国内的LED点阵显示屏大部分是单显示,其显示的内容相对较少,显示花样较单一。一样在产品出厂时,显示内容就差不多写入显示屏操纵系统中的EPROM芯片中,当需要更换显示内容时就专门困难,如此使该类型的显示屏使用范畴受到了限制。国内还有另一种LED显示屏——可编程序型LED显示屏,尽管增加了显示屏系统的编程能力,显示内容和显示花样都有所增加,但也存在着更换显示内容不便的缺点。随着社会经济的迅速进展,现在的广告牌都存在着显示内容丰富,信息量大,信息更换速度快的特点。因此传统的LED显示屏操纵系统差不多越来越不能满足现代社会的需要。而利用PC机通信技术操纵LED显示屏,则具有显示内容丰富,信息更换更灵活等优点。LED点阵显示屏是通过PC机将要显示的汉字字模提取出来,并发送给单片机,然后显示在点阵屏上。单片机具有优异的性价比、体积小、可靠性高、操纵功能强,广泛应用在智能外表、机电一体化、实时过程操纵、机器人、家用电器、模糊操纵、通信系统等领域。1.2LED显示屏操纵技术状况LED汉字显示的操纵系统要紧有输入接口电路、信号操纵、转换和数字化处理电路及其输出接口电路等,尽管包括的有关技术比较多,但关键技术是串行传输与并行传输技术、动态扫描和静态锁存技术等。1.2.1串行传输与并行传输技术LED汉字显示屏的数据传输方式有串行和并行两种。,目前要紧采纳的是串行操纵技术,即显示屏每个单元内部的不同驱动电路和各级联动单元之间,每个时钟只传送一位数据,此方式可有效减少显示单元的数据传输驱动元件,从而提升整个系统的可靠性和性价比。1.2.2动态扫描与静态锁存技术LED汉字显示屏实现显示信息的刷新技术有动态扫描和静态锁存两种方式。安装在室内的显示屏一样宜采纳动态扫描技术,也即是一行放光二极管共用一行驱动寄存器,按照共用一行驱动寄存器的发光二极管像素数目,能够分为1/4,1/16扫描等等。而安装在室外的显示屏大多使用静态锁存技术,也确实是每一个发光一级管都对应一个驱动寄存器,如此就不需要分时工作,保证了每一个发光一级管的亮度占空比为100%。因为动态扫描法能够有效减少操纵器的I/O口,应用广发,本毕业设计也采纳动态扫描。1.2.3自动检测与远程操纵操纵技术LED汉字显示屏的构成复杂,安装位置,供电、周围亮度、环境温度等条件都直截了当阻碍着显示屏的正常工作与否。因此,在LED汉字显示屏的操纵系统中,不但需要对以上条件进行自动检测操纵,还要实现能够远程对显示屏的亮度,色度,垂直位置,显示内容和工作方式的转换的操纵。2总体方案论证及设计本毕业设计要求利用单片机设计出LED汉字显示屏的操纵系统,本设计由四个部分构成:LED点阵显示条屏(LED驱动模块)、译码驱动电路和移位寄存系统(数据储备模块)、单片机操纵系统(PC机通信模块)。下面对各个模块的设计逐一进行论证比较。2.1LED驱动模块方案一:采纳静态锁存方式,每一个LED发光管的一端接至单片机的一个I/O口,另一端通过电阻连接到电源。此方案能够直截了当驱动LED,原理简单,驱动能力专门强,LED的亮度也能够通过限流电阻进行适当的调剂,专门方便,但此方案过于白费单片机的I/O口,只适合适用于较小的系统。方案二:采纳动态扫描方式,通过三极管驱动并联在一起的LED发光管的一端(共阴或者共2端),LED发光管的另一脚连接通用I/O口,来操纵LED亮灭。这种方法能同时驱动较多的LED,方式灵活,能够节约单片机的I/O口资源。比较两种方案,本设计采纳方案二。2.2数据储备模块方案一:采纳静态RAM储备需要显示的内容,尽管静态储备器具有储备内容大,传输速度快的优点,然而断电后,其储备的数据就会消逝,因此不适合用于储备固定或者长时刻不变的数据。方案二:采纳ROM储备需要显示的内容,ROM能够长时刻的储备信息,同时掉电后数据不丢失,此种方案适合储备不变的数据。方案三:采纳串行EEPROM储备需要显示的内容。串行EEPROM技术几乎拥有了所有类型储备器的优点:不易丢失、可更新、高性价比、低功耗。普遍适合应用于各类工业测控系统。在速度要求不是专门高的情形下,串行EEPROM(暂定使用24C256)是比较理想的选择。以上方案,第三种方案有明显的优点,因此选择方案三。2.3本设计任务综合以上技术选择的论述和LED的进展趋势,本设计将以AT89C51单片机为核心,采纳串行传输、动态扫描技术、制作一款拥有PC机通信功能的,模块化LED多功能汉字显示屏。2.4总体硬件组成框图3系统硬件设计为使该模块化LED显示屏显示屏操纵系统具有更加方便的有用性和灵活性,需要对系统的各个硬件进行精心设计。其中硬件电路包括LED点阵显示条屏、译码驱动电路、移位寄存系统、单片机操纵系统等。3.1LED点阵显示条屏的硬件设计LED驱动模块是LED显示屏设计的关键部分,其驱动电路的设计合理与否直截了当关系到LED显示屏的亮度、稳固的重要指标。本设计中LED的驱动采纳三极管和74LS154实现的。3.1.174LS154的简单介绍74LS154是一个4—16译码器,要紧电特性的典型值如下:tpdPdABCD->outputG1、G2->output23ns19ns170mW当选通端(G1、G2)均为低电平常,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。若将G1和G2中的一个作为数据输入端,由ABCD对输出寻址,54/74154还可作1线-16线数据分配器真值表如下:输入输出G1G2DCBA0123456789101112131415LLLLLLLHHHHHHHHHHHHHHHLLLLLHHLHHHHHHHHHHHHHHLLLLHLHHLHHHHHHHHHHHHHLLLLHHHHHLHHHHHHHHHHHHLLLHLLHHHHLHHHHHHHHHHHLLLHLHHHHHHLHHHHHHHHHHLLLHHLHHHHHHLHHHHHHHHHLLLHHHHHHHHHHLHHHHHHHHLLHLLLHHHHHHHHLHHHHHHHLLHLLHHHHHHHHHHLHHHHHHLLHLHLHHHHHHHHHHLHHHHHLLHLHHHHHHHHHHHHHLHHHHLLHHLLHHHHHHHHHHHHLHHHLLHHLHHHHHHHHHHHHHHLHHLLHHHLHHHHHHHHHHHHHHLHLLHHHHHHHHHHHHHHHHHHHLLHXXXXHHHHHHHHHHHHHHHHHLXXXXHHHHHHHHHHHHHHHHHHXXXXHHHHHHHHHHHHHHHH74LS154的真值表3.1.2驱动电路的设计该系统的驱动电路由74LS154与三极管共同组成的,原理图如下:如上图所示,第一采纳AT89C51为本系统的单片机型号。其中,AT89C51是一种带4kb闪耀可编程可擦除只读储备器(FalshProgrammableandErasablReadOnlyMemoryFPEROM)的低电压、高性能CMOS型8位微处理器,俗称单片机。器件采纳ATMEL高密度非易失储备器制造技术制造,与工业标准的MCS-51指令集、输出管脚相兼容。由于将多功能8位CPU和闪耀储备器组合在单个芯片中,能够进行1000次写/擦循环,数据保留时刻为10年。时钟电路由AT89C51的18,19脚的时钟端(XTALl及XTAL2)以及12MHz晶振X1,电容C2,C3组成,采纳片内振荡方式。复位电路采纳简易的上电复位电路,要紧由电阻R1,R2,电容C1,开关K1组成,分不接至AT89C51的RST复位输入端。LED的行扫描端接到单片机P0口,而列扫描接到三极管的发射极。其中列扫描端(B1—B8)用于LED的数据扫描,凭借74LS154的译码和三极管的驱动,使得LED能发光。(A1—A8)通过P0口提供给LED的显示数据。考虑到P0口必须设置上拉电阻,本设计采纳4.7kΩ排电阻作为单片机的上拉电阻。下图为AT89C51的引脚图:3.2数据储备电路的设计本设计由串行的ROM24C256组成数据储备电路。其中,24C256是一款1—256K位的支持I2C总线数据传送协议,能够用电擦拭,可编程自定时写周期的串行CMOSEEPROM。此芯片有两种写入方式,一种是字节写入方式,另一种是页写入方式。此芯片承诺在一个写周期内进行对一个字节到一页的若干个字节的编程写入。24C256的引脚排列和各个引脚的功能如下图和下表:引脚名称功用A0A1A器件地址选择SDA串行数据/地址SCL串行时钟WAP写爱护Vcc1.8V到6.0V电源Vss接地数据储备器24C256的接口设计原理图如下图所示:该储备电路只由24C256芯片组成,SCL为串行时钟引脚,用来产生器件所有数据发送或同意的时钟。SDA是串行数据/地址,这是一个双向的传输端,功能是接收或者发送所有的数据以及传送地址。LED显示器的操纵系统工作时,单片机89C51依靠SDA引脚与SCL引脚读取24C256中储备的内容,并在LED显示屏上显示出来。因此也能够通过PC机(上位机)将差不多编辑好的数据内容下载到24C256的芯片内。3.3PC机(上位机)通信模块的设计LED显示屏和电脑的通讯方式采纳了标准RS232接口,电路原理图如下图所示:通讯方式为10位的异步通讯。RS232接口实际上是一种串行通信标准,是由美国EIA(电子工业联合会)和BELL公司一起开发的通讯协议,它对信号线的功能、电气特性、连接器等都有明确的规定。由于RS-232接口的EIA是用正负电平表示逻辑关系的(-3V—-15V为1、+3V—+15V为0)。与TTL以高低电平表示逻辑关系不同,因此,为了能够和运算机接口通信,必须在EIA电平和TTL电平之间进行电平转换。MAX232芯片可完成TTL-EIA电平转换,且只用单一+5V电源,因此得到广泛应用。由于采纳的是标准RS232接口,因此传输距离不能专门远,当传输距离超过15M,就要采纳422或485接口,则只要加上一块RS232转422/485电路模块就能够了。3.4LED显示屏的选择LED显示屏模块技术指标参数表如下表所示:规格(mm)φ5显示像素/平米17300模块1R1YG(绿红)显示屏像素点数64*16=1024尺寸(mm)480*120面积(㎡)0.576最大功耗(瓦/平方米)100(单)/200(双)扫描速度大于75Hz视角水平视觉160℃,垂直视觉环境要求-20℃—供电要求220VAC±10%50Hz驱动方式1/16扫描使用寿命10万小时系统的软件设计软件也是LED汉字显示屏操纵系统的重要组成部分。在系统的软件设计中,我同样采纳模块化的设计,将系统的各个部分编写出子模块的形式,通过如此的方式,能够增加系统软件的可移植性和可读性。4.1下位机软件流程本系统的下位机(单片机89C51)要紧作用是用来实现LED汉字显示屏上字样的移位、显示和数据的读取等等功能。因此主程序的流程图如下:4.2上位机软件本系统的上位机软件要紧是编辑LED显示屏显示的内容,在设计中采纳VisualBasic语言LED显示屏操纵系统的内容下载软件。4.2.1VisualBasic中串口通讯的应用现在大量的智能仪器或数据采集模块都采纳了RS—232或485通讯接口,通过相应的通讯协议,将测试、采集的数据传输给上位机,以满足各种形式的数据处理的要。VisualBasic6.0(以下简VB)是许多工程技术人员熟悉和常用的应用程序开发软件,VB以其简单易学、32位面向对象的程序设计等特点,倍受宽敞运算机开发者的青睐,已广泛地应用于各个领域;如何用VB编写数据通讯程序,并进行数据处理,意义重大。用VB开发串口通讯一样有两种方法:一是采纳VB自身的标准控件Mscomm来实现;另一种是利用windows的通讯API函数。4.2.2通讯基础知识一样来讲,运算机都有一个或多个串行端口,它们依次为com1、com2、…,这些串口还提供了外部设备与PC进行数据传输和通信的通道。这些串口在CPU和外设之间充当讲明器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步讲,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据,当用通信控件或声明调用API函数时,他们由COMM.DRV讲明并传递给设备驱动程序,作为一个VB程序员,要编写通信程序.只需明白通信控件提供给Windows通信API函数的接口即可.换句话讲,只需设定和监视通信控件的属性和事件即可。4.2.3数据的发送VB发送数据有两种:一、发送字符数据;二、发送二进制数据。1.发送字符数据在通讯中以单字符方式逐个发送数据时,每一个数据范畴是:0—128。如发送58给单片机则能够如此表示:Mscomm1.Output=Chr(50)‘发送数据(16进制)在通讯中以多字符方式发送数据时,发送的是Ascii码值。如发送“LED显示屏”则能够如此表示:DimdataasString‘定义发送数据变量data=”LED显示屏”‘给变量赋值Mscomm1.Output=data‘发送数据2.发送二进制数据以发送字符方式时,发送的数据范畴只能是:0—128,而单片机经常处理的数据范畴是0—255,那么如何样发送大于128的数据呢?方法是采纳二进制方式发送数据。第一定义一个二进制类型的数组,然后把要发送的数值赋给二进制数组,再通过Mscomm发送。如发送数值220的具体过程如下:Dimdata(0)asbyte‘定义发送数据数组Data(0)=220‘给数组赋值Mscomm1.output=data(0)‘发送数据4.2.4数据的接收接收数据有两种方式,一、以文本方式接收(InputMode=0);二、以二进制方式接收(InputMode=1)。1.以文本方式接收数据在InputMode=0的模式下,是以文本方式接收数据,在接收数据之前,我们必须先定义一个字符串变量,用以接收数据缓冲区里的数据,具体过程如下:DimreceiveAsString*1‘定义接收数据变量CasecomEvReceive‘事件类型为接收数据receive=MSComm1.Input‘接收数据EndSelect2.以二进制方式接收数据在InputMode=1的模式下,是以二进制方式接收数据,在接收数据之前,我们必须先义一个二进制类型的数组,用以接收数据缓冲区里的数据,过程如下:Dimreceive(n)AsByte‘定义接收数据变量CasecomEvReceive‘事件类型为接收数据Mscomm1.InputMode=1‘接收方式为二进制方式Fork=0tonReceive(k)=MSComm1.Input‘接收数据NextkEndSelect4.3编程思想要实现LED汉字显示屏的动态滚动显示成效,事实上确实是以固定的合适周期,显示一幅幅不同内容的屏幕画面。因此在软件设计上,只需按照一定的时刻间隔改变储备于显示缓冲区的信息内容。例如左移的动态成效,确实是让显示缓冲区的点阵数据向左移动一列,由于显示缓冲区的所有数据左移一列需要一定的时刻,不可能在两次中断间隔时刻内实现这一处理过程,鉴于此,就需要设置两个显示缓冲区,一个用于储存当前屏幕正在显示的信息数据,另一个则用来对当前的信息数据进行处理。在到达换屏时刻间隔后,切换当前显示缓冲区到数据差不多处理的显示缓冲区,然后再对另一显示缓冲区进行数据处理,以此循环下去。要保证动态显示的正常,符合人们的视觉适应,最全然的咨询题是如何分配刷新显示屏的定时时刻与两个显示缓冲区数据显示、处理的替换。为了二者的处理时刻不相互冲突,本设计采纳的方法是使显示缓冲区的数据处理在多次多次定时中断程序执行之间的时刻间隔内进行并完成。数据处理时刻=(定时中断时刻-传输数据时刻)×中断次数如此,只要合理的设定中断次数就能保证刷新屏幕间隔时刻内显示缓冲区有足够的时刻处理数据。4.4字模处理从字节长度看,汉字占两个字节(Byte),数字只占一个字节,那么:汉字字模为16*16个点),ASCII码字符的字模为8*16个点。如此字模的长度不同,处理起来就会有困难。为此,本设计采纳这种字模处理方法:把汉字拆成两半,如此就与英文字母和阿拉伯数字的字模统一起来。字模的储备是按顺次储备在数据储备区里,如‘苏’字的字模在数据储备区里是如此存放的:ucharcodetab[32]={08H,20H,08H,24H,0FFH,0FEH,08H,20H0AH,20H,02H,10H,3FH,0F8H,02H,10H02H,10H,22H,18H,24H,16H,44H,12H08H,10H,10H,10H,20H,50H,40H,20H}然而仅仅依靠人工方法猎取汉字代码是会专门繁琐。因此,我检索了互联网,找到了一款功能十分强大的汉字字库提取程序,软件打开后,在指定地点输入汉字,点“生成”,十六进制数据的汉字代码即可自动生成。甚至能够输入多个汉字以及选择动态显示方式,截图如下:4.5动态成效的实现本文设计的LED点阵显示屏能够实现左移、掉下、上升三种显示方式。其中只有左移方式能够实现多于一屏内容的显示,其它的显示方式只能显示一屏的内容。显示方式设置由微机操纵,微机在传送点阵字模数据时,先显示方式,再传送点阵数据。显示过程由单片机定时中断程序操纵,每定时中断一次点亮一行,定时中断时刻为0.8ms,每中断16次,即可对整个显示屏扫描一次,完成一屏信息的刷新,每秒显示画面数达78屏,可保证画面无闪耀感。编程采纳的是C言语,应用C51编程具有以下优点:①C51治理内部寄存器和储备器的分配,编程时,无需考虑不同储备器的寻址和数据类型等细节咨询题。②程序由若干函数组成,具有良好的模块结构。③有丰富的子程序库可直截了当引用,从而大大减少用户编程的工作量。④C言语和汇编言语能够交叉使用,汇编言语程序代码短、运行速度快,但复杂运算编耗时。用汇编言语编写与硬件有关的部分,用C言语编写与硬件无关的运算部分程序,充分发挥两种言语的长处,提升开发效率。4.5.1左移成效在显示条屏较小的情形下,为了显示更多的信息内容,普遍采纳的方法是移位显示,按照人们的日常适应,本设计选择左移的动态成效,它的特点是不仅仅局限于显示屏幕的大小、显示成效好,编程简单。下面,用16*64的条型显示屏的左移方式为例,讲明左移动态成效的实现方法:屏幕的数据大小为128个字节,因此要先在数据储备区里开创一个256个字节的显示缓冲区(分为两个显存),其中一个用以储存当前需要显示的信息内容,而另一个用来处理数据。要实现左移的动态成效,原理专门简单,事实上确实是每隔一段时刻,向显示缓冲区里加入一列数据。具体做法是:第一个字节左移一位,储存于变量A中,第二个字节右移7位(一个字节是8位),储存于变量B中,A和B逻辑或运算,结果储存于A中,如此就完成了第一个字节的数据处理。一行有8个字节的数据需要处理,因此要设8此循环,如此循环8次后,便完成了一行的数据处理。同时,每个字有16行,因此我们需要在8次循环里再设计一个16次的外循环,至此,整个屏幕的数据就都处理完了。再启动更新信号,交换显示储备区,显示程序就显示刚才处理好了的内容,接着,单片机再对另一显示储备区的数据进行处理,处理完成后再交换显示。如此如此,就能实现左移的动态成效。程序流程图如下图所示:具体源程序如下:voidrtol(void){uchara,b,i,k,u,n;while(1){//---------//判定内容改变没有?if(change==1)break;//---------for(n=0;n<leng;n++)//一共有length个字(8*16){//---------//判定内容改变没有?if(change==1)break;//---------for(i=0;i<8;i++)//一边字有8位,要移8次{//---------//判定内容改变没有?if(change==1)break;//---------if(choose==1)//处理显存1区{addr2=0;}else//处理显存2区{addr2=256;}//---------for(k=0;k<16;k++)//一屏要处理16个字(8*16){for(u=0;u<16;u++)//一个字要处理16个字节{num=512+u+k*16+n*16;a=*num<<i;num=512+u+k*16+16+n*16;b=*num>>8-i;a|=b;dispd=addr2+u+k*16;*dispd=a;//储存数据}}while(jh==0);jh=0;//关交换信号choose=~choose;}}}}4.5.2上升成效编程本系统实现的上升成效具体是:内容从显示屏底部缓慢地上升,整行字显现后,会定格一段时刻,让人们看清晰显示的内容,接着闪耀三下,提醒正在显示的内容立即退出,然后内容开始上移,直到消逝,如此,就完成了一次完整显示过程。具体实现的方法是:设定一个16次循环,在第一次循环中,显存只取显示内容的第一行数据,放到显存的末行,即第16行。在第二次循环中,显存读取显示内容的第一和第二行数据,同时,第一行数据放入显存的第15行,第二行数据放入显存的第16行,如此循环16次,直到全部显示内容显示出来。设定程序,显示内容闪耀三次。接着退出的方法差不多。区不仅是每次取的行数不一样。程序流程图如下:具体源程序如下:voidrise(void){uchari;uintk,g,t,m;//--------------deal();//显示前把数据重新排列//--------------while(1){//---------//判定内容改变没有?if(change==1)break;//---------for(t=0;t<2;t++)//入、出共两次{//---------//判定内容改变没有?if(change==1)break;//---------if(t==0)g=1024;//入的首地址if(t==1)g=1280;//出的首地址//---------------for(i=0;i<=16;i++)//出完有16行{//---------//判定内容改变没有?if(change==1)break;//---------if(choose==1)//处理显存1区{addr2=0;}else//处理显存2区{addr2=256;}//---------for(k=0;k<256;k++)//一屏有256个字节{dispd=addr2+k;num=g+k;*dispd=*num;}g+=16;//指向上一行数据while(jh==0);jh=0;//关交换信号choose=~choose;}//----------------------定一会for(i=0;i<25;i++){//---------//判定内容改变没有?if(change==1)break;//---------while(jh==0);jh=0;}if(t==0){//---------//判定内容改变没有?if(change==1)break;//----------------------闪3下TR0=0;p34=1;p35=1;for(m=0;m<34000;m++);TR0=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<35000;m++);TR0=0;p34=1;p35=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<34000;m++);TR0=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<35000;m++);TR0=0;p34=1;p35=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<34000;m++);TR0=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<35000;m++);}}4.5.3掉下成效编程掉下的动态成效的实现与上升的编程思想差不多,也是设定一个16次的循环,在第一次的循环中,只读取显示内容的最后一行数据,放到显存的第一行里。在第二次循环中,读取显示内容的第15和第16行数据,并依次放入显存的第1和第2行。如此循环16次,整屏幕的数据都显示出来。退出同理。不再复述。程序流程图如下:具体源程序如下:voiddrop(void){uchari;uintk,g,t,m;//--------------deal();//显示前把数据重新排列//--------------while(1){//---------//判定内容改变没有?if(change==1)break;//---------for(t=0;t<2;t++)//入、出共两次{//---------//判定内容改变没有?if(change==1)break;//---------if(t==0)g=1536;//入的首地址if(t==1)g=1280;//出的首地址//---------------for(i=0;i<=16;i++)//出完有16行{//---------//判定内容改变没有?if(change==1)break;//---------if(choose==1)//处理显存1区{addr2=0;}else//处理显存2区{addr2=256;}//---------for(k=0;k<256;k++)//一屏有256个字节{dispd=addr2+k;num=g+k;*dispd=*num;}g-=16;//指向上一行数据while(jh==0);jh=0;//关交换信号choose=~choose;}//----------------------定一阵for(i=0;i<25;i++){//---------//判定内容改变没有?if(change==1)break;//---------while(jh==0);jh=0;}if(t==0){//---------//判定内容改变没有?if(change==1)break;//----------------------闪3下TR0=0;p34=1;p35=1;for(m=0;m<34000;m++);TR0=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<35000;m++);TR0=0;p34=1;p35=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<34000;m++);TR0=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<35000;m++);TR0=0;p34=1;p35=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<34000;m++);TR0=1;//---------//判定内容改变没有?if(change==1)break;//---------for(m=0;m<35000;m++);}}}4.6上位机串口通信软件4.6.1界面设计新建一个窗体From1,添加以下要紧控件:1、ProgressBar12、Commad1、Commad23、Frame14、Combo15、Text1软件界面如下图:4.6.2程序编写第一对8051串口进行初始化,与上位机通讯接收数据,判定数据是否接收完,如果没有连续接收,如果接收完则运算地址偏移量然后从字库中取字,最后固定显示并移动。传输函数编程流程图如下图所示源程序如下:PublicSubport(conttonAsString,msgAsByte,wayAsInteger)'-------------------------DimcounterAsInteger'进度条DimxAsLong'储存字的位置DimnumAsInteger'运算字的个数DimdataAsString*4'接收数据Dimse(0)AsByteIfcontton=""ThenMsgBox"没有输入要显示的内容,请输入!"ExitSubElsenum=Len(contton)'--------------------------校对有没有字库里没有的字符?Fork=1Tonumx=Asc(Mid(contton,k,1))If(x<-24158)Or(x>-23617Andx<-20319)Or(x>-2050Andx<32)Or(x>126)ThenIfx<>9Then'判定是不是Tab键?none=Mid(contton,k,1)MsgBox"字库中没有输入的字'"&none&"'字符的字模.",vbCritical,"Wrong"ExitSubEndIfEndIf'--------------------------运算中文的个数If(x>=-20319Andx<=-2050)Or(x>=-24158Andx<=-23617)Or(x=9)Thencal=cal+1EndIfNextknum=num+cal'***********************************************进度条counter=num*16send.ProgressBar1.min=0send.ProgressBar1.Max=countersend.ProgressBar1.Value=0counter=0OnErrorGoToclosed'处理串口没有打开的情形'----------------发送校对符main.MSComm1.Output=Chr(6)Fortim=0To2000000'延时NexttimIfmain.MSComm1.InBufferCount<>0ThenIfAsc(main.MSComm1.Input)<>16Thenmain.MSComm1.InBufferCount=0'清空接收区MsgBox"传输错误,请检查各硬件是否正常?",vbOKOnly,"传输错误"ExitSubEndIfElseMsgBox"传输错误,请检查各硬件是否正常?",vbOKOnly,"传输错误"ExitSubEndIf'--------------------------发送启动符5(任定,作为地址信号)main.MSComm1.Output=Chr(5)'--------------------------延时Fortim=0To1000000Nexttim'--------------------------发送显示方式main.MSComm1.Output=Chr(way)'--------------------------发送字符串的长度Ifnum<256Then'0~255se(0)=nummain.MSComm1.Output=semain.MSComm1.Output=Chr(0)Else'256~500se(0)=num-255main.MSComm1.Output=semain.MSComm1.Output=Chr(1)EndIfOpen"c:\HanselLED.fon"ForRandomAs#1Len=4'打开字库'--------------------------处理传输中出错的情形OnErrorGoTowrong'--------------------------传输num=num-calFork=1Tonumx=Asc(Mid(contton,k,1))Ifx=9Then'Tab键占一个格Fora=0To31main.MSComm1.Output=Chr(0)'***************************************进度条send.ProgressBar1.Value=countercounter=counter+1NextaElseIf-20319<=xAndx<=-2050Then'中文字符Ifx=-20319Thenx=3169Elsef=(x+20318)/255c=Int(f)d=(x+20318)Mod255x=32*(c*93+d+100)+1EndIf'x=32*(x+20418)+1'汉字的位置从第100位开始储备'---------------------------取字模ofe=0Forbig=0To1Fora=0To15Get#1,x+a+ofe,datab=Val(data)se(0)=bmain.MSComm1.Output=se'***************************************进度条send.ProgressBar1.Value=countercounter=counter+1ofe=ofe+1Nextaofe=1NextbigElseIf-24158<=xAndx<=-23617Then'全角字符Ifx=-20319Thenx=219809Elsef=(x+24157)/255c=Int(f)d=(x+24157)Mod255x=32*(c*93+d+6870)+1'全角符号的位置从第6870位开始储备EndIf'---------------------------取字模ofe=0Forbig=0To1Fora=0To15Get#1,x+a+ofe,datab=Val(data)se(0)=bmain.MSComm1.Output=se'***************************************进度条send.ProgressBar1.Value=countercounter=counter+1ofe=ofe+1Nextaofe=1NextbigElsex=16*(x-32)+1'ASCII码字符从第1位开始储备EndIf'---------------------------取字模Fora=0To15Get#1,x+a,datab=Val(data)se(0)=bmain.MSComm1.Output=se'***************************************进度条send.ProgressBar1.Value=countercounter=counter+1NextaEndIfNextkClose#1Ifmsg=0Thenmain.MSComm1.PortOpen=FalseFortim=0To2000000'延时Nexttimmain.MSComm1.PortOpen=TrueEndIf'*****************************************进度条send.ProgressBar1.Value=0EndIfmain.StatusBar1.Panels(7).Text="显示屏开"main.showYN.Checked=TrueExitSubclosed:'处理串口没有打开的情形MsgBox"找不到COM口,请打开串行口!",vbCritical,"HLED4.0"ExitSubwrong:'处理传输中出错的情形MsgBox"传输中断,请断开显示屏电源,重启显示屏!",vbCritical,"HLED4.0"EndSub5系统设计总结本设计针对显示内容可任意修改、显示方式和显示屏大小可任意设定等要求,采纳了显示板模块化、产品化设计,设计出一套适用范畴广、显示成效好、质量可靠的智能LED显示系统。(1)采纳灵活的积木式结构设计,安装快捷,更换、修理方便,采纳显示单元板或显示单元箱体,可按客户要求任拼凑装配所需显示屏尺寸,同时便于爱护。(2)模块化电路系统,电路设计按照功能分成不同模块,每个模块之间仅需要极少的连线,大大提升了系统稳固性、可靠性。安装、调试、爱护简单方便,难度大大降低。(3)从方案的设计、硬件软件的设计、器件的选取、制造工艺等诸多方面采取有效可行的技术手段,全面考虑各种可能存在的干扰因素,确保系统稳固安全可靠的运行。(4)应用面向对象的编程言语实现了界面友好、图像显示、内容丰富、方便扩展的人机接口。(5)超集成操纵系统,集中操纵的设计思路。将90%的操纵过程集中在主控系统上,而显示屏主体仅有差不多的驱动电路,而没有复杂的操纵电路,极大的提升了LED显示系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论