基于单片机的LED显示屏设计

上传人:仙*** 文档编号:28322687 上传时间:2021-08-25 格式:DOC 页数:36 大小:924KB
返回 下载 相关 举报
基于单片机的LED显示屏设计_第1页
第1页 / 共36页
基于单片机的LED显示屏设计_第2页
第2页 / 共36页
基于单片机的LED显示屏设计_第3页
第3页 / 共36页
点击查看更多>>
资源描述
淮阴工学院毕业设计说明书(论文) 第 36 页 共 36 页1 绪论随着人们生活环境的不断改善和美化,在许多场合可以看到LED灯。在大型商场车站,地铁站以及各类办事窗口等越来越多的场所需要用LED点阵显示汉字或者图像。LED行业已成为一个快速发展的新兴产业,市场空间巨大,前景广阔。LED显示屏是利用发光二极管点阵模型或者像素单元组成平面的显示屏幕。不但拥有色彩丰富,组态灵活,能够适应室内外各种环境的特点,还具有发光效率高,使用寿命长的优势。LED显示屏经历了初期的不可更换显示内容,单色,双色的图文显示到如今的可随时更换显示内容,全彩色的视频显示,历经发展,LED显示屏得到了广泛的应用和发展。1.1 LED点阵显示屏概述目前,国内的LED点阵显示屏大部分是单显示,其显示的内容相对较少,显示花样较单一。一般在产品出厂时,显示内容就已经写入显示屏控制系统中的EPROM芯片中,当需要更换显示内容时就非常困难,这样使该类型的显示屏使用范围受到了限制。国内还有另一种LED显示屏可编程序型LED显示屏,虽然增加了显示屏系统的编程能力,显示内容和显示花样都有所增加,但也存在着更换显示内容不便的缺点。随着社会经济的迅速发展,如今的广告牌都存在着显示内容丰富,信息量大,信息更换速度快的特点。因此传统的LED显示屏控制系统已经越来越不能满足现代社会的需要。而利用PC机通信技术控制LED显示屏,则具有显示内容丰富,信息更换更灵活等优点。LED点阵显示屏是通过PC机将要显示的汉字字模提取出来,并发送给单片机,然后显示在点阵屏上。单片机具有优异的性价比、体积小、可靠性高、控制功能强,广泛应用在智能仪表、机电一体化、实时过程控制、机器人、家用电器、模糊控制、通信系统等领域。1.2 LED显示屏控制技术状况 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.1 LED驱动模块 方案一:采用静态锁存方式,每一个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.1 LED点阵显示条屏的硬件设计LED驱动模块是LED显示屏设计的关键部分,其驱动电路的设计合理与否直接关系到LED显示屏的亮度、稳定的重要指标。本设计中LED的驱动采用三极管和74LS154实现的。3.1.1 74LS154的简单介绍74LS154是一个416译码器,主要电特性的典型值如下:tpdPdABCD-outputG1、G2-output23ns19ns170mW当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。若将 G1 和G2 中的一个作为数据输入端,由ABCD 对输出寻址,54/74154 还可作1 线16 线数据分配器真值表如下:输入输出G1G2DCBA0123456789101112131415LLLLLLLHHHHHHHHHHHHHHHLLLLLHHLHHHHHHHHHHHHHHLLLLHLHHLHHHHHHHHHHHHHLLLLHHHHHLHHHHHHHHHHHHLLLHLLHHHHLHHHHHHHHHHHLLLHLHHHHHHLHHHHHHHHHHLLLHHLHHHHHHLHHHHHHHHHLLLHHHHHHHHHHLHHHHHHHHLLHLLLHHHHHHHHLHHHHHHHLLHLLHHHHHHHHHHLHHHHHHLLHLHLHHHHHHHHHHLHHHHHLLHLHHHHHHHHHHHHHLHHHHLLHHLLHHHHHHHHHHHHLHHHLLHHLHHHHHHHHHHHHHHLHHLLHHHLHHHHHHHHHHHHHHLHLLHHHHHHHHHHHHHHHHHHHLLHXXXXHHHHHHHHHHHHHHHHHLXXXXHHHHHHHHHHHHHHHHHHXXXXHHHHHHHHHHHHHHHH74LS154的真值表3.1.2 驱动电路的设计 该系统的驱动电路由74LS154与三极管共同组成的,原理图如下: 如上图所示,首先采用AT89C51为本系统的单片机型号。其中,AT89C51是一种带4 kb闪烁可编程可擦除只读存储器(Falsh Programmable and Erasabl Read OnlyMemory FPEROM)的低电压、高性能CMOS型8位微处理器,俗称单片机。器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集、输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,能够进行1000次写擦循环,数据保留时间为10年。时钟电路由AT89C51的18,19脚的时钟端(XTALl及XTAL2)以及12 MHz晶振X1,电容C2,C3组成,采用片内振荡方式。复位电路采用简易的上电复位电路,主要由电阻R1,R2,电容C1,开关K1组成,分别接至AT89C51的RST复位输入端。LED的行扫描端接到单片机P0口,而列扫描接到三极管的发射极。其中列扫描端(B1B8)用于LED的数据扫描,凭借74LS154的译码和三极管的驱动,使得LED能发光。(A1A8)通过P0口提供给LED的显示数据。考虑到P0口必须设置上拉电阻,本设计采用4.7k排电阻作为单片机的上拉电阻。下图为AT89C51的引脚图:3.2 数据存储电路的设计 本设计由串行的ROM 24C256组成数据存储电路。其中,24C256是一款1256K位的支持I2C总线数据传送协议,可以用电擦拭,可编程自定时写周期的串行CMOS EEPROM。此芯片有两种写入方式,一种是字节写入方式,另一种是页写入方式。此芯片允许在一个写周期内进行对一个字节到一页的若干个字节的编程写入。24C256的引脚排列和各个引脚的功能如下图和下表:引脚名称功用A0 A1 A2器件地址选择SDA串行数据/地址SCL串行时钟WAP写保护Vcc1.8V到6.0V电源Vss接地数据存储器24C256的接口设计原理图如下图所示: 该存储电路只由24C256芯片组成,SCL为串行时钟引脚,用来产生器件所有数据发送或接受的时钟。SDA是串行数据/地址,这是一个双向的传输端,功能是接收或者发送所有的数据以及传送地址。LED显示器的控制系统工作时,单片机89C51依靠SDA引脚与SCL引脚读取24C256中存储的内容,并在LED显示屏上显示出来。当然也可以通过PC机(上位机)将已经编辑好的数据内容下载到24C256的芯片内。3.3 PC机(上位机)通信模块的设计 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.4 LED显示屏的选择LED显示屏模块技术指标参数表如下表所示:规格(mm)5显示像素/平米17300模块1R1YG(绿红)显示屏像素点数64*16=1024尺寸(mm)480*120面积()0.576最大功耗(瓦/平方米)100(单)/200(双)扫描速度大于75Hz视角水平视觉160,垂直视觉160环境要求-2060供电要求220VAC10% 50Hz驱动方式1/16扫描使用寿命10万小时4 系统的软件设计软件也是LED汉字显示屏控制系统的重要组成部分。在系统的软件设计中,我同样采用模块化的设计,将系统的各个部分编写出子模块的形式,通过这样的方式,可以增加系统软件的可移植性和可读性。4.1 下位机软件流程 本系统的下位机(单片机89C51)主要作用是用来实现LED汉字显示屏上字样的移位、显示和数据的读取等等功能。所以主程序的流程图如下:4.2 上位机软件 本系统的上位机软件主要是编辑LED显示屏显示的内容,在设计中采用Visual Basic语言LED显示屏控制系统的内容下载软件。4.2.1 Visual Basic 中串口通讯的应用现在大量的智能仪器或数据采集模块都采用了RS232或485通讯接口,通过相应的通讯协议,将测试、采集的数据传输给上位机,以满足各种形式的数据处理的要。VisualBasic60(以下简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.发送字符数据 在通讯中以单字符方式逐个发送数据时,每一个数据范围是:0128。如发送58给单片机则可以这样表示: Mscomm1.Output=Chr(50) 发送数据(16进制) 在通讯中以多字符方式发送数据时,发送的是Ascii码值。如发送“LED显示屏”则可以这样表示: Dim data as String 定义发送数据变量 data=” LED显示屏” 给变量赋值 Mscomm1.Output=data 发送数据 2.发送二进制数据 以发送字符方式时,发送的数据范围只能是:0128,而单片机经常处理的数据范围是0255,那么怎么样发送大于128的数据呢?方法是采用二进制方式发送数据。首先定义一个二进制类型的数组,然后把要发送的数值赋给二进制数组,再通过Mscomm发送。如发送数值220的具体过程如下: Dim data(0) as byte 定义发送数据数组 Data(0)=220 给数组赋值 Mscomm1.output=data(0) 发送数据 4.2.4 数据的接收 接收数据有两种方式,一、以文本方式接收(InputMode=0);二、以二进制方式接收(InputMode=1)。 1.以文本方式接收数据 在InputMode=0的模式下,是以文本方式接收数据,在接收数据之前,我们必须先定义一个字符串变量,用以接收数据缓冲区里的数据,具体过程如下: Dim receive As String * 1 定义接收数据变量 Select Case MSComm1.CommEvent 判断事件类型 Case comEvReceive 事件类型为接收数据 receive = MSComm1.Input 接收数据 End Select 2.以二进制方式接收数据 在InputMode=1的模式下,是以二进制方式接收数据,在接收数据之前,我们必须先义一个二进制类型的数组,用以接收数据缓冲区里的数据,过程如下: Dim receive(n) As Byte 定义接收数据变量 Select Case MSComm1.CommEvent 判断事件类型 Case comEvReceive 事件类型为接收数据 Mscomm1.InputMode=1 接收方式为二进制方式 For k=0 to n Receive(k) = MSComm1.Input 接收数据 Next k End Select4.3 编程思想 要实现LED汉字显示屏的动态滚动显示效果,其实就是以固定的合适周期,显示一幅幅不同内容的屏幕画面。所以在软件设计上,只需按照一定的时间间隔改变存储于显示缓冲区的信息内容。比如左移的动态效果,就是让显示缓冲区的点阵数据向左移动一列,由于显示缓冲区的所有数据左移一列需要一定的时间,不可能在两次中断间隔时间内实现这一处理过程,鉴于此,就需要设置两个显示缓冲区,一个用于保存当前屏幕正在显示的信息数据,另一个则用来对当前的信息数据进行处理。在到达换屏时间间隔后,切换当前显示缓冲区到数据已经处理的显示缓冲区,然后再对另一显示缓冲区进行数据处理,以此循环下去。要保证动态显示的正常,符合人们的视觉习惯,最根本的问题是如何分配刷新显示屏的定时时间与两个显示缓冲区数据显示、处理的替换。为了二者的处理时间不相互冲突,本设计采用的方法是使显示缓冲区的数据处理在多次多次定时中断程序执行之间的时间间隔内进行并完成。 数据处理时间=(定时中断时间-传输数据时间)中断次数 这样,只要合理的设定中断次数就能保证刷新屏幕间隔时间内显示缓冲区有足够的时间处理数据。4.4 字模处理 从字节长度看,汉字占两个字节(Byte),数字只占一个字节,那么:汉字字模为16*16个点),ASCII码字符的字模为8*16个点。这样字模的长度不同,处理起来就会有困难。为此,本设计采用这种字模处理方法:把汉字拆成两半,这样就与英文字母和阿拉伯数字的字模统一起来。字模的存储是按顺次存储在数据存储区里,如苏字的字模在数据存储区里是这样存放的:uchar code tab32= 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次的外循环,至此,整个屏幕的数据就都处理完了。再启动更新信号,交换显示存储区,显示程序就显示刚才处理好了的内容,接着,单片机再对另一显示存储区的数据进行处理,处理完成后再交换显示。如此这样,就能实现左移的动态效果。程序流程图如下图所示:具体源程序如下:void rtol(void) uchar a,b,i,k,u,n; while(1) /- /判断内容改变没有? if(change=1)break; /- for(n=0;nleng;n+) /一共有length个字(8*16) /- /判断内容改变没有? if(change=1)break; /- for(i=0;i8;i+) /一边字有8位,要移8次 /- /判断内容改变没有? if(change=1)break; /- if(choose=1) /处理显存1区 addr2=0; else /处理显存2区 addr2=256; /- for(k=0;k16;k+) /一屏要处理16个字(8*16) for(u=0;u16;u+) /一个字要处理16个字节 num=512+u+k*16+n*16; a=*num8-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次,直到全部显示内容显示出来。设定程序,显示内容闪烁三次。接着退出的方法差不多。区别仅是每次取的行数不一样。程序流程图如下:具体源程序如下:void rise(void) uchar i; uint k,g,t,m; /- deal(); /显示前把数据重新排列 /- while(1) /- /判断内容改变没有? if(change=1)break; /- for(t=0;t2;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;k256;k+) /一屏有256个字节 dispd=addr2+k; num=g+k; *dispd=*num; g+=16; /指向上一行数据 while(jh=0); jh=0; /关交换信号 choose=choose; /- 定一会 for(i=0;i25;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;m34000;m+); TR0=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m35000;m+); 4.5.3 掉下效果编程 掉下的动态效果的实现与上升的编程思想差不多,也是设定一个16次的循环,在第一次的循环中,只读取显示内容的最后一行数据,放到显存的第一行里。在第二次循环中,读取显示内容的第15和第16行数据,并依次放入显存的第1和第2行。如此循环16次,整屏幕的数据都显示出来。退出同理。不再复述。程序流程图如下:具体源程序如下:void drop(void) uchar i; uint k,g,t,m; /- deal(); /显示前把数据重新排列 /- while(1) /- /判断内容改变没有? if(change=1)break; /- for(t=0;t2;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;k256;k+) /一屏有256个字节 dispd=addr2+k; num=g+k; *dispd=*num; g-=16; /指向上一行数据 while(jh=0); jh=0; /关交换信号 choose=choose; /- 定一阵 for(i=0;i25;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;m34000;m+); TR0=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判断内容改变没有? if(change=1)break; /- for(m=0;m35000;m+); 4.6 上位机串口通信软件4.6.1 界面设计新建一个窗体From1,添加以下主要控件: 1、ProgressBar1 2、Commad1、Commad2 3、Frame1 4、Combo15、Text1软件界面如下图:4.6.2 程序编写 首先对8051串口进行初始化,与上位机通讯接收数据,判断数据是否接收完,如果没有继续接收,如果接收完则计算地址偏移量然后从字库中取字,最后固定显示并移动。传输函数编程流程图如下图所示源程序如下:Public Sub port(contton As String, msg As Byte, way As Integer) - Dim counter As Integer 进度条 Dim x As Long 保存字的位置 Dim num As Integer 计算字的个数 Dim data As String * 4 接收数据 Dim se(0) As Byte If contton = Then MsgBox 没有输入要显示的内容,请输入! Exit Sub Else num = Len(contton) - 校对有没有字库里没有的字符? For k = 1 To num x = Asc(Mid(contton, k, 1) If (x -23617 And x -2050 And x 126) Then If x 9 Then 判断是不是Tab键? none = Mid(contton, k, 1) MsgBox 字库中没有输入的字 & none & 字符的字模., vbCritical, Wrong Exit Sub End If End If - 计算中文的个数 If (x = -20319 And x = -24158 And x = -23617) Or (x = 9) Then cal = cal + 1 End If Next k num = num + cal * 进度条 counter = num * 16 send.ProgressBar1.min = 0 send.ProgressBar1.Max = counter send.ProgressBar1.Value = 0 counter = 0 On Error GoTo closed 处理串口没有打开的情况 - 发送校对符 main.MSComm1.Output = Chr(6) For tim = 0 To 2000000 延时 Next tim If main.MSComm1.InBufferCount 0 Then If Asc(main.MSComm1.Input) 16 Then main.MSComm1.InBufferCount = 0 清空接收区 MsgBox 传输错误,请检查各硬件是否正常?, vbOKOnly, 传输错误 Exit Sub End If Else MsgBox 传输错误,请检查各硬件是否正常?, vbOKOnly, 传输错误 Exit Sub End If - 发送启动符5(任定,作为地址信号) main.MSComm1.Output = Chr(5) - 延时 For tim = 0 To 1000000 Next tim - 发送显示方式 main.MSComm1.Output = Chr(way) - 发送字符串的长度 If num 256 Then 0255 se(0) = num main.MSComm1.Output = se main.MSComm1.Output = Chr(0) Else 256500 se(0) = num - 255 main.MSComm1.Output = se main.MSComm1.Output = Chr(1) End If Open c:HanselLED.fon For Random As #1 Len = 4 打开字库 - 处理传输中出错的情况 On Error GoTo wrong - 传输 num = num - cal For k = 1 To num x = Asc(Mid(contton, k, 1) If x = 9 Then Tab键占一个格 For a = 0 To 31 main.MSComm1.Output = Chr(0) * 进度条 send.ProgressBar1.Value = counter counter = counter + 1 Next a ElseIf -20319 = x And x = -2050 Then 中文字符 If x = -20319 Then x = 3169 Else f = (x + 20318) / 255 c = Int(f) d = (x + 20318) Mod 255 x = 32 * (c * 93 + d + 100) + 1 End If x = 32 * (x + 20418) + 1 汉字的位置从第100位开始存储 - 取字模 ofe = 0 For big = 0 To 1 For a = 0 To 15 Get #1, x + a + ofe, data b = Val(data) se(0) = b main.MSComm1.Output = se * 进度条 send.ProgressBar1.Value = counter counter = counter + 1 ofe = ofe + 1 Next a ofe = 1 Next big ElseIf -24158 = x And x = -23617 Then 全角字符 If x = -20319 Then x = 219809 Else f = (x + 24157) / 255 c = Int(f) d = (x + 24157) Mod 255 x = 32 * (c * 93 + d + 6870) + 1 全角符号的位置从第6870位开始存储 End If - 取字模 ofe = 0 For big = 0 To 1 For a = 0 To 15 Get #1, x + a + ofe, data b = Val(data) se(0) = b main.MSComm1.Output = se * 进度条 send.ProgressBar1.Value = counter counter = counter + 1 ofe = ofe + 1 Next a ofe = 1 Next big Else x = 16 * (x - 32) + 1 ASCII码字符从第1位开始存储 End If - 取字模 For a = 0 To 15 Get #1, x + a, data b = Val(data) se(0) = b main.MSComm1.Output = se * 进度条 send.ProgressBar1.Value = counter counter = counter + 1 Next a End If Next k Close #1 If msg = 0 Then main.MSComm1.PortOpen = False For tim = 0 To 2000000 延时 Next tim main.MSComm1.PortOpen = True End If * 进度条 send.ProgressBar1.Value = 0 End If main.StatusBar1.Panels(7).Text = 显示屏开 main.showYN.Checked = True Exit Sub closed: 处理串口没有打开的情况 MsgBox 找不到COM口,请打开串行口!, vbCritical, HLED4.0 Exit Sub wrong: 处理传输中出错的情况 MsgBox 传输中断,请断开显示屏电源,重启显示屏!, vbCritical, HLED4.0 End Sub5 系统设计总结 本设计针对显示内容可任意修改、显示方式和显示屏大小可任意设定等要求,采用了显示板模块化、产品化设计,设计出一套适用范围广、显示效果好、质量可靠的智能LED显示系统。 (1)采用灵活的积木式结构设计,安装快捷,更换、维修方便,采用显示单元板或显示单元箱体,可按客户要求任拼凑装配所需显示屏尺寸,并且便于维护。 (2)模块化电路系统,电路设计按照功能分成不同模块,每个模块之间仅需要极少的连线,大大提高了系统稳定性、可靠性。安装、调试、维护简单方便,难度大大降低。 (3)从方案的设计、硬件软件的设计、器件的选取、制造工艺等诸多方面采取有效可行的技术手段,全面考虑各种可能存在的干扰因素,确保系统稳定安全可靠的运行。 (4)应用面向对象的编程言语实现了界面友好、图像显示、内容丰富、方便扩展的人机接口。 (5)超集成控制系统,集中控制的设计思路。将90%的控制过程集中在主控系统上,而显示屏主体仅有基本的驱动电路,而没有复杂的控制电路,极大的提高了LED显示系统控制部分的准确性、稳定性、可靠性,从而增加了整个系统的可靠性和可维护性,大大降低了控制线路的费用,降低了LED显示系统的硬件成本。 (6)本系统控制方案合理,工作可靠性高,人机界面友好,操作方便。 结 论本毕业设计的对象是基于单片机的LED汉字显示屏,目的是设计出一款以AT89C51单片机为核心,采用串行传输、动态扫描技术、制作一款拥有PC机通信功能的,模块化LED多功能汉字显示屏。毕业设计是理论联系实际的最有效方法,而对于我们所学的专业,对于实践的应用则更为重要。在具体设计过程中,必须考虑到方方面面的问题,在理论上正确无误的设计中,而在实际中往往存在各种问题。这样,在设计时就必须考虑所设计是否合理,在实际运用中能否正常使用,是否符合实际的应用要求,而能投入生产使用,而不仅仅考虑理论上的可行性。通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!