广告灯自动控制系统的设计毕业设计(编辑修改稿)内容摘要:

进行显示。 对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以致影响到 LED 的亮度。 采用串行传输中列数据准备和列数据显示的时间矛盾,可以采用重叠处理的方法。 即在显示本行各列数据的同时,传送下一行的列数据。 为了达到重叠处理的目的,列数据的显示就需要有锁存功能。 对于列数据准备来说,它应能实现串入并出的移位功能。 这样,本行已准备好的数据打入并行锁存器进行显示时,串行移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。 LED 点 阵显示模块进行的方法有两种: ( 1)水平方向( X方向)扫描,即逐列扫描的方式(简称列扫描方式):此时用一个 P 口输出列码决定哪一列能亮(相当于位码),用另一个 P 口输出行码(列数据),决定该行上那哪个 LED亮(相当于段码)。 能亮的列从左到右扫描完 16 列(相当于位码循环移动 16次)即显示出一个完整的图像。 ( 2)竖直方向( Y方向)扫描,即逐行扫描方式(简称行扫描方式):此时用一个 P口输出决定哪一行能亮(相当于位码),另一个 P口输出列码(行数据,行数据为将列数据的点阵旋转 90度的数据)决定该行上哪些 LED 灯亮(相当 于段码)。 能亮的行从上向下扫描完 16 行(相当于位码循环移位 16 次)即显示一帧完整的图像。 本设计应用的是第一种的扫描方法,即水平方向( X方向)扫描。 每一个字由 16 行 16 列的点阵形成显示,即每个字均由 256个点阵来表示,我们可以把每一个点理解为一个像素。 一般我们使用的 16 16 的点阵宋体字库,即所谓的 16 16,是每一个汉广告灯自动控制系统 12 字在纵横各 16 点的区域内显示的。 汉字库从该位置起的 32 字节信息记录了该字的字模信息。 事实上这个汉字屏不仅可以显示汉字,也可以显示在 256 像素范围内的任何图形。 我们以水平方向( x 方向)扫描 显示汉字的 “ 江 ” 为例来说明其扫描原理,每一个字由 16 行 16列的点阵组成显示,如图下的,如果用 8 位的 AT89S51 的单片机来控制,由于单片机的总线为 8位,一个字需要拆分成两个部分。 一般我们把它分解成上部分和下部分,上部分由 8*16 的点阵组成,下部分也由 8*16 的点阵组成。 在本例中单片机首先显示的是左上角的第一列的部分,即第 0 列的 P00~P07 口。 方向为 P00 到 P07,显示汉字 “ 江 ” 的时候, P00 到 P04 都是灭的, P05 亮,即二进制 00001000,转换为 16 进制为 08H, 如图 所示。 上半部分第一列完成 之后,继续扫描下半部分的第一列,为了接线的方便,我们仍设计成由上往下的扫描方式,即从 P27 向P20 方向扫描,从上图可以看到,这一列所有的都不亮,所以代码为 00000000, 16 进制为 00H,然后单片机转向上半部的第二列,除了 P05 亮,其他的都不亮,即为 00000100, 16进制为 04H,这一列扫描完成之后继续进行下半部分的扫描,除了 P21 亮,其他的为不亮,为二进制 00100000,即 16 进制 20H。 按照这个方法,继续进行下面的扫描,一共扫描 32 个 8位,可以得出汉字 “ 城 ” 的扫描代码为 : DB 08H,20H,08H,30H,0FFH,0E0H,08H,42H,08H,4CH,1FH,0F0H,12H,10H,12H,1AH。 DB 13H,0F2H,10H,04H,0FFH,0C8H,10H,30H,50H,0CCH,37H,02H,12H,1CH,00H,00H。 城 广告灯自动控制系统 13 图 点阵显示原理图 由这个原理可以看到,无论显示何种字体或图像,都可以用这种方法来分析出它的扫描代码从而显示在屏幕上。 了解汉字的显示原理之后,那如何得到汉字的字模信息呢。 现在有一些现成的汉字字模生成软件,可从网上下载 汉字字库提取程序直接提取字库,如图 所示的为一种字模生成软件,软件打开后输入汉字,点击 “ 检取 ” 后,十六进制数据汉字代码即可以自动生成,把我们需要的竖排数据复制到我们的程序即可 图 汉字字模生成软件 广告灯自动控制系统 14 点阵的移动 以下以 16 16 点阵为例介绍点阵的移动。 要显示一个字符,该字符的点阵数据可以列向(纵向) 16 点组字,又可以行向(横向) 16 点组字。 无论哪一种组字方法,都既可以显示字符的水平方向的移动,又可以显示竖直方向的移动。 1.显示字符的左右移动 (1)列扫描方式左移动:列向组字显示字 符水平方向的移动(左滚动) 在这里有两个方法: 方法 1:延长数组法。 将原来字符点阵数组的 16 个数据重复一遍延长,点阵数组的数据个数为 32 个。 每扫描仪帧取 8 个数据显示,下一帧取数要在数组中后移一个数取数。 循环一遍扫 16帧。 可以假想有两块 16 16的点阵模块(共 32 帧)水平平行排列,用一个恰好能罩住 8 列点阵的中空方框去罩这个点阵,第 1(第 1 帧)罩住最左边数起第一列开始的 16 列,就扫描显示这16 列;第 2次(第 2帧)使方框右移一列,罩住做左边数起第 2列开始的 16 列,就扫描显示这 16 列; ;这样每扫描完一帧 使方框右移一列,最后第 16 次(第 16帧)时,罩住左边数起的第 16 列开始的 16列,就扫描显示这 16 列。 如此完成 16 帧画面的扫描显示,也就完成了整个一次移动循环扫描、之后反复循环,即可呈现显示字符沿水平向左移动的图像,如图 所示。 图 方框图法左右移动示意图 因为是列向组字(列扫描方式,点阵数据为行码,上边为地位下面为高位),希望显示移动的一个字符,第 1 次扫描从行码的点阵数组中取第 1~16 个数据,送行码输出口,对应于这 8 个数据,同时用列码输出口输出列码,分别控制第 1~16 列。 扫描完前 16 个数 据之后,第 2 次扫描从点阵数组中取第 2~14 个数据 图 字形法左右移动示意图 广告灯自动控制系统 15 (第 17 个数据与地 1 个数据同),送行码输出口,对应于这 16个数据,同时用列码输出口输出列码,仍分别控制扫地 1~16 列。 第 3次扫描从点阵数组中取第 3~18 个数据(第 18 个数据码与地2 个数据码相同)扫描 ;如此实现字符向左移动。 以上完成一个图形移动的方法,也可以看成是移动 16个不同的字形。 如图 所示,首先扫描第一个字型,同样是 16 行,16 次扫描, 16 次显示;完成一个字型的扫描以后,再扫描第二个字型;完成第二个字 型的扫描之后,再扫描第三个字型 依此类推,即可产生该文字的左移的感觉。 假设如果原本某个汉字的字型(第一个字型),其编码为: 00H,10H,20H,30H,40H,50H,60H,70H,80H,90H,0A0H,0B0H,0C0H,0D0H0E0H,0F0H; 第二个字型的编码为: 10H,20H,30H,40H,50H,60H,70H,80H,90H,0A0H,0B0H,0C0H,0D0H0E0H,0F0H, 00H, 也就是把第一个字型的编码中,第 1行显示数据,变为第 2 行显示数据;第 2 行显示数据,变成第 3行显示数据;第 3 行显示数据,变成第 4 行显示数据;第 4行显示数据,变成第 5 行显示数据 以此类推。 当第一个字型扫描显示完成之后,就进行这样的动作调整,广告灯自动控制系统 16 以产生第二个字型的编码。 同样的,当第二个字型扫描完成之后,就进行这样的调整动作,以产生第三个字型的编码。 这个调整动作时先将 16个编码根据序填入存储器,例如第 1行编码存入 20H,第二行编码存入 21H要进行左移调整时,则先将 20H 地址的数据转移到 36H 地址, 再将 21 H 地址的数据转移到 20 H 地址,将 22 H 地址的数据转移到 21 H 地址,将 23 H 地址的数据转移到 22 H 地址,将 24 H 地址的数据转移到 23 H 地址,将 25 H 地址的数据转移到 24 H 地址,将 26 H 地址的数据转移到 25 H 地址,将 27 H 地址的数据转移到 26 H 地址,将 28 H 地址的数据转移到 27H 地址 方法 2:数组数据 “ 循环左移法 ” (适合用 C 语言编写,在此仅作了解)。 注意,不是把二进制数据按位循环左移,而是把数组中的数据按其在数组中的位置循环左移。 具体的方法入下。 原字符点阵数 组中的 16个数据不延长,但下一帧取的 16个数据,是把上一帧的 16 个数据的位置(先后顺序) “ 循环左移 ”一次,即原来第 2个移到第 1个,原来第 3个移到第 2个 原来第 1 个移到第 16 个。 实现数组数据循环左移的方法有:第一,遍一个 “ 数组数据循环左移子程序 ” ,该子程序每执行一次可把数组中的额数据循环左移一次,主程序中先调用一次该子程序,时数组中的数据循环左移这一次,然后再从数组中取数据显示。 当数组中的额数据个数较多时,片内 RAM 将不够大,必须将数组定义在片外 RAM 中。 第二,不用子程序,而是用变量判断控制实现数组 数据的循环左移。 (2) 行扫描方式左移:行向组字显示字符水平方向的左移。 如果是行向组字(行扫描方式,点阵数据为列码,左边为敌位右边为高位),希望显示向左移动的一个字符,第 1 次扫描从列码的点阵数组中取第 1~16 个数据,送到列码输出口,对应的 8个数据,同时用行码输出口输出行码,分别控制扫描第 1~16 行。 扫描完成这 16 个数据之后,第 2 次扫描的第 16 个数据,应将原来第 1次扫描的 16 列码每一个都循环右移一位(如果是显示右移则应循环左移),再进行扫描。 如此,每进行下一次扫描,把上一次扫描的 16 个列码都循环右移一位,再 进行扫描。 数据的右移与数据的左移相似,只是取码的顺序相反而已,在此就不再赘述。 2.数据的上下移动 (1)列扫描方式向上移动 列向组字显示字符竖直方向的移动。 若是列向组字,希望显广告灯自动控制系统 17 示向上移动一个字符,第 1 次扫描从行码的点阵数组中取第 1~16个数据,送行码输出口,对应于这 16 个数据,同时用列码输出口输出列码,分别控制扫描第 1~16 列。 由于是列向组字(上高下低),扫描完成这 16 个数据后,第 2 次扫描的 16 个数据,应将原来的第 1 次扫描的 16 个行码每一个都循环右移一位,使显示的点都上移一行(如果是显示向下滚动则应循环 左移),再进行扫描。 如此,每进行下一次的扫描,把上一次的 16 个行码都循环右移一位,再进行扫描就实现了数据的向上移动。 也可以用字型的方法容易理解,以下的 16 16 的 LED 显示一个字是 8个字型,首先扫描的而是第一个字型,同样是 16 行,16 列扫描, 16 次显示;完成一个字型后,再扫描第二个字型;完成第二个字型后,再扫描第三个字型 以此类推,即可产生该文字向上移动的感觉 当把第一个字型编码中,每行显示的数据都右移一位,以产生第二个字型编码,即可产生字符向上滚动的感觉。 当第一个字符扫描完成后,就进行这样的 调整动作,以产生第二个字型的编码。 同样的,当第二个字型完成之后,就进行这样的调整动作,以产生第三个字型的编码。 调整的动作是先将 8个编码根据序填入储存器, 图 字形法上下移动示意图 例如第 1 行编码存入 20 地址,第 2 行编码存入 21 地址 要进行上移调整时,则从 20 地址数据开始,每笔数据都右移一位即可。 上图 仅以字型移动的方法画图。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。