毕业论文:基于fpga的led_1616点阵汉字显示设计内容摘要:

维护性高; ( 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”就可以实现了。 方案二 : VHDL 程序设计的是硬件,他和编程语言的最大区别是它可以“并发执行”。 本设计可以将 LED 显示屏要的显示内容抽象成一个二维数组(数组中的‘ 1’对映点阵显示屏上面的亮点),用 VHDL 语言设计一个进程将这个数组动态显示在 LED 显示屏上,再利用另一个进程对这个数组按一定频率进行数据更 新,更新的方式可以有多种。 因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动显示。 如图 21 为该方案原理图。 图 21 方案二原理图 方案的比较 方案一很容易实现,而且占用 FPGA 的资源较少。 但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。 方案二中将 LED 点阵抽象成了一个二维数组。 可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的 显示效果。 但是方案二中对数组的处理部分对 FPGA 芯片的资源消耗太大学校实验室里的 EPF10K10LC844 芯片只有 576 个逻辑单元远远不够设计要求。 所以最终选择方案一。 扫描控制模块 LED 的显示原理 16 16 扫描 LED 点阵的工作原理同 8 位扫描数码管类似。 它有 16 个共阴极输出端口 ,每个共阴极对应有 16个 LED显示灯,所以其扫描译码地址需 4位信号线( SEL0SEL3),其汉字扫描码由 16 位段地址( 015)输入。 通过时钟的每列扫描显示完整汉字。 图 22 LED灯红绿信号 图 23 16 16点阵 LED等效电路 点阵 LED 一般采用扫描式显示,实际运用分为三种方式: ( 1)点扫描 ( 2)行扫描 ( 3)列扫描 若使用第一种方式,其扫描频率必须大于 16 64=1024Hz,周期小于 1ms 即可。 若使用第二和第三种方式,则频率必须大于 16 8=128Hz,周期小于 即可符合视觉 更新数组数据 二维数组 动态显示 暂留要求。 此外一次驱动一列或一行( 8颗 LED)时需外加驱动电路提高电流,否则 LED亮度会不足。 汉字的存储 用动态分时扫 描技术使 LED 点阵模块显示图像 , 需要进行两步工作。 第一步是获得数据并保存 , 即在存贮器中建立汉字数据库。 第二步是在扫描模块的控制下 , 配合行扫描的次序正确地输出这些数据。 获得图像数据的步骤是 , 先将要显示的每一幅图像画在一个如图 所示的被分成 16 16 共 256 个小方格的矩形框中 , 再在有笔划下落处的小方格里填上“ 1” , 无笔划处填上“ 0” , 这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布 , 再将此分布关系以 32 16 的数据结构组成 64 个字节的数据 ,并保存在只读存贮器 ROM 中。 以这种方式将若干个汉字的数据贮 存在存贮器内 , 就完成了图像数据库的建立工作。 汉字显示 汉字显示使用的是 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”就可以实现了。 下面 是 各个部分的程序设计 : 列循环扫描 列循环扫描 通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连续的感觉。 因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,本设计的扫描频率不得低于 50Hz,扫描程序如下 :图 24 16 16LED点阵 模块 Library ieee。 use。 use。 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 clk39。 event and clk=39。 139。 then If enable=39。 139。 then If lie0000 then Lie=lie0001。 Else Lie=1111。 End if。 End if。 End if。 Sel=lie。 End process。 字符样式设计 字符样式设计 本环节是建立一个数据库,使 之能在扫描的同时读取所需要的信息,从而完成汉字的显示。 本次设计 “王、日、田、口”汉字样式设计程序如下: Library ieee。 use。 use。 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)。 信号标志 Signal past1:std_logic_vector(1 downto 0)。 Begin Process(enable,clk) 脉冲、使能信号 Begin If clk39。 event and clk=39。 139。 then If enable=39。 139。 then Case lie is When 00= Case lie is “ 王 ” 字设计 When 0011=h0=00010001。 h8=00010000。 When 0100=h0=00010001。 h8=00010000。 When 0101=h0=00010001。 h8=00010000。 When 0110=h0=00010001。 h8=00010000。 When 0111=h0=00010001。 h8=00010000。 When 1000=h0=00011111。 h8=11110000。 When 1001=h0=00010001。 h8=00010000。 When 1010=h0=00010001。 h8=00010000。 When 1011=h0=000。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。