• 1.12 MB
  • 2022-04-22 11:26:00 发布

毕业论文1616点阵汉字显示控制器的设计(1).doc

  • 34页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'毕业设计(论文)题目:16*16点阵汉字显示控制器的设计学生姓名:汪滔滔学号:2010013295所在学院:电子信息工程学院专业班级:电子1004班届别:2014届指导教师:张金波 皖西学院本科毕业设计(论文)创作诚信承诺书1.本人郑重承诺:所提交的毕业设计(论文),题目《16*16点阵汉字显示控制器的设计》是本人在指导教师指导下独立完成的,没有弄虚作假,没有抄袭、剽窃别人的内容;2.毕业设计(论文)所使用的相关资料、数据、观点等均真实可靠,文中所有引用的他人观点、材料、数据、图表均已标注说明来源;3.毕业设计(论文)中无抄袭、剽窃或不正当引用他人学术观点、思想和学术成果,伪造、篡改数据的情况;4.本人已被告知并清楚:学校对毕业设计(论文)中的抄袭、剽窃、弄虚作假等违反学术规范的行为将严肃处理,并可能导致毕业设计(论文)成绩不合格,无法正常毕业、取消学士学位资格或注销并追回已发放的毕业证书、学士学位证书等严重后果;5.若在省教育厅、学校组织的毕业设计(论文)检查、评比中,被发现有抄袭、剽窃、弄虚作假等违反学术规范的行为,本人愿意接受学校按有关规定给予的处理,并承担相应责任。学生(签名):日期:年月日 目录1概述21.1研究背景与意义21.2国内外研究现状22开发工具32.1KeiluVision3软件简介32.2Protues7软件简介33系统整体设计方案33.1显示模式方案43.2数据传输方案44系统硬件部分设计54.1单片机系统及外围电路54.2显示驱动电路84.3LED显示屏电路115系统软件部分设计135.1主程序层135.2数据处理程序层165.3数据存储层25参考文献:27 皖西学院2014届本科毕业设计(论文)16*16点阵汉字显示控制器的设计摘要:本设计是16*16点阵LED显示控制设计。这次设计主要采用了具有40个引脚的主流单片机STC89C51,它是美国ATMEL公司生产的。利用其作为核心控制器,在控制行驱动中,主要用74HC138来驱动行线,在控制列驱动中却采用了直接连接IO口的方法,从而控制整个电子显示屏中文字的移动效果。因为显示屏要显示汉字,同时考虑到16进制数据码,所以在设计过程中采用了16x16个LED灯构成。一个单片机总共就40个引脚,如果控制16x16个LED则明显端口数不够用,所以采用轮流显示(即动态显示)一个LED灯,可以达到静止显示,动态移入移出的效果。因为每一个灯的亮灭都是根据其阳极和阴极的高底电平所决定的。利用C语言编程可以使程序代码简洁,且所显示字符的点阵需要的数据是可以通过专业软件提取出来的,使用起来十分方便,也给编程带来了方便。关键字:STC89C51;点阵显示;LEDThecontrollerdesignof16*16latticedisplayChinesecharactersAbstract:Thedesignisa16*16dotmatrixLEDdisplaycontroldesign.Thisdesignmainlyuseshas40pinsofthemainstreamSTC89C51microcontroller,itisUSAproducedbyATMELcompany.Useitasacorecontroller,onthecontrolofdriving,74HC138usedtodriveline,inthecontrolcolumnisdirectlyconnectedtoIOportdriverintheuse,soastocontrolthemobileeffectoftextinelectronicdisplayscreen.BecausethedisplayscreentodisplaytheChinesecharacters,takingintoaccountthe16hexadecimaldatacode,sothe16x16LEDlightsinthedesignprocess,use48x8LEDlampcurrentis.Atotalof40pinsingle-chipcontrol,if16x16LEDisobviouslythenumberofportsisnotenough,sothedisplayrotation(i.e.,dynamicdisplay)ofaLEDlamp,canreachastaticdisplay,theeffectofdynamicmigration.Becauseoftheneedtocontrol256LEDlights,andeachlightisaccordingtothebottomlevelintheanodeandthecathodeofthedecision.UsingtheCprogramminglanguagecanmaketheprogramcodeissimple,andthecharactersdotmatrixdisplaydataneededcanbeextractedbyprofessionalsoftware,veryeasytouse,butalsobringsconveniencetoprogramming.Keyword:Dynamicdisplay;LED;MCU;9 皖西学院2014届本科毕业设计(论文)1概述1.1研究背景与意义自从上个世纪70年代单片机的问世以来,单片机因为的它的价格低功能强大,而不断的受到大量硬件工程师的青睐,而它确实应用十分的广泛,大到航空器件小到电子表都有它的影子。正是因为其体积小、集成高、抗干扰能力强,对环境要求不高,价格低廉,开发容易,而不断的应用到我们日常生活中去。LightEmittingDiode就是我们常说的LED,通俗的说就是发光二极管,它是上个世纪60年代末开发出来的。进入八十年代后,伴随着LED灯性能的不断提高、使用寿命的增长,开始将许多LED灯集成到一个板子上形成一个模块,即LED电子显示屏,它利用每一个LED灯的亮和灭来显示需要显示的内容。这个显示系统涉及到了电子技术、计算机技术、光电子技术、信息处理技术等等,是目前国际上最主流的产品。汉字的显示则必须先要通过字模提取软件提取汉字的点阵码,然后将点阵码文件存入唯一只读存储器中。在使用时,则是先根据汉字点阵码通过一系列的函数处理,然后得到新的移动的点阵码,最终由单片机的IO口输出这些16进制的数据码,表现为LED灯的亮灭,从而显示出要显示的汉字或者动态显示。1.2国内外研究现状随着我国科技的不断发展,单片机技术已经在我国生活的各个层面体现出来,比如现在比较流行的智能家电、以及工业流行的工业自动化、航空航天等等。随着科技成为第一生产力,单片机技术的应用所带来的经济效益也会越来越大。随着单片机技术的不断成熟,以前老套的硬件控制方法正在逐渐被淘汰,取而代之的是用单片机通过软件方法来实现控制。这种软硬结合的新技术也称为微控制技术。改革开放之后的今天,越来越多的公共场合需要实时发布不同信息,而LED显示屏技术的发展正好满足这一要求,于是LED显示屏的技术又得到了不断的更新发展。同时也是因为其易懂易学、结构简单,而不断的受到工程师们的青睐从而逐渐形成了光电产业!9 皖西学院2014届本科毕业设计(论文)2开发工具2.1KeiluVision3软件简介Keil是美国KeilSoftware公司推出的一款单片机C语言类的集成开发系统,由于C语言本身的特点加上Keil软件简单明了的集成环境而易学易用,所以受到广大爱好者的青睐。与其他开发工具相比,Keil有着其独特的开发环境,让整个编程变的更加轻松,仿真更加准确。而运行Keil软件需要WIN98、NT、WIN2000、WINXP、WIN7等操作系统。2006年1月30日ARM推出全新的针对各种嵌入式处理器的软件开发工具,集成KeiluVision3的RealViewMDK开发环境。RealViewMDK开发工具KeiluVision3源自Keil公司。RealViewMDK集成了业内领先的技术,包括KeiluVision3集成开发环境与RealViewMDK编译器,支持ARM7、ARM9和最新的Cortex-M3核处理器。因此Keil软件对于单片机编程者来说是一款极其好用的软件。2.2Protues7软件简介Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。该软件不仅仅具有仿真功能,和其它EDA软件相比它更是有着得天独厚的一面,即它也能仿真单片机及外围器件。他的元件库丰富达到了27000种,而且也可以很方便的创建元件库。其搜索元件库的方式是通过智能模糊搜索这样可以快速的定位所需要的元件;其智能化的连线功能即相似的连线可以直接双击,在很大程度上缩减了绘图所用的时间;在总线布线时使用总线器件工具也可以使电路设计简明清晰。最重要的一点是Protues软件中的单片机可以加载已经生成好的.hex文件,达到正真目的上的实时仿真,可以帮助你快速找到自己在编程中的问题所在。3系统整体设计方案因为单片机要控制多到256个LED灯,所以在显示过程中如果使用传统的静态显示模式,则需要大量的控制器件且随着LED灯的增加呈几何增长,因此只能够使用动态显示模式,即轮流的点亮一个LED,通过视觉停留从而展现出与静态显示模式相同的显示效果。现在多数显示屏流行的都是左右移动显示、闪烁显示、错位显示、以及上下移动显示。虽然显示方法各有不同,但是总的来说都是一个规律,就是不断的利用函数处理原先已经存在ROM中汉字数据码,然后产生新的带有移动性质的数据码。随后单片机就会输出这些16进制数据到IO口从而控制了每个LED灯亮灭。9 皖西学院2014届本科毕业设计(论文)所以只要你控制好函数处理就可以以不同的模式不同的花样显示汉字。当然有时候事与愿违,你设计的函数太过于复杂时,也可以考虑将需要刷新的数据提前储存在唯一只读存储器中,效果显示也是一样的。这次设计我是利用中断来输出显示数据的,中断的时间控制即刷新时间也是有讲究的,如果中断需要的时间条件太慢的话很多移动时的效果更新太慢,不会达到预期的效果就会出现断断续续的显示。3.1显示模式方案在控制LED灯的过程中,我们依旧采用了动态扫描,但是这次扫面我略微改动了行译码器的设计,以往的设计总是利用数组来控制扫面信号的更新,扫描前还要读取数据,执行效率比较低也比较繁琐,而这次我用行数据自加作为扫面信号,并且列扫面信号仅仅在行更新的时候乘2就可以实时更新了。这样在进行行扫描的时候,在存储的一个汉字中的16个数据中对应的16进制数据会被显示在与之对应的列中。所以当某一行被扫描到的时候,该行就会显示应该显示的数据;同样的方式下一行也是一样的机制显示。因为软件中行扫描的时候通过各种逻辑控制符与或非来实现了循环扫描,因此就会周而复始的循环。正是因为这种动态显示模式的工作机制,从而大大降低了硬件成本,也正是所有的LED灯不是同时点亮而是有所选择的轮流点亮,使LED更加耐用功耗更加低。3.2数据传输方案采用扫描方式进行显示时,因为扫面方式的不同不管是列扫面在先还是行扫面在先,只需要将对应的8字节数据按要显示的顺序摆放好放在单片机的只读存储器中即可。在显示时把列所对应的行中药显示的数据传送到相应的P2口和P0口,这样每扫描一行,P2和P0口就会输出该行对应的列的数据,从而控制整个点阵的显示。之所以这样设计,因为整个设计是围绕着点阵显示,而没有其他功能,所以IO口足以应付,避免了器件的浪费。同时,因为将P0、P2直接接在点阵的列上,这样不仅可以简化硬件设计,也可以简化程序代码。在将每列的数据输入到点阵中时,必须对点阵的点亮和熄灭保留一定的时间,达到视觉停留,从而让人感觉整个点阵显示的汉子是完整显示的。如果停留的时间过多或者过少都会出现断层的现象。这次设计我利用中断,只要时间一达到停留时间,就进行一次数据输出,从而不会因为算法执行的时间过长而影响输出。图1为整个硬件电路实现的结构框图。9 皖西学院2014届本科毕业设计(论文)图14系统硬件部分设计由于显示屏通过单片机来控制,而单片机的函数处理又是通过软件来实现,因此整个设计必须充分考虑软硬设计。整个系统中软件最主要的功能就是负责函数的执行,并且控制着IO口输出高低电平。在硬件上单片机共有4组IO口,虽然满足了本次设计需要的端口数,但是考虑到软件的设计,我在行驱动上加上了译码器,这不仅利于软件的编写,同时也解决了LED灯的驱动问题。硬件包括了单片机系统及外围电路、显示驱动电路、LED点阵电路。4.1单片机系统及外围电路4.1.1单片机的选择综合了定时器、中断、端口等等因素,这里我们选择了内含4K字节Flash的STC89C51,因为我们只需要显示特定的图形和文字,无需庞大的Flash存储库就已经可以满足需求,不再需要扩展外部存储器了。4.1.2AT89C51芯片介绍AT89C51AT89C51是ATMEL公司生产的8位FlashROM单片机。其最突出的优点是片内ROM为FlashROM,可擦写1000次以上,应用并不复杂的通用ROM写入器就能方便的擦写,读取也很方便,价格低廉,具有在片程序ROM二级保密系统。AT89C51包含以下一些功能部件:(1)一个8位CPU;9 皖西学院2014届本科毕业设计(论文)(2)片内振荡器时钟电路;(3)4KBFlashROM;(4)128B内RAM;(5)可寻址64KB的外ROM和外RAM控制电路;(6)两个16位定时/计数器;(7)21个特殊功能寄存器;(8)4个8位并行I/O口;(9)可编程全双工串行口;(10)具有5个中断源,并且有2个可设置优先级。STC89C51可以采用双列直插DIP封装类型,40个引脚可分为4类:电源、时钟、控制线、控制I/O引脚。图2为其引脚排列图。图2电源VCC——芯片电源,接+5V;GND——接地端。时钟XTAL1、XTAL2——晶荡的反相输入端和输出端。控制线因为在本次设计中很少能使用到控制线的功能,所以在这里就简单介绍下:1.ALE为地址锁存允许/片内EPROM编程脉冲。2.RST复位按钮。9 皖西学院2014届本科毕业设计(论文)1.VPD为备用电源。2.Vpp为内外ROM选择/片内EPROM编程电源。I/O引脚STC89C51有P0、P1、P2、P34个8位并行I/O端口,共32个引脚。P0口是漏级开路型即地址/数据总线复用的双向I/O口。其作为输出口用时,每个端口都可以驱动一个TTL逻辑门电路。当单片机内部对其中一个端口写“1”时,其端口电平就会呈现出高阻状态。正是因为这独特的漏极开路的设计,所以在用该I/O口当作输出时,必须接上上拉电阻才可以进行正常的功能。P1口和P0口有所不同,P0口作为输出端口是必须接上拉电阻,但是P1口其内部已经有上拉电阻了,所以当向P1口写入“1”时P1口就会被内部上拉为高电平。但是,如果外部信号将其拉低,通过作用其内部的上拉电阻就会输出一个电流。P2口和P1口的类型完全相同,不再累述。P3也有其独特的一个方面,它的I/O口功能和P1、P2口是一样的,但是P3口独特在于除了作为一般的I/O口线外,它有着更重要的第二功能:P3.0口——RXD作为串行口输入端P3.1口——TXD作为串行口输出端P3.2口——INT0作为外部中断0请求输入端P3.3口——INT1作为外部中断1请求输入端P3.4口——T0作为计数器0或者定时器0外部信号输入端P3.5口——T1作为计数器1或者定时器1外部信号输入端P3.6口——WR作为外部随机存储器写选通信号输出端P3.7口——RD作为外部随机存储器读选通信号输出端4.1.3单片机外围电路单片机系统外围电路的具体连接设计如图4-1-3所示。在单片机的18端口(XTAL1)和19端口(XTAL2)之间接上12MHz或者11.0592MHz,这是由单片机在进行传输时的波特率所决定的,这种选择可以使传输没有损失,并且高晶振可以使显示更加的稳定。电容C1、C2是晶振的负载电容,主要起频率微调和稳定启振的作用。STC89C51的通用I/O口P1的低四位控制了两个74HC138,从而控制了行灯的熄灭。9 皖西学院2014届本科毕业设计(论文)P0口接上了上拉电阻作为点阵列控制器,也是点阵的数据输出端口,P2口也是作为点阵列的控制器,也是数据输出端口。复位电路则是通过100pF的电容和500Ω的电阻组成的,能在两个机器周期内给予低电平,从而达到复位的条件。如图3:图34.2显示驱动电路4.2.1列驱动电路因为考虑到软件的编写,所以在这次设计中,我直接将P0口和P2口与点阵相连,因为列所在的线是提供电压的,所以直接相连可以满足需要。而行所在的线是承受电流的,所以利用芯片7CHC138可以满足同时点亮所有点阵的所需电流的需要!同时为了简化电路,方便仿真的进行。4.2.2行驱动电路行驱动芯片74HC138介绍所谓的译码器顾名思义就是一个输入少、输出多的组合逻辑电路模块。其功能是将给定的输入码组进行“翻译”,对每一种可能的输入组合,使输出通道中相应的一路有信号输出,一个且仅一个输出信号为有效电位。74HC138它是一种三线/八线的二进制译码器,它的输入端有3个,输出端有23=8个,并有三个选通端(使能端),它的管脚形式如图4所示。当选通端1为高电平,2、3均为低电平时,译码器74HC1389 皖西学院2014届本科毕业设计(论文)才能处于正常工作状态,这个时候就可以将地址输入端(A,B,C)的一个二进制组合编码翻译成在一个与之对应的输出端,并且该输出端是以低电平输出的,其中Y0~Y7是该译码器的输出端,而没有被翻译的输出端口均表现为高电平即无效信号。当然如果1、2、3不是按照高低低这样的电平出现则译码器就会被禁用,所有的输出端都变成在高电平。它的真值表如表1所示:图474HC138真值功能表INPUTS输入Outputs输出ENABLE使能ADDRESS地址E3E2E1A2A1A0Y0Y1Y2Y3Y4Y5Y6Y7XXHXXXHHHHHHHHLXXXXXHHHHHHHHXHXXXXHHHHHHHHHLLLLLLHHHHHHHHLLLLHHLHHHHHHHLLLHLHHLHHHHHHLLLHHHHHLHHHHHLLHLLHHHHLHHHHLLHLHHHHHHLHHHLLHHLHHHHHHLHHLLHHHHHHHHHHL9 皖西学院2014届本科毕业设计(论文)表1行驱动电路行驱动电路相对比较简单,是通过两片相同的74HC138相连而构成的类似于4-16线译码器。我们将U4其中的一个74HC138中的使能端口E1接上高电平,而将U5中的使能端E2和E3端接地。而将U4中的E2、E3和U5中的E1连在一个公共端口上,这样可以将P13口当作片选信号。若P13为低电平,则就会选中了U4进行翻译,若为高电平则选中了U5进行翻译。这样P10~P14端口每出现一个组合就会选中一个与之对应的输出端口,使其为低电平。通过单片机的控制就会不断的循环选中每一个端口,从而形成了扫描码,让LED灯循环被选中,实现了动态显示。具体电路见图5。图54.3LED显示屏电路这次设计主要是控制256个LED灯,而这些灯必须是按照一定的排放顺序排列的,同时我根据专业的字摸提取软件中LED灯排放顺序,将其设计成由上而下由左向右的亮灭显示顺序。同时在设计该LED灯驱动时,也是根据先驱动行进行周而复始的扫面,再驱动列显示。由于仿真软件库中的限制,本设计的16×16点阵就是通过4块MATRIX-8x8-Green型号的实验模块组成,以达到清楚的显示一个汉字最基本的像素要求。要理解8×8LED点阵最基本就是了解它的工作原理和结构特性,在充分了解过后就可以掌握了它的显示技术。其LED结构如图6所示,而它的等效电路如图7所示:9 皖西学院2014届本科毕业设计(论文)图6图7从图中可以看出,所谓的8×8点阵就是在每个行线和列线的交叉点处放置一个LED,当这个LED满足电平的要求时就会被点亮。所以要想显示一个汉字字体,只需要考虑每一个9 皖西学院2014届本科毕业设计(论文)LED灯两端的电平就可以控制这个LED灯的亮灭。因为我在行驱动的时候选择的是74HC138当做译码器,而其输出低电平,所以要想点亮一个个LED灯就可以采取在列中输出一个高电平,这样这个LED灯就会被导通而点亮了。因为74HC138的各个输出端口会被轮流的选择而呈现出低电平,也就是行线中的公共线会轮流的出现低电平,这样在P0和P2口不断的输出16进制数据(其中将需要的点亮的灯写1,不需要点亮的灯写0,将这8个二进制数据写成16进制数据)就会一行一行的显示点亮的LED灯。这时候人眼所体现的视觉停留发挥了巨大的作用,将一行一行显示变成了所有行都在显示,从而达到了显示效果。以上就是16×16点阵LED电子显示屏系统硬件部分的各功能模块分述,经过合理的设计论证后和就可以整体结合在一起,在单片机的程序存储器里放入编制好的程序即可成为一个完整的应用系统。在protues软件中可以进行实时仿真了。5系统软件部分设计在单片机系统中,如果说硬件系统是的骨骼,则软件就是系统的血液,只有两个合理的调用和配合才能更出色的完成应用系统所要完成的任务。软件利用了硬件的资源不断完成了函数的转换,在软件设计过程中我们应该不断的去完善程序结构,合理的去分配内RAM资源,其中重中之重的就是划分功能模块,合理的功能模块不仅利于编程的进行,也利用别人的阅读,使程序一目了然。最后就是通过编译h文件将各个子功能模块连接起来,一起协助主程序完成系统任务。在进行系统总体设计时,我曾经反复思考过软件结构,而LED显示屏软件设计的核心就是不断的利用各种算法产生显示数据以提供给端口输出,使屏幕按设计的要求显示出来。根据C语言编程的多文件设计原理,可把显示屏的程序系统分成三大主要层:第一层是各种移动函数层,第二层是数据层,第三层是主程序层。移动函数层主要利用各种函数产生各种移动的显示数据,并利用中间数组的方式传递显示数据,配合主程序中的中断来不断达到输出显示数据到点阵的列中。而数据层主要是存储要显示的字的数据,单独为其加一个层,一方面方便阅读,另一方面主要也是利用C语言中最好用的指针来读取数据,使程序代码简介,执行效率更高。而主程序层主要是负责中断,每来一个定时就发出一组数据,是程序简单明了。5.1主程序层系统主程序层的的设计思想如图8所示。系统的主程层开始以后,最重要的就是先对定时器进行初始化当然其中包括打开定时器中断(如果不进行初始化定时器就会进入混乱工作中),并且设置其为工作方式0。在中断中,我们对其重装数值,然后利用P19 皖西学院2014届本科毕业设计(论文)端口的扫面信号的数值不断的在P0和P2口进行显示汉字代码。扫面信号每增加一个数值,则P0和P2口就显示一个汉字16进制代码片段,这样周而复始的显示,最终就显示了整个汉字的代码。而整个程序的main()函数中,仅仅是几个函数的封装,整个程序不断的进行算法运算,一旦满足了中断的条件,则经过算法运算的数据就会被显示出来。这样做的好处在于能够实时的进行算法运算而不会耽误显示。图8程序如下:#include#include"removemode.h"#include"displaydata.h"//加载显示数据的头文件#defineucharunsignedchar#defineuintunsignedintucharkeynum;//====================定时器初始化函数====================voidTimer0_Ini(){TMOD=0x01;//设置定时器0的工作方式为mode1====0000,0001TH0=(65536-2000)/256;TL0=(65536-2000)%256;//实现定时2msTR0=1;//打开定时器0,让其工作ET0=1;//允许定时器0中断}//====================定时器0中断程序====================9 皖西学院2014届本科毕业设计(论文)voidtimer0(void)interrupt1{registerucharm;//定义一个经常被使用的mregisterucharrkey,ckey;TH0=(65536-200)/256;TL0=(65536-200)%256;//重装值P2=0;P0=0;//显示间断,达到视觉停留m=P1;m=(++m)&0x0f;//利用变量m来控制要显示的数据P2=disgram[2*m];P0=disgram[2*m+1];//显示数据>>>>>>从右向左,从上往下<<<<<#include"removemode.h"unsignedcharidatadisgram[32]={0};//用于显示的中间转换数组,并另其初始值为0//>>>>>>>>>>>>>>>>>>>>两遍向中间聚集<<<<<<<<<<<<<<<<<<<>(7-j));//将新的数据右移,老数据左移,并进行或,构成新数据disgram[s*4+2]=disgram[s*4+2]&0xff>>j|(flash_word[(flash_head+i)*32+s*4+3]<<(7-j));}else//在另外的8个灯移动{disgram[s*4]=disgram[s*4]&0xff<<(j-7)|flash_word[(flash_head+i)*32+s*4]>>(15-j);9 皖西学院2014届本科毕业设计(论文)disgram[s*4+1]=flash_word[(flash_head+i)*32+s*4]<<(j-7)|(flash_word[(flash_head+i)*32+s*4+1]>>(15-j));//重点在后者disgram[s*4+2]=flash_word[(flash_head+i)*32+s*4+2]<<(15-j)|(flash_word[(flash_head+i)*32+s*4+3]>>(j-7));//重点在前者disgram[s*4+3]=(disgram[s*4+3]&0xff>>(j-7))|flash_word[(flash_head+i)*32+s*4+3]<<(15-j);}}delay(sdu*SPEED);//每次移动时候的速度}delay(stop*SPEED);//一个字显示完毕以后,停留的时间}}//>>>>>>>>>>>>>>>>>>>>以开门的方式显示<<<<<<<<<<<<<<<<<<<>(8-j);//之所以&0xff,是防止后续程序对移位的影响disgram[i*2+1]=disgram[i*2+1]&0xff>>j|wordsp[flash_head+k][1+i*2]&0xff<<(8-j);//之所以&0xff,是防止后续程序对移位的影响}delay(sdu*SPEED);}delay(stop*TIME);}}//>>>>>>>>>>>>>>>>>>>>以关门的方式显示<<<<<<<<<<<<<<<<<<<>j|wordsp[flash_head+k][2*i]&0xff<<(8-j);//之所以&0xff,是防止后续程序对移位的影响disgram[i*2+1]=disgram[i*2+1]&0xff<>(8-j);//之所以&0xff,是防止后续程序对移位的影响}delay(sdu*SPEED);}delay(stop*TIME);}9 皖西学院2014届本科毕业设计(论文)}//>>>>>>>>>>>>>>>>>>>>以两边向中间拉开的方式显示<<<<<<<<<<<<<<<<<<<>j|wordsp[flash_head+k][2*i]<<(8-j);//之所以没加&0xff,就是体现这个效果disgram[i*2+1]=disgram[i*2+1]&0xff<>(8-j);//之所以没加&0xff,就是体现这个效果}delay(sdu*SPEED);}delay(stop*TIME);}}//>>>>>>>>>>>>>>>>>>>>卷帘效果显示<<<<<<<<<<<<<<<<<<<0;i--){9 皖西学院2014届本科毕业设计(论文)disgram[i]=flash_word[(flash_head+j)*32+i];//用指针十分的方便if(i%2)delay(sdu*SPEED);//这种停留给人有中从上往下刷屏的感觉,达到卷帘效果}delay(stop*TIME);}}//>>>>>>>>>>>>>>>>>>>>由下往上进行熄灭显示<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>由上往下进行熄灭显示<<<<<<<<<<<<<<<<<<<j;k--){disgram[k*2]=disgram[(k-1)*2];disgram[k*2+1]=disgram[(k-1)*2+1];//将原先的数据下移}disgram[2*j]=flash_word[flash_head+i][2*j];disgram[2*j+1]=flash_word[flash_head+i][2*j+1];//注入新的数据,从顶部开始delay(sdu*SPEED);}delay(stop*TIME);}}//>>>>>>>>>>>>>>>>>>>>由下往上滚动显示<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>由上往下滚动显示<<<<<<<<<<<<<<<<<<<0;k--){disgram[k*2]=disgram[(k-1)*2];disgram[k*2+1]=disgram[(k-1)*2+1];}disgram[0]=flash_word[(flash_head+i)*32+(15-j)*2];disgram[1]=flash_word[(flash_head+i)*32+(15-j)*2+1];9 皖西学院2014届本科毕业设计(论文)delay(sdu*SPEED);}delay(stop*TIME);}}//>>>>>>>>>>>>>>>>>>>>从左往右滚动显示<<<<<<<<<<<<<<<<<<<0;j--)for(k=0;k<8;k++){for(l=0;l<16;l++)//共16行数据{disgram[l*2]=disgram[l*2]>>1|flash_word[(i+flash_head)*32+l*2+j-1]<<(7-k);//(0,1,2,3,4..数组..>0,1/2,3..显示..)disgram[l*2+1]=disgram[l*2+1]>>1|disgram[l*2]<<7;}delay(sdu*SPEED);}delay(stop*TIME);}}//>>>>>>>>>>>>>>>>>>>>延时函数<<<<<<<<<<<<<<<<<<<