APP下载

基于FPGA的基础上控制16*16的LED点阵汉字显示设计

2018-08-10石丰华刘勋

科学与财富 2018年16期

石丰华 刘勋

摘 要:随着电子设计技术的发展,通过大规模可编程集成电路控制的LED显示屏的应用越来越广,通过FPGA控制LED显示屏的设计正以其高灵活性,高效率,低成本,低能耗等优点逐渐成为人们使用LED显示控制的主流设计方式。本设计是利用EDA技术,基于FPGA的基础上控制16*16的LED点阵汉字显示设计,在技术实现上相较其他简单并且易更改或升级,在熟悉VHDL代码及各功能的前提下,编写用于控制LED显示屏的程序代码及预先设定好的所需显示的汉字符号代码,通过Quartus II软件的编译仿真,在硬件电路上实现LED屏上的汉字滚动或循环显示。

关键词:FPGA VHDL 汉字显示

1.前言

1.1 概述

LED汉字显示屏如今在越来越多的场合有了广泛的应用,例如体育场馆中的大屏显示器,银行、广告、火车站包括很多小吃摊的宣传。LED汉字显示屏在未来将会有越来越多用武之地,并且呈现快速增长之势。

因此研究LED汉字显示的设计方法将具有很重要的理论及现实的意义。

基于FPGA的LED_16*16点阵汉字显示设计是通過EDA技术控制LED显示屏的工作,达到预期的设计目的。之所以基于FPGA的设计是因为现场可编程门阵列(FPGA)设计的周期小,灵活度较高,适合用于较小的批量系统,能够提高系统的可靠性和集成度,并且采用了编写灵活的VHDL语言编写主程序。此文正是基于对FPGA及LED的了解下,通过可编程门阵列控制16*16的LED汉字显示。显示的汉字字符是预先设定好的,将汉字显示内容翻译成程序代码,通过FPGA编译显示出来,需要另外增加或修改字符与图形可以通过16*16汉字字符生成器翻译成代码语言,然后植入程序内编译仿真,最后下载至实际硬件电路中循环显示预先设定的字符。

1.2 总体设计

1.2.1 设计任务

本次设计需要达到的效果是在16*16的LED显示屏上显示出“成、都、理、工、大、学、欢、迎、您”九个汉字,使用FPGA设计控制LED显示屏循环显示这九个汉字。

1.2.2 设计方案

(1)设计一个32进制计数器用于循环显示九个汉字,每个汉字的显示时间为1s。

(2)设计一个16进制计数器用于控制行和列驱动控制器的输出数据。

(3)设计一个列驱动控制器。

(4)设计一个行驱动控制器。

(5)将所有分块设计组合成一个“元器件”并下载至硬件电路中显示九个不同的汉字。

方案:每次显示一个汉字,一秒钟后刷新显示第二个汉字,然后一秒后刷新显示第三个汉字,依次刷新显示所有汉字。

1.3LED点阵显示特点

(1)可以用于显示各种文字、数字、图表、曲线、图形;

(2)采用纯红、高绿作双基色的发光器件,发光亮度高,色彩鲜艳、丰富;

2.软件的设计与仿真

2.1LED的显示原理

16×16扫描LED点阵汉字显示的工作原理与8位扫描数码管类似。LED点阵有16个端口,每个阴极端口又有16个LED灯,所以一共16*16个LED灯,其译码地址通过4位列信号线(SEL0-SEL3)控制,其汉字扫描码由16位段地址(0-15)输入。通过时钟信号的每列扫描完整的显示汉字。

点阵LED采用扫描的方式显示,实际运用时分为三种:点扫描、行扫描、列扫描。

使用点扫描模式时,其频率必须较大,周期应小于1ms才能符合人眼视觉停留要求。而对于行扫描和列扫描,其扫描频率则必须大于128Hz,那么周期需要比7.8ms小,才符合要求,使得LED显示灯在人眼中能显示一个完整的汉字。另外,在驱动一整行(列)LED灯时,激励电流必须足够大才能保证LED灯有足够的亮度,否则会出现LED灯亮度不足而模糊的状态。

2.2计数器的设计

2.2.132进制计数器的设计与仿真

COUNT32.vhd是设计的32进制的计数器,每当计数器加一,计一个数,然后输出下一个字。例如,当计数为“00000B”时显示“成”,当计数为“00001B”时显示“都”等。给定的脉冲周期为1s。程序描述如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNT32 IS

PORT( CLK1: IN STD_LOGIC;

QOUT : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));

END ENTITY COUNT32;

ARCHITECTURE BEHV OF COUNT32 IS

SIGNAL CQI : STD_LOGIC_VECTOR(4 DOWNTO 0);

BEGIN

PROCESS(CLK1)

BEGIN

IF (CLK1'EVENT AND CLK1='1') THEN

CQI<=CQI+1;

END IF;

QOUT<=CQI;

END PROCESS;

END ARCHITECTURE BEHV;

每当CLK1给一个脉冲时,输出值为前一个输出值加一,直至计数至32。例如,24ns时输出为00010,24ns后变为00011,较前数值加一,因此该模块满足设计要求。

2.2.216进制计数器的设计与仿真

COUNT16.vhd是设计的16进制的计数器,其输出端用于控制行驱动和列驱动控制器的输出数据,程序从略。

如图所示为16进制计数器的时序仿真图,每当CLK1给一个脉冲时,输出值为前一个输出值加一,直至计数至16。例如,当时间为24.425ns时的输出为2,当基于时钟脉冲CLK1后,即24.425ns后输出为3,较前数值加一,因此该模块满足设计要求。

2.3 列驱动设计与仿真

ROWCON.vhd为行驱动控制器,该模块控制所亮的行,当输出为0001H时,给点阵的第一行高电平,输出为0010H时,给点阵的第二行高电平,依次类推,逐次给每行高电平。

2.4 行驅动设计与仿真

XIANSHI.vhd为列驱动控制器,SHI控制的是所显示的字。例如,当SHI为00H时,表示显示第一个字;当SHI为01H时,表示显示第二个字,依次类推。WEI控制显示汉字的每一行的信息,例如当WEI为0000B时,表示的是输出字的第一行的文字信息;当WEI为0001B时,表示的是输出字的第二行的文字信息,依次类推。所需要显示的汉字分别是“成、都、理、工、大、学、欢、迎、您”,

2.5分块程序的组合与全程编译仿真

将32进制计数器,16进制计数器,行扫描模块,汉字字符扫描与显示模块组合,分别引出CLK(控制每个字的行扫描,扫描频率较高)、CLK1(控制显示字符的快慢,频率为1秒)为输入,ROW[3..0](根据CLK进行每一列的扫描),Q[15..0](表示每个字符各列的代码信息)为输出,这样就将所有的分块程序组合至含2个输入,2个输出的模块中。

3.软件的整体调试、编译与下载

3.1 子程序块的编译与仿真

在Quartus II中新建四个.vhd文件,分别命名为COUNT32、COUNT16、ROWCON、XIANSHI,分别编写程序,将程序编译后,分别新建四个.vwf的文件,用于对上诉四个子程序的时序仿真,待仿真正确结束后,全部保存在同一文件夹中。

3.2 子程序块的组合

将四个.vhd文件分别创建为一个元件,共有四个元件,将四个元件按照2.5.1原理组合图链接好后,命名为Block1.bdf,新建一个Block1.vwf文件,将组合元件编译,检查错误,进行全程的编译与仿真

3.3 程序下载结果展示

在16*16 LED显示屏中显示“成都理工大学欢迎您”,部分结果截取如下图所示,即完成了预定的设计任务。

参考文献:

[1]艾明晶.EDA设计实验教程.清华大学出版社,2014.

[2]乔庐峰、王志功.VHDL数字电路设计教程.电子工业出版社,2013.1

[3]张鹏、李曼义.基于FPGA和VHDL的LED点阵汉字滚动显示设计.信息技术,2009.12