更新数组数据 二维数组 动态显示 图2-1 方案二原理图
2.2.2方案的比较
方案一很容易实现,而且占用FPGA的资源较少。但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。方案二中将LED点阵抽象成了一个二维数组。可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的显示效果。但是方案二中对数组的处理部分对FPGA芯片的资源消耗太大学校实验室里的EPF10K10LC84-4芯片只有576个逻辑单元远远不够设计要求。所以最终选择方案一。
2.3扫描控制模块
2.3.1 LED的显示原理
16×16扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。 通过时钟的每列扫描显示完整汉字。
图2-2 LED灯红绿信号 图2-3 16×16点阵LED等效电路
点阵LED一般采用扫描式显示,实际运用分为三种方式: (1)点扫描 (2)行扫描 (3)列扫描
若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉
4
暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。 2.3.2汉字的存储
用动态分时扫描技术使LED点阵模块显示图像,需要进行两步工作。第一步是获得数据并保存,即在存贮器中建立汉字数据库。第二步是在扫描模块的控制下,配合行扫描的次序正确地输出这些数据。获得图像数据的步骤是,先将要显示的每一幅图像画在一个如图3.3所示的被分成16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布,再将此分布关系以32×16的数据结构组成64个字节的数据,并保存在只读存贮器ROM中。以这种方式将若干个汉字的数据贮存在存贮器内,就完成了图像数据库的建立工作。
2.4 汉字显示
汉字显示使用的是16×16的点阵,EDA实验箱上有其接口电路,列选信号为SEL0,SEL1,SEL2,SEL3,经4线16线译码器输出16列,从左起为第一列,列选信号是由一个4位向量SEL[3..0]控制;行选信号为H0~H15,是由16个行信号组成的,每一行由一个单独的位来控制,高电平有效。例如“0000”表示第0列,“0000000000000001”表示第一行的点亮。由于列是由一个向量决定,而每一时刻的值只能有一个固定的值,因而只能使某一列的若干个点亮,因此就决定了只能用逐列扫描的方法。例如要使第一列的2,4,6,8,行亮,则列为“0001”、行为“0000000010101010”就可以实现了。 下面是各个部分的程序设计: 2.4.1列循环扫描 列循环扫描
通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连续的感觉。因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,本设计的扫描频率不得低于50Hz,扫描程序如下:
图2-4 16×16LED点阵模块
5
Library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity dz_xs is
Port(enable,clk:in std_logic; --端口定义 输入信号
Sel:out std_logic_vector(3 downto 0)); --端口定义 输出信号 End dz_xs;
Architecture count of dz_xs is
Signal lie:std_logic_vector(3 downto 0); Begin
Process(clk,enable) --脉冲、使能信号 begin
If clk'event and clk='1'then
If enable='1' then
If lie>\ Lie<=lie-\Else
Lie<=\End if;
End if;
End if;
Sel<=lie; End process; 2.4.2字符样式设计 字符样式设计
本环节是建立一个数据库,使之能在扫描的同时读取所需要的信息,从而完成汉字的显示。本次设计“王、日、田、口”汉字样式设计程序如下: Library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity dz_xs is
Port(enable,clk:in std_logic; --端口定义 输入信号
h0,h8:out std_logic_vector(7 downto 0)); --端口定义 输出信号(h0-列数据输出,h8-代表行数据输出)
End dz_xs;
Architecture count of dz_xs is
Signal lie:std_logic_vector(3 downto 0); --信号标志
6
Signal past1:std_logic_vector(1 downto 0); Begin
Process(enable,clk) --脉冲、使能信号 Begin
If clk'event and clk='1'then
If enable='1' then
Case lie is
When \
Case lie is --“王”字设计
When \When \When \When \When \When \When \When \When \When \When \When others=>h0<=\
End case; When \
Case lie is --“日”字设计
When\When\When\When\When\
7
相关推荐: