中国知网查重 高校在线论文查重入口

立即检测
  • 58 元/篇
    系统说明: 知网职称论文检测AMLC/SMLC是杂志社专用系统,针对投稿论文、评审论文、学校、单位职称论文的学术不端重复率检测系统。
  • 298 元/篇
    系统说明: 知网本科论文检测PMLC是最权威的大学生毕业论文检测系统,含“大学生论文联合对比库”,国内95%以上高校使用。检测结果和学校一致!
  • 498 元/篇
    系统说明: 此系统不支持验证!可用作研究生初稿检测,相比知网VIP5.3缺少“学术论文联合对比库”,检测结果有5%左右的误差!(论文中若参考往届研究生论文,重复率误差会较大)
  • 128 元/篇
    系统说明: 大分解论文检测系统,对于想检测学术不端文献检测系统,而又价格便宜的同学可以选择,限每篇2.9万字符,结果与大学生PMLC、硕博VIP定稿系统有出入!
  • 68 元/篇
    系统说明: 知网论文小分解检测系统,适合中国知网初稿查重,数据库和定稿查重不同。结果与本科PMLC,研究生VIP5.3有出入,限每篇1.4万字符!
  • 3 元/千字
    系统说明: 学术家论文重复率检测系统,支持学位论文、毕业论文、投稿论文、职称评审论文,提供全文对照,word标红报告,性价比超高!
论文写作模式-基于单片机的1616LED点阵显示屏设计
时间:2021-04-20 12:00:26

  LED点阵显示屏系统在当今社会上有着广泛的应用和市场需求,但是产业内由于标准不统一,所以产品质量参差不齐。尤其是小型LED点阵屏系统,没有规范化生产,产品类型没有完全饱和,针对这一市场空白,本设计旨在设计一款灵活可控,显示稳定,性价比高的16乘16发光二极管点阵显示屏。以STC89C52单片机为控制核心,16乘16的单色点阵显示屏是由四个8乘8的单色LED点阵屏组成,利用译码器74LS132移位寄存器74ls194组成行驱动与列驱动电路串行输入,显示的方式为动态扫描,利用重叠的方法使显示稳定。该显示屏利用取字模软件显示汉字,并且通过硬件电路和程序实现下列功能:按键可以操控显示屏的显示方式,显示方式有静止显示和各个方向的滚屏循环显示,红外遥控结合上位机通讯控制显示内容。本文所用的研究方法主要为枚举法、方案比较、实验论证等,采用C语言编写,软件用的软件是Keil C51,硬件电路的设计与仿真用的是proteus。本文系统的讲述了该设计的设计思路,以研究背景和资料、功能要求方案选取、硬件电路设计、软件程序设计、实验结果的顺序讲述。

  1.1课题研究背景和意义

  LED点阵显示屏是20世纪80年代后期在全球范围内发展起来的一种新型显示信息的媒体。LED点阵显示屏由数个排列组合的发光二极管组成,以控制各个小灯的方式来显示字符、图片、视频等[1]。它是一种具有模块组件的显示设备,一般由显示的模块、电源系统和控制系统组成。现如今,电子技术发展迅速。LED显示设备已经成为显示信息的重要媒介,无论是在通信、体育竞赛、经济证券等行业,还是在军事调度、国防等领域都得到了很多的的运用。所以LED点阵显示设备的研究、生产在当时的经济背景下高速发展,自然而然的形成了一个产业,在固有的光电产业中,形成了一个新领域。LED电子显示屏有很多优点,比如说:信息量大、外观漂亮、可操作性强等,所以广泛适用于各种场景,比如交通枢纽、证券市场、文娱场馆、体育场馆等公共场合。由此可见,LED显示屏可以说被视为一个现代城市作为信息化社会的基础标识。成熟的LED点阵显示屏设备,其设计广泛涉及多项计算机技术、电子技术,囊括微型计算机、数据通信、显示、存储、电源、软件、接口和驱动等。国内经济在持续高速发展,对信息传播的需要也愈来愈多。除了上述优点之外,LED点阵显示屏还有着功耗不高、寿命极长、占地空间不大、重量小、续航稳定、后续维护简便等特点,因此在市场发展中起到了愈来愈关键的影响。LED点阵显示屏有极具潜力的市场和广大的发展前景,但在实际应用中仍存在功能单一、显示信息变化麻烦、灵活性差等缺点。因此,有必要设计一种新颖实用的LED点阵显示系统。

  LED点阵屏原理是发光二极管显示屏根据半导体发光二极管的像素点阵排列的显示装置。发光二极管的照明方式由单片机控制。把设计好的程序烧录到控制芯片单片机中,就可以实现预想的显示效果,并显示各种视觉信息,如文本、图像、图形等。

  LED显示屏作为高新科技屏幕产品,集单片机、信息处理、光电子等多项计算机技术与电子科学于一体,显示效果优良、图像效果清楚、没有杂点、显示稳定。显示模式可以灵活多变,并且可以由用户以任何排列模式显示。显示的内容量大且局限性小、维护简单、续航可靠,别的显示屏在这些方面无法跟LED显示屏比拟,所以LED显示屏被社会经济的多数领域所应用。

  在设计单片机时,点阵可以动态或静态显示。静态显示可以克服占用单片机更多I/O口资源的问题。随着科技的进步,20M是目前单片机的时钟速度可以达到的较高水准,这就表示因为人类眼睛的视觉暂停效应,选用动态扫描可以改善占用过多I/O口资源的缺点[2]。

  由上可知,LED电子显示屏有很多优点,像视角大、亮度强、安全性高、健康环保等等。适合在医用场所,金融中心,商店等大多数公共场所常态照明,传示信息。发光二极管的大部分优点可以达到各式各样应用场景的需求,有很大的发展潜力,因此得到了大量广泛的应用。

  1.2国内外研究现状、研究方向

  在生活中人们处处可见,LED点阵屏在现代社会得到了更加广泛的应用,比如通知、广告宣传等作用。LED显示屏是由一块块小的LED点阵进行组合而成。LED点阵对于当前社会的发展来看前途宽广,因为LED的耗能低、发光密度好、发光均匀度好、可靠性高。LED点阵显示使用方便,显示图形文字稳定清晰,有良好的市场价值。

  (一)LED点阵屏早期研究方向

  通过查阅文献可以发现,在2013年左右,LED点阵显示屏系统已经有了相对成熟的应用,为后来的发展方向奠定基础。早期点阵屏主要功能就是显示文字,显示特殊符号需要还需要将LED模块按一定要求的行列组合才可以显示出更丰富的内容。当时技术的两大特点,一是选用单片机一般为为当时市场主流的51系列单片机等,二是Proteus仿真软件早已流行,用它来为LED点阵显示屏系统设计和仿真电路的案例丰富,技术成熟。[3]。

  (二)国外研究方向

  国外对于LED点阵屏系统的研究资料较少,查阅到的内容大多数是一些研究所与大型公司合作研发的新型LED屏幕,有生物屏幕、软屏、可擦除透明书写屏等。还有在现代都市广告与建筑亮化大屏幕LED领域里关于实现计算机与LED显示屏同步显示的研究等。但对于小型LED点阵屏系统的实用型设计比较稀缺。

  (三)国内研究现状

  如今国内对LED点阵屏系统的研究已经在多个角度有了不同程度的发展。从控制核心来说,从早期清一色的51系列,发展出了以MSP430为控制核心的设计、基于STM32单片机的LED点阵显示屏设计等等。从控制方式来讲,已经由单一的单片机控制LED屏到现在增设了键盘、红外遥控、PC机作为上位机等多种控制方式。从功能来说,静态文字显示是最基础的用途,后来发展出了滚动循环、跑马灯、双色显示等形式多样的展现形式,通过加装字库,显示内容也不再局限于简单文字。还有基于LabView、基于FPGA、基于QQ物联等多种新颖实用、符合现代社会需求的技术创新。尽管如此,LED点阵显示屏系统仍然有很多的发展空间,因为大部分的研究都是基于某些特定的需求而设计的,在整个领域宏观上展现多样性的同时,具体个体的局限性暴露了不具有普遍适用的特点,需要设计一款功能齐全实用,灵活可控的LED点阵显示屏系统来填补这个空白。

  LED显示屏技术的近年来的发展情况是这样的:从1980年以后开始,随着LED制造技术的持续完善,在国外的应用广泛传播。国内的情况是在1990年以后,国内市场经济高速发展,各种场所对于信息广而告之的需求也是同时增多,LED显示屏的大量投放正好契合了那个时代的市场形势,随后国内,LED显示屏的研发技术、制造水准、使用水平都得到了很快的提升[4]。

  近年来我国在LED领域的研究工作成绩很不错。中国的LED显示屏在成批量的发展的同时,产品技术也在不断地除旧更新,在国际上保持着相对领先的水准。外国公司在国内竞争销售不容易。比如说,国内超大规模集成电路(Very Large Scale Integration)的发展使得LED显示屏的核心技术越来越完善,数字信号处理技术、可编程逻辑器件以及可擦除可编辑逻辑器得到了广泛的应用,专用的LED控制IC电路正在被一些厂商研究。跟等离子显示屏、液晶显示屏等类似平板显示屏产品相比,由于LED产品具有寿命长、性能稳、功耗小以及价格低等优势,在大多数实际应用的情景都有更强的营销竞争力和技术优势,很有市场潜力。这些新技术、新器件的出现,LED的应用领域得到了拓宽。我国台湾省点阵显示屏产业也相当发达,近年来台湾发光二极管产业则主要向巨型化、多彩化、和高亮度的趋势发展。

  中国的LED显示屏的技术不仅保持着相对领先,而且应用领域也很广,社会经济的众多领域都有所涉及。使得整个行业在渐渐走向规范。趋向于标准化、亮彩化、产品类型多样化是当前的发展方向。预测大面积、巨型发光二极管显示屏的主要产品格局将会有很大的变化,而更有发展潜力的预计是适合于专业性更强的或者平常商店、家用的小面积、小型发光二极管显示屏。面向这种需求范围,LED显示屏的种类分支会更为充实,市场潜量求应该会有所体现,像医疗场所、交通枢纽、各类商店等综合显示功能的显示屏,需求大概率会有不少的提升,成规模的小面积正规系统的LED显示屏在产业总额中也很有可能会提高其所占比例而占大份额。

  LED显示屏领域目前存在问题:

  (1)通过上位机控制LED显示、滚动的技术仍然没有完全成熟,有改进的空间。如何改善现有LED点阵显示屏系统功能单一、灵活性不够等缺点(问题体现在诸如更换显示内容不易等方面)仍需要进一步改进和研究。

  (2)中国近年至少有上千家号称做LED显示屏的公司,但是行业内也不可避免的存在了规格与标准混乱的问题,如果不能解决问题、构建正规的标准化产业体系,那么产品的质量在标准化等方面以后肯定会遇到更严重的问题,更别说企业,行业都会遭遇瓶颈。

  1.3本章小结

  LED显示屏技术发展日趋成熟,国内技术领先全球,但是市场上LED显示屏产业存在管理标准混乱,质量层次不齐的现象,而且国内LED显示屏发展趋势是小型化,目标用户是小型商户,所以现在行业内需要研发一款灵活可控,显示稳定,性价比高的发光二极管点阵显示屏系统。国外研究趋势难以借鉴,国内LED产业发展特点是多样性,基础技术十分成熟,可以借鉴经验,结合部分个人理解完成设计。

  第二章功能要求及方案选择

  2.1功能要求

  本方案设计的是基于单片机的16*16LED点阵屏系统,具体满足要求如下:

  (1)设计一款LED点阵屏,可以显示汉字;

  (2)通过按键控制LED显示屏内容的显示方式;

  (3)可通过PC机发送需要显示的字符或汉字;

  2.2系统方案设计

  本设计主要有4大功能模块:16*16LED点阵显示、PC串口通信、红外遥控、按键。可用PC机发送需要显示内容给STC89C52单片机,STC89C52单片机接收到内容后显示到16*16LED点阵屏上,同时可通过按键或者红外遥控来控制点阵屏滚动播放的方式(上下滚屏、左右滚屏)。其系统框图结构如图1系统框图所示。

  图1系统框图

  2.2.1显示单元的方案选择

  LED点阵模块通常是封装好的八乘八的LED组合单元板。但是预计效果是想完整显示汉字,那就需要拼接一个16乘16的LED点阵模块。所以为了实现理想的显示效果,在显示单元的选择上采用了四块封装好八乘八的LED组合单元板拼接成16乘16的阵列。这样一个显示模块足够显示完整的汉字。所以在显示模块的设想上是16乘16的单色点阵。

  2.2.2单片机控制器的方案选择

  因本设计对控制芯片的CPU运算速度要求较高,综合性价比考虑后选择优先级较高的有ARM7和高速八位单片微型计算机。虽然ARM的运算速度符合设想,但对于点阵屏的使用,考虑到其内部资源的利用不充分和偏高的价格。所以选择高速八位单片微型计算机作为控制芯片,比较普遍的高速八位单片微型计算机有51内核的单片机。51系列单片机的处理速度基本都能实现每秒执行一百万条指令。别的单片机系列,比如AVR系列单片机因为其时钟频率最高只能到十六兆赫,所以弃选。而51系列中的C8051F系列片上系统类似于ARM7处理器,时钟速度可到一百兆赫,不过同样会因资源利用不充分造成浪费,而且成本较高,用在单色点阵屏的控制中性价比不高弃选。同理可排除其他性价比不合适的机型,于是最佳选择为STC89C52微控制器,其极限时钟可达四十兆赫,接口和存储的资源较为充裕,价格非常便宜,成本节省很多[5]。单片机对比如表格1不同嵌入式处理器简介所示。

  单片机推出公司内核结构字长特性

  STC89C52 Inter CISC哈佛结构8位成本低

  AVR系列Atmel RISC哈佛结构8位高性能、高速度

  表格1不同嵌入式处理器简介

  2.2.3显示方式的方案选择

  显示方案从下列两个方案中选:

  方案一;静态显示,原理简述:将一幅画面中的所有led的状态分别用假和真表示,如果是假,则表示发光二极管没有电流,即没被点亮;如果是真,就说明led被点亮了。如果给所有led一个驱动电路,一帧图像输入以后,所有发光二极管的样子维持到下一帧图像。这种方式虽然原理浅易,控制简便,但是实际操作起来,有很多问题,需要加设的锁存扩展端口或译码驱动的装置很多,接线复杂,会抬高成本价格,也不够稳定。

  方案二:动态显示,即对一帧图像进行切割,对分割图像的所有个体单独显示。这种方式跟上一种相比,就可以避免很多问题。但实际操作时如果没设计好,也容易形成亮度不够或者挡光闪烁的麻烦。所以更科学的设计思路应该保证驱动电路好实现的同时,还要避免出现上述问题。可以采用多路复用技术,不需要无穷的添加复用层数,之所以用这种方式人眼可以看到仿佛一帧稳定的图像,是因为视觉上的惰性。最终效果和led灯管的持续时长,亮度都有关系。通过现有的数据可以片段,当扫描重复次数能达到至少一秒二十四次,led导通时间不小于一毫秒时,显示的亮暗程度就能保持较好的状态,而且稳定。

  相比较而言,显示方案上选择动态扫描。

  2.2.4显示驱动器件和数据传输的方案选择

  方案一:并行传输数据方案。并行传输是主电路用传递信号的线分别对每行列传输数据。很显然,如果选取这种方式,在行列数多的时候,驱动器的大量线路相应需要更多外设,成本价格上涨,所以这种方式不宜采用,为了解决该方式带来的弊端,可以用串行的方式。

  方案二:串行传输数据方案。led屏所有单个单元内的各个驱动得电路和每一级联动部分之间,各个时钟就传递单个位数据,单元显示屏接到的的数据或者命令,来自于主控的电路或是上一级显示模块,而且经手过的这些信息可以毫无变化的再传递给下一级的显示单元。第二个方案相较来说比第一个更为常用,涉及的硬件也更常见实惠,这个方案能够节省很多为了数据传输的驱动器件,降低成本提高性价比。不过串行传输也有缺点,就是刷新频率不够高。因为传输一轮数据之后再显示数据,使得传输的过程由于被分割而变长,而因偏长的准备期,在软件设计时会给编程带来麻烦。

  所以采用重叠处理,为了实现这一设想,列驱动选用74LS194构成八位移位寄存器,时序信号可以实现三十六兆赫[6]。行驱动选用74LS132译码器,作为一种四线十六线译码器,输入终端是四位高有效2进制数,数据输出端为十六位低有效2进制数,使单片机的引脚得到了合理应用减少占用。

  2.2.5关于点阵数据存储的方案选择

  果断排除ROM和RAM,采用EEPROM技术,上位机使用取字模软体把还没显示的文字符号以对应的字模信息记录为数据,按排列规则编祉后把这些数据记载在EEPROM中。在led屏显示的过程中按规则取出EEPROM中的字模的信息进行处理。该储存方式有稳定、性价比高、功耗小等优点,是一个相对好的选择。单片机内部的EEPROM储存空间大小足够设计使用。

  2.2.6关于控制模块硬件的方案选择

  在综合考虑实用性实现难度等各方面后,选择用红外遥控+按键硬件这一方案,实现外设对LED屏的操控。该方案是通过按键控制文字不同方向的滚屏操作,通过红外遥控的控制器输入编码,红外接收头接受数据后在屏上显示对应的字符。查阅资料之后,这套硬件方案在与上位机有串口通信这一设想的前提下,相较传统方案更符合设计目的中灵活性、方便操控这一理念。经过比较HX1838与IRM-3638T,红外接收头最后选用IRM-3638T。IRM3638T在日常生活中比较常见,具有抗扰能力强的优点。

  2.2.7关于上位机通讯串口的方案选择

  方案一:串行通信接口RS232。但是选用的单片机STC89C52,接口的标准用的是TTL信号系统,RS232在输入输出上没有达成一致。好在可以采用单电源电平转换芯片解决这个矛盾,MAX232芯片,它能够用单电压实现逻辑的电平转换。如果采用此方案,不足之处就是传输效率较低,不过好在串行通讯简单易行,设置调制速率,就能让双方达成通讯了[7]。

  方案二:CP2102,这是USB转串口芯片。单片机串口需要与PC机进行通信,因为现在很多计算机都已经取消串口接口,而现在USB接口应用普遍[8]。这个串口芯片是一个集成度高的USB到通用异步收发传输器桥,一个实现方案的思路是使用小组件和印制电路板来实现RS232接口。

  相较而言,方案一虽然落后但是实现方便,主要的缺陷是接口问题,很简单可以通过现成的USB转RS232转接线解决。而方案二的缺点是增加了设计的步骤和难度,一个现成的转接口和转串口芯片相比,显然前者简单。根据奥卡姆剃刀理论,选用步骤少更简单实现的方案一。

  2.3本章小结

  通过枚举,比较等方法,结合整体与设计目的挑选各个模块方案,最后敲定的总体方案,综述系统的结构和原理:在显示模块上选择了能够显示汉字的16乘16的单色led点阵屏。考虑硬件的经济性,选用STC89C51作为单片机控制器。所谓动态扫描显示即轮流向发光二极管送出亮灭的数据,每一行的同名列共用一套驱动。阐述原理:选用的是共阴极、规格为16乘16的发光二极管点阵屏,相同行的灯管的阳极相连,共同列的二极管的阳极也连在一起,先送出对应首行灯管亮灭的信息并缓存,然后选通首行使其点亮一阵周期,继而掐灭;再送出次行的信息并缓存,然后选通下一行使其点亮一样的周期,继而关灭;相似类推,最后一行之后,再重新点亮首行,重复执行。当重复执行的频率足够高,即能到到一秒二十四次往上,人类视觉的惰性会让眼球在点阵屏上看到一帧固定图像。使用这种方式时,每一行有专用行驱动,不同行的同名列共享专用驱动器件。显示数据存储在内部E2PROM里,按顺序八位一个字节排列。工作过程中把同一行中每列的信息都发送到对应的列驱动上,釆用串行传输的方法,电路的控制部分用一根传送信号的数据线,将每列的信息每位相继传往列驱动器件。这种传输方式中列数据的预备和显示两个先后过程的延长周期问题,可以用重叠处理,在显示本行各列数据的同一时刻,传输次列数据。总结以上需求得出对行驱动器列驱动电路的要求,列驱动电路选择移位寄存器74ls194,行驱动选用74LS132译码器。而控制模块,选用红外遥控结合按键这一外设组合。串口通信用RS232和usb转换头实现。图1为显示屏电路实现的结构框图。

  第三章系统的硬件电路设计

  3.1单片机系统介绍

  STC89C52是一款速率快、能耗低、抗干扰能力强的单片机,使用的还是51内核,同样,指令和代码也可以兼容。但是跟很多传统51系列单片机相比,STC89C52有了很多优势,多了个别功能[9]。字长8位,拥有可编程闪存,使得STC89C52可以灵活有效的实现设计方案。这是主要的控制芯片部分。控制芯片串口如图2 STC89C52串口图所示。

  图2 STC89C52串口图

  主要特性如下:

  (1)8位MCS-51核,所以与MCS-51指令集和输出管脚相兼容。

  (2)正常工作时电压范围是3.3V到5.5V

  (3)正常工作时频率范围是0到40兆赫,最高可以达到48兆赫

  (4)ROM有8KByte,RAM有512Byte,内带EEPROM有4KByte;

  (5)三十二个通用I/O口,P0到P4,但是P0特殊,内部没有上拉电阻;

  (6)可以利用串口下载程序;

  (7)有看门狗功能

  (8)定时器有三个,T0,T1,T2;

  3.2电源电路设计

  电源电路用到了7805稳压模块和ams1117-3.3伏稳压模块,VCC接3.3V电源,VSS接地,很适配的为控制器提供了电源[10]。电路图如图3电源电路图所示。

  图3电源电路图

  3.3 LED显示电路及点阵驱动电路设计

  LED显示电路是共阴极点阵屏。点阵数据串行输入,如图4显示电路所示。动电路分为行驱动与列驱动。列驱动与串口相连显示内容,列驱动电路移位寄存器74LS194构成,在显示一列数据的同时传送下一列数据,可以实现重叠处理。行驱动电路选用74LS132译码器[11]。送出行选信号实现用输入输出口控制整行LED灯的亮灭。这部分串口用P1口和P2口低四位控制。显示电路结合行驱动列驱动可以实现动态扫描显示内容,并且重叠处理。如图5点阵驱动电路所示。

  图4显示电路

  图5点阵驱动电路

  3.4红外接收电路与按键电路设计

  红外接收头使用IRM-3638T来接收红外数据。IRM-3638T红外接收头的接收频率是8兆赫到55兆赫,它的三个引脚也是常规引脚接地电源输出,只需要提供常规电源,即可再接收到红外信号后通过输出引脚输出。由于其输出引脚为推挽输出,故需在输出引脚外接上拉电阻。遥控器发射信号,红外接收头接受之后反馈给程序,程序再通过串口与上位机通讯,最终影响到汉字显示。如图6红外遥控电路所示。本设计时为了得到稳定的电源在电源输入端采用滤波按键较少,故直接用引脚检测。四个按键各配一个引脚,每个引脚都接上拉电阻,当按键按下时引脚接地。每个按键接0.01微法的电容消除按键抖动。按键被按下时,对应串口变为低电平,接收器接受到到信号后按键控制程序工作,控制发光二极管显示内容的亮灭和移动[12]。如图7按键电路所示。

  图6红外遥控电路

  图7按键电路

  3.5串口通信电路设计

  设计单片机与PC通信串口这部分时,考虑到新一代电脑基本都弃用了RS232接口,而改用USB接口,但是由于本方案选择的是通讯接口RS232,所以硬件还有一个USB与RS232的转接口。MAX232芯片是专门为RS-232标准串口设计的单电源电平转换芯片,它能够用单电源实现逻辑的电平转换[13]。这套方案不足之处就是传输效率较低,不过好在串行通讯简单易行,设置调制速率,就可以让上位机和下位机实现通讯。结合软件就可以使上位机对下位机起到控制作用。如图8通信串口电路所示。

  图8通信串口电路

  3.6本章小结

  电路模块设计与仿真,主要用了proteus软件,仿真结果没有问题和预想一致,用AD19画的电路原理图,主要电路如图9单片机及外围电路图所示。电路部分的设计经过多次推敲、实验,才能到达最后仿真时的结果可以稳定运行,让功能达到预设。

  图9单片机及外围电路图

  第四章软件设计

  本设计软件主要实现16乘16发光二极管点阵显示。主要功能一是显示汉字,二是用按键切换显示滚屏模式,三是用红外遥控器输入对应字符编码显示在点阵屏上,用上位机传输显示内容。其主要流程如图10主程序流程图所示。

  图10主程序流程图

  4.1 LED点阵显示软件模块设计

  通过主程序来监控子程序的执行。点阵显示驱动程序主要实现对74ls194和74LS132的驱动编写,主函数对移位寄存器进行初始化,再调用相关子函数来实现动态显示的目的,循环往复结合子函数中的延时函数,就可以刷新显示屏,让人眼看到稳定图像。这部分程序主要作用是向点阵屏传输显示信息,利用各种控制信号,让行列驱动完成扫描工作,保证屏幕显示稳定[14]。。显示模块的行与列采用了多个串口控制,并且使用行扫描,即从首行一直到尾行,每扫描一行对列进行传输数据。本设计的显示方式有五种形式:静止状态、上方滚屏、下方滚动滚屏、左方滚屏、右方滚屏。使用按键来控制显示模式。处于静止状态时,发光二极管显示屏上稳定显示汉字保持静止;上下方向滚屏,发光二极管显示屏上显示汉字缓缓上方滚屏或下方滚屏,不断移入移出。上方和下方滚屏操作的原理通俗来讲,就是把正在屏幕上的汉字在点阵信息在存储的数组中循环移动;左右方向滚屏,在发光二极管显示屏上正在显示的汉字缓缓的左方滚屏和右方滚屏,也是反复移动。同理实质上是让汉字的点阵数据中每个字节循环向右或向左移动,让led屏的显示即为左右滚屏循环移动。在主函数中完成子函数的调用及汉字的位移操作,所以视觉上能够看到汉字平移的效果。

  截取部分程序展示:

  (1)显示循环部分程序

  for(j=0;j<count;j++)

  {

  Write_Max7219_byte(i);//写入地址,即数码管编号

  Write_Max7219_byte(disp30[j][i-1]);//写入数据,即数码管显示数字

  _nop_();

  }

  (2)锁存部分程序

  void Delay_xms(uint x);

  void Write_Max7219_byte(uchar DATA);//写入一字节

  void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2);

  void Init_MAX7219(void);

  //锁存进相应寄存器

  //延时n毫秒

  void delay_ms(unsigned int n)

  {

  unsigned int i=0,j=0;

  for(i=0;i<n;i++)

  for(j=0;j<123;j++);

  (3)译码器部分程序

  /*Write_Max7219(0x09,0x00,0x09,0x00);//译码方式:BCD码

  Write_Max7219(0x0a,0x03,0x0a,0x03);//亮度

  Write_Max7219(0x0b,0x07,0x0b,0x07);//扫描界限;8个数码管显示

  Write_Max7219(0x0c,0x01,0x0c,0x01);//掉电模式:0,普通模式:1

  Write_Max7219(0x0f,0x00,0x0f,0x00);//显示测试:1;测试结束,正常显示:0

  */

  uchar i;

  Max7219_pinCS=0;

  for(i=0;i<count;i++)

  {

  Write_Max7219_byte(0x09);//译码方式:BCD码

  Write_Max7219_byte(0x00);

  }

  Max7219_pinCS=1;

  _nop_();

  Max7219_pinCS=0;

  (4)定时器部分程序

  void Init_Timer0(void)

  {

  TMOD|=0x01;//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

  TH0=0x00;//给定初值,这里使用定时器最大值从0开始计数一直到65535溢出

  TL0=0x00;

  EA=1;//总中断打开

  ET0=1;//定时器中断打开

  TR0=1;//定时器开关打开

  }

  4.2按键与红外接收串口通信模块设计

  四个按键分别控制点阵屏的不同移入移出滚动方式。红外芯片接受到信号,相应程序随即启动,对控制按键进行扫描操作,当检测到有的按键按下时,经解调后发送给STC89C52单片机,通过这样来显示不同的滚屏操作。显示内容是通过串口与上位机进行通信,上位机通过取字模软件V2.02把接收到的需要显示的文字或图形在点阵屏上显示。下位机保持不断地监控,当串口中断时实现和上位机的通信[15]。取字模软件如图11取模设置所示。

  图11取模设置

  截取部分程序如下:

  (1)按键控制滚屏部分程序

  uchar code disp2[64][8]=//滚动显示汉字

  {

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x01},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x01},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x02},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  }

  (2)定义通讯串口部分程序

  //单片机晶振12M

  #include<reg52.h>

  #include<intrins.h>

  #define uchar unsigned char

  #define uint unsigned int

  #define count 64//级联个数

  //定义Max7219端口

  sbit Max7219_pinCLK=P2^2;

  sbit Max7219_pinCS=P2^1;

  sbit Max7219_pinDIN=P2^0;

  (3)其他程序

  void Init_MAX7219(void)

  {

  /*Write_Max7219(0x09,0x00,0x09,0x00);//译码方式:BCD码

  Write_Max7219(0x0a,0x03,0x0a,0x03);//亮度

  Write_Max7219(0x0b,0x07,0x0b,0x07);//扫描界限;8个数码管显示

  Write_Max7219(0x0c,0x01,0x0c,0x01);//掉电模式:0,普通模式:1

  Write_Max7219(0x0f,0x00,0x0f,0x00);//显示测试:1;测试结束,正常显示:0

  */

  4.3本章小结

  软件设计部分主要分为三个模块:点阵屏显示模块,按键红外遥控控制模块,上位机通讯模块,通过按键红外遥控控制上位机与下位机,上位机用串口与下位机通讯,两者结合决定点阵屏的显示内容和显示方式。实现汉字显示及上下左右的挪移。

  整个系统的关键,程序设计这模块,鉴于整体算法比较复杂,选择用C语言编写,因为汇编语言难度大。采用Keil C51进行编写,然后再把程序输入进单片机。在漫长的调试过程中,主程序经历了多次改动和完善,使整体设计更接近预设。

  第五章调试及分析

  用Keil C51和proteus像仿真器一样联调测试,如图12仿真图所示。

  图12仿真图

  用AD19画了PCB图,如图13 PCB布线图所示。

  图13 PCB布线图

  整个过程中发现错误改正错误占用了很多时间,无论硬件还是软件实际操作时问题百出不胜枚举。重复发现bug改bug的过程直到仿真结果可以正常运行。在硬件质量可靠,引脚焊接正确的情况下,经过较少调试硬件就可以正常工作。经过组装焊接调试,显示屏系统可以正常工作。观察显示屏,静态显示时画面静止无闪烁,没有杂点,汉字显示完整。按键与红外遥控操控感良好,经过实际操控,可以让汉字向不同方向循环滚动,与上位机的通信也没有问题,设置好取字模软件后可以通过外设和上位机更改显示内容。综上,基本全部达到了对该设计的功能要求。组装好的实物如图14实物图所示。