基于某FPGA的LED16×16点阵汉字显示设计(VHDL版)

合集下载

基于FPGA的16×16点阵模块控制器设计

基于FPGA的16×16点阵模块控制器设计

第45卷 第10期 2018年10月天 津 科 技TIANJIN SCIENCE & TECHNOLOGYV ol.45 No.10Oct. 2018*通讯作者基金项目:天津科技大学大学生实验室创新基金(No.1702A203),全国高校实验室工作研究会学术研究计划(No.SY2015Z059)。

收稿日期:2018-09-05应用技术基于FPGA 的16×16点阵模块控制器设计乔广欣,李亚峻*,李 松,杨 堃斌,于宝(天津科技大学电子信息与自动化学院 天津300222)摘 要:为了减少芯片IO 口的占用,由74HC138驱动点阵行、由74HC595驱动点阵列。

为了用FPGA 芯片控制点阵显示,用VHDL 语言编程实现。

介绍了16×16点阵模块的硬件连接,分析了74HC595的工作时序和点阵列数据的存储与调用,进而提出点阵行列控制器的VHDL 程序设计方法,用于实现装载新数据、选通点阵行、16位数据先低位后高位的串行输出、产生74HC595的时钟信号和输出锁存信号。

将Basys2开发板与点阵模块相连,将程序下载到FPGA 上,实现了16×16点阵的显示,验证了设计的正确性,具有实际应用价值。

关键词:现场可编程门阵列 VHDL 语言 点阵显示 74HC595芯片 74HC138芯片 中图分类号:TP332.1 文献标志码:A 文章编号:1006-8945(2018)10-0059-03Design of 16×16 Dot Matrix Module Controller Based on FPGAQIAO Guangxin ,LI Yajun*,LI Song ,YANG Bin ,YU Baokun(College of Electronic Information and Automation ,Tianjin University of Science & Technology ,Tianjin 300222,China )Abstract :74HC138 and 74HC595 were used to drive dot matrix row and column respectively to reduce the occupation of the chip IO port. Programming was implemented using VHDL language to control the dot matrix display via FPGA chip.This paper introduces hardware connection of the 16×16 dot matrix module ,and analyzes the timing of the 74HC595 and storage and transfer of dot matrix column data. A VHDL program design method for dot matrix row and column controller was proposed to implement new data loading ,the strobe dot matrix row ,16-bit data serial output according to the low first and then high ,the generation of 74HC595 clock signal and output latch signal. The dot matrix module is connected to the Basys2 development board ,and the program is downloaded to the FPGA.A 16×16 dot matrix display is implemented ,which verifies the correctness of the design. The design has practical application value.Key words :FPGA ;VHDL language ;dot matrix display ;74HC595;74HC138LED 点阵显示系统不仅能够静态显示字符和图像,而且能够动态显示文字、动画、视频等信息,具有亮度高、寿命长、价格低、视角大等优点,得到广泛 应用。

点阵汉字显示VHDL语言设计

点阵汉字显示VHDL语言设计

EDA技术实用教程实验报告实验名称:点阵汉字显示设计系别:XXX专业:电子信息工程姓名:X X X学号:XXXXXXXXX2010.12.216*16的点阵显示设计1、实验目的熟悉MAX+plu sⅡ的VHDL文本设计流程的全过程,学会用可编程逻辑器件设计制作一个16*16的点阵的显示设计。

16*16点阵显示是传统的点阵显示基本应用,它是很多复杂的显示的基础。

这种点阵的显示可以使用多种方法来实现,其中所用到的器件也不尽相同,但是很多基本算法和思想都是相同的,只是根据不同的硬件,具体的方法有所区别。

在此设计中,我所使用的点阵的列式有16个行信号组成的,每一行是由一个单独的位来控制,高电平有效,而列式由四个位矢量来控制的。

例如:“0000”表示第0行,“0000000000000001”表示第1行的点亮。

由于列式由一个矢量决定的,而每一时刻列只能有一个固定的值,因而只能是某一列的如干点亮,因此就决定了只能用逐列扫描的方法。

2、各模块及功能模块CHW控制每个字母显示时间Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity chw isPort (clk:in std_logic;Q:out std_logic_vector(1 downto 0));End chw;Architecture chw_arc of chw isBeginProcess(clk)Variable cnt:integer;Variable tmp:std_logic_vector(1 downto 0);beginIf clk'event and clk='1'thenif cnt<10000 thenCnt:=cnt+1;ElseCnt:=0;If tmp="11"thenTmp:="00";ElseTmp:=tmp+1;End if;End if;end if;Q<=tmp;End process;End chw_arc;模块CNTA产生列选择信号。

基于FPGA及VHDL的LED点阵汉字滚动显示设计方案【VIP专享】

基于FPGA及VHDL的LED点阵汉字滚动显示设计方案【VIP专享】

基于FPGA及VHDL的LED点阵汉字滚动显示设计方案发布: 2011-8-31 | 作者: —— | 来源:wangliuguo| 查看: 555次| 用户关注:汉字滚动显示器的传统设计方法是用单片机来控制的,虽然单片机方案具有价格低廉,程序编程灵活等特点,但由于单片机硬件资源的限制,未来对设计的变更和升级,总是要付出较多研发经费和较长投放市场周期的代价,甚至有可能需要重新设计。

况且,在以显示为主的系统中,单片机的运算和控制等主要功能的利用率很低,单片机的优势得不到发挥,相当于很大的资源浪费。

采用EDA技术的自顶向下的模块化设计方法,借助相关开发软件,例如Qua汉字滚动显示器的传统设计方法是用单片机来控制的,虽然单片机方案具有价格低廉,程序编程灵活等特点,但由于单片机硬件资源的限制,未来对设计的变更和升级,总是要付出较多研发经费和较长投放市场周期的代价,甚至有可能需要重新设计。

况且,在以显示为主的系统中,单片机的运算和控制等主要功能的利用率很低,单片机的优势得不到发挥,相当于很大的资源浪费。

采用EDA技术的自顶向下的模块化设计方法,借助相关开发软件,例如QualtusⅡ软件,将硬件描述语言——VHDL程序固化于具有丰富I/O口、内部逻辑和连线资源的FPGA(现场可编程门阵列)中。

该技术具有系统设计效率高、集成度好、保密性强、易于修改、易于实现等优点,成为当今数字系统设计主流技术。

此方式所制作的LED点阵控制器,由于是纯硬件行为,具有速度快、可靠性高、抗干扰能力强、开发周期短等显著优点。

1 EDA点阵显示汉字原理以8×8的LED点阵为例,8×8的LED点阵是由64个发光二极管按矩阵形式排列而成,每一行上的发光管有一个公共的阳极(或阴极),每一列上的发光管有一个公共的阴极(或阳极),一般按动态扫描方式显示汉字或图形。

扫描分为点扫描、行扫描和列扫描三种方式。

行扫描需要按行抽取字型码,列扫描则需要按列抽取字型码。

16×16点阵LED汉字动态显示

16×16点阵LED汉字动态显示
七段数码管码显示:
a f g e d c h b
实验说明:
a a a a a a a a
a
h b
bitsel(0) bitsel(7)
segment[7..0]
bitout[7..0]
16×16点阵LED汉字动态显示
4学时 学时 实验内容: 实验内容: 点阵LED动态显示自己的名字 用16×16点阵 × 点阵 动态显示自己的名字
第1行,第1列 行 列
16×16点阵显示 × 点阵显示
第1行,第16列 行 列
r0-r3
第16行,第1列 行 列
第16行,第16列 行 列
点阵LED显示器的每一行发光管的阳极接在一起作为 显示器的每一行发光管的阳极接在一起作为 点阵 数据线D,每一列发光管的阴极接在一起作为列线B, 数据线 ,每一列发光管的阴极接在一起作为列线 , 因此,要使某一点亮, 因此,要使某一点亮,就必须让该点所在的行线为高 电平,同时让该点所在的列线为低电平。 电平,同时让该点所在的列线为低电平。 实验板上点阵的各行可分别控制, 实验板上点阵的各行可分别控制, 用16个行控制信号 个行控制信号 来控制16行,使用4个列控制信号来控制 列,实验 来控制 行 使用 个列控制信号来控制16列 个列控制信号来控制 板上已经提供了一个4- 译码器 因此只使用4 译码器, 板上已经提供了一个 -16译码器,因此只使用 个信号即可控制点阵的16列 个信号即可控制点阵的 列。由于不是一个控制信号 控制一个点阵点, 控制一个点阵点,因此需要将需将欲显示的字一列一 列的显示。 列的显示。 若列控制信号r0-r3等于 “0000”,则经过 -16 例:若列控制信号 等于 ,则经过4- 译 码器后,点阵的第一列会等于‘0’。此时若同时16 码器后,点阵的第一列会等于‘ 。此时若同时 行中的某些行为‘ ,则对应的点阵会亮。 行中的某些行为‘1’,则对应的点阵会亮。

vhdl实验报告_16乘16点阵_列选_显示

vhdl实验报告_16乘16点阵_列选_显示

综合实践总结报告综合实践名称: EDA技术与实践综合实践地点、时间一.题目功能分析和设计实验的要求有如下三点:1.用16*16点阵的发光二极管显示字符;2.可显示字符为0~9的数字字符与A~F英文字母的大写;3.输入为四位二进制矢量;按照要求可知,LED点阵模块,共由16×16=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。

先将要显示的每一幅图像画在一个16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布以数字8为例,点阵分布为:0000000000000000000000000000000000011111111110000001111111111000000110000001100000011000000110000001100000011000000111111111100000011111111110000001100000011000000110000001100000011000000110000001111111111000000111111111100000000000000000000000000000000000考虑到实际物理实验平台上点阵发光二极管的原理,以下为16×16点阵LED外观图,只要其对应的X、Y轴顺向偏压,即可使LED 发亮。

例如如果想使左上角LED点亮,则Y0=1,X0=0即可。

所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。

(列信号都接地)。

如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。

注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。

VHDL 16

VHDL  16

VHDL 16*16点阵本实验主要完成汉字字符在LED 上的显示,16*16 扫描LED 点阵的工作原理与8 位扫描数码管类似,只是显示的方式与结果不一样。

本实验的示例程序依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。

源程序(带注释)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dzh is --建立实体dzh port( clk:in std_logic;r,c:out std_logic_vector(15 downto 0)); --两个输出信号end;architecture two of dzh is --建立结构体two type states is(st0,st1,st2,st3,st4,st5); --定义六个状态signal cs,ns:states:=st0;signal count:integer range 0 to 999:=0;begina1:process(clk)variable s:std_logic_vector(3 downto 0):="0000";beginif clk'event and clk='1' thens:=s+1;if cs=st0 thencase s is --“湖”字的显示when "0000" =>r<=not"0000000000000001";c<=not"0111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1011111011100000";when "0010" =>r<=not"0000000000000100";c<=not"1100111011101110";when "0011" =>r<=not"0000000000001000";c<=not"1111100000101110";when "0100" =>r<=not"0000000000010000";c<=not"1111111011101110";when "0101" =>r<=not"0000000000100000";c<=not"1111111011100000";when "0110" =>r<=not"0000000001000000";c<=not"0011100000101110";when "0111" =>r<=not"0000000010000000";c<=not"1100101110101110";when "1000" =>r<=not"0000000100000000";c<=not"1111101110100000";when "1001" =>r<=not"0000001000000000";c<=not"1111101110101110";when "1010" =>r<=not"0000010000000000";c<=not"1111101110101110";when "1011" =>r<=not"0000100000000000";c<=not"1110101110101110";when "1100" =>r<=not"0001000000000000";c<=not"1101100000101110";when "1101" =>r<=not"0010000000000000";c<=not"1011111111101110";when "1110" =>r<=not"0100000000000000";c<=not"0111111111011100";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st1 thencase s is --“南”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111110111111";when "0010" =>r<=not"0000000000000100";c<=not"1111111101111111";when "0011" =>r<=not"0000000000001000";c<=not"1100000000000111";when "0100" =>r<=not"0000000000010000";c<=not"1111111011111111";when "0101" =>r<=not"0000000000100000";c<=not"1111110111111111";when "0110" =>r<=not"0000000001000000";c<=not"1100000000000111";when "0111" =>r<=not"0000000010000000";c<=not"1101101110110111";when "1000" =>r<=not"0000000100000000";c<=not"1101110101110111";when "1001" =>r<=not"0000001000000000";c<=not"1101100000110111";when "1010" =>r<=not"0000010000000000";c<=not"1101111011110111";when "1011" =>r<=not"0000100000000000";c<=not"1101000000010111";when "1100" =>r<=not"0001000000000000";c<=not"1101111011110111";when "1101" =>r<=not"0010000000000000";c<=not"1101111011100111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st2 thencase s is --“工”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111111111111";when "0010" =>r<=not"0000000000000100";c<=not"1111111111111111";when "0011" =>r<=not"0000000000001000";c<=not"1100000000000111";when "0100" =>r<=not"0000000000010000";c<=not"1111111011111111";when "0101" =>r<=not"0000000000100000";c<=not"1111111011111111";when "0110" =>r<=not"0000000001000000";c<=not"1111111011111111";when "0111" =>r<=not"0000000010000000";c<=not"1111111011111111";when "1000" =>r<=not"0000000100000000";c<=not"1111111011111111";when "1001" =>r<=not"0000001000000000";c<=not"1111111011111111";when "1010" =>r<=not"0000010000000000";c<=not"1111111011111111";when "1011" =>r<=not"0000100000000000";c<=not"1111111011111111";when "1100" =>r<=not"0001000000000000";c<=not"1100000000000111";when "1101" =>r<=not"0010000000000000";c<=not"1111111111111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";end case;elsif cs=st3 thencase s is --“程”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111111111111";when "0010" =>r<=not"0000000000000100";c<=not"1111110110000011";when "0011" =>r<=not"0000000000001000";c<=not"1100001110111011";when "0100" =>r<=not"0000000000010000";c<=not"1111011110000011";when "0101" =>r<=not"0000000000100000";c<=not"1111011111111111";when "0110" =>r<=not"0000000001000000";c<=not"1000000100000001";when "0111" =>r<=not"0000000010000000";c<=not"1110001111101111";when "1000" =>r<=not"0000000100000000";c<=not"1101010111101111";when "1001" =>r<=not"0000001000000000";c<=not"1101011010000011";when "1011" =>r<=not"0000100000000000";c<=not"1111011111101111";when "1100" =>r<=not"0001000000000000";c<=not"1111011111101111";when "1101" =>r<=not"0010000000000000";c<=not"1111011100000001";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st4 thencase s is --“学”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111011011110111";when "0010" =>r<=not"0000000000000100";c<=not"1111101101101111";when "0011" =>r<=not"0000000000001000";c<=not"1111111111111111";when "0100" =>r<=not"0000000000010000";c<=not"1110000000000011";when "0101" =>r<=not"0000000000100000";c<=not"1110111111111011";when "0110" =>r<=not"0000000001000000";c<=not"1101110000010111";when "0111" =>r<=not"0000000010000000";c<=not"1111111111011111";when "1000" =>r<=not"0000000100000000";c<=not"1111111100111111";when "1001" =>r<=not"0000001000000000";c<=not"1111111101111111";when "1010" =>r<=not"0000010000000000";c<=not"1111100000001111";when "1011" =>r<=not"0000100000000000";c<=not"1111111101111111";when "1100" =>r<=not"0001000000000000";c<=not"1111111101111111";when "1101" =>r<=not"0010000000000000";c<=not"1111111001111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st5 thencase s is --“院”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111110111111";when "0010" =>r<=not"0000000000000100";c<=not"1011010000000001";when "0011" =>r<=not"0000000000001000";c<=not"1011010111111101";when "0100" =>r<=not"0000000000010000";c<=not"1010101111111011";when "0101" =>r<=not"0000000000100000";c<=not"1001111100001111";when "0110" =>r<=not"0000000001000000";c<=not"1010011111111111";when "0111" =>r<=not"0000000010000000";c<=not"1011010000000011";when "1000" =>r<=not"0000000100000000";c<=not"1011011101101111";when "1001" =>r<=not"0000001000000000";c<=not"1000111101101111";when "1010" =>r<=not"0000010000000000";c<=not"1011111101101111";when "1011" =>r<=not"0000100000000000";c<=not"1011111011101101";when "1100" =>r<=not"0001000000000000";c<=not"1011110111100001";when "1101" =>r<=not"0010000000000000";c<=not"1011111111111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;else null;end if;end if;end process a1;a2:process(clk) --下一状态的转换beginif clk'event and clk='1' thenif count<999 thencount<=count+1;else count<=0;case cs iswhen st0=>ns<=st1;when st1=>ns<=st2;when st2=>ns<=st3;when st3=>ns<=st4;when st4=>ns<=st5;when st5=>ns<=st0;when others=>ns<=st0;end case;end if;end if;end process a2;a3:process(clk) --当前状态的转换beginif clk'event and clk='1' thencs<=ns;end if;end process a3;end architecture;。

EDA课程设计讲解

EDA课程设计讲解

湖南工程学院课 程 设 计课程名称 EDA 技术课题名称 基于FPGA 的汉字点阵显示控制器专 业 电子科学与技术班 级 1202 班 学 号 201201180206姓 名 尹尚风 指导教师 郭照南2014 年 12月 20 日湖南工程学院课程设计任务书课程名称EDA技术课题基于FPGA的汉字点阵显示控制器专业班级电子科学与技术1202班学生姓名尹尚风学号201201180206指导老师郭照南审批任务书下达日期2014 年12 月8 日任务完成日期2014 年12 月19 日目录第一章系统总体方案设计 (6)1.1 设计原理 (6)第二章硬件设计 (6)2.1 方案设计 (6)2.2 LED的显示原理 (6)2.3 FPGA的原理和特点 (6)第三章软件设计 (7)3.1 16进制计数器 (7)3.2 32进制计数器 (8)3.3 行显示驱动设计 (9)3.4 总设计原理图 (12)3.5 设计流程图 (13)第四章系统的安装调试说明 (14)第五章总结 (15)参考文献 (15)第一章系统总体方案设计1.1 设计原理(1)输出预定义“课程设计”4个汉字;(2)输出汉字循环显示;(3)操作方便、可维护性高;(4)程序简捷,便于修改。

每次显示一个汉字,一秒钟后刷新显示第二汉字,一秒钟后刷新显示第三汉字,依次刷新显示“课程……”。

循环显示以上汉字第二章硬件设计2.1 方案设计16×16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。

例如如果想使左上角LED点亮,则Y0=1,X0=0即可。

应用时限流电阻可以放在X轴或Y轴。

它有16个共阴极输出端口,每个共阴极对应有16个LED 显示灯。

本实验就是要通过CPLD芯片产生读时序,将字形从寄存器中读出,然后产生写时序,写入16×16的点阵,使其扫描显示输出。

为了显示整个汉字,首先分布好汉字的排列,以列给出汉字信息(从16个Y轴线输入字模信息);然后以一定的频率扫描逐个点亮每一行(行扫描),即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。

EDA技术综合设计课程设计-基于VHDL的16×16汉字 点阵动态显示系统的设计

EDA技术综合设计课程设计-基于VHDL的16×16汉字 点阵动态显示系统的设计

《EDA技术综合设计》课程设计报告报告题目:基于VHDL的16×16汉字点阵动态显示系统的设计作者所在系部:电子工程系作者所在专业:电子信息工程摘要随着电子技术的不断革新,以二极管为基础的LED点阵随之获得了广泛的应用。

在日常生活中,点阵随处可见。

通过多种控制手段,点阵还可以实现各种文字和图案的动态显示。

而在不同的应用场合,点阵的设计要求是不同的。

传统的思路一般是应用单片机实现点阵控制,但这种方法会受到一定的硬件资源限制。

随着电子设计自动化技术的进展,基于可编程逻辑器件进行系统芯片集成的点阵控制不失为一种新的设计思路。

本设计以电子设计自动化(EDA)技术为核心,运用硬件描述语言(VHDL),在MAX+plus Ⅱ环境下进行编程并下载到可编程逻辑器件中实现LED点阵的控制电路。

主要程序除了常用的译码器、计数器之外,还包括了自定义功能的控制模块。

通过编程、调试、仿真、下载完成了汉字的动态显示。

彰显了EDA技术在当今电子领域中的重要地位。

关键词:EDA、可编程逻辑器件、计数器、点阵、动态目录一、概述 (5)二、方案设计与论证 (5)1、点亮点阵中一个点的原理 (5)2、点亮一个字的原理 (5)3、动态显示不同汉字的原理 (5)三、底层文件与程序设计 (6)1.十六进制计数器 (6)2.八进制计数器 (7)3.字显示控制模块 (8)四、系统调试与仿真 (12)1、开发环境介绍 (12)2、新建项目 (12)3、输入程序 (12)4、编译 (13)5、时序仿真 (13)6、设计顶层文件 (14)7、选择器件 (14)8、设置管脚 (14)9、下载 (14)五、硬件调试 (15)六、心得体会 (15)七、参考文献 (15)八、指导教师及评语 (16)课程设计任务书课题名称基于VHDL的16×16点阵汉字动态显示系统的设计完成时间指导教师职称学生姓名班级总体设计要求和技术要点1.在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中位选信号为16-4编码器编码输出。

基于FPGA的点阵汉字显示课程设计论文

基于FPGA的点阵汉字显示课程设计论文

基于FPGA 的点阵显示控制的设计一.课程要求1、技术要求:(1)掌握8X8点阵显示的工作原理;(2)熟练掌握Quartus Ⅱ6.0 软件的使用方法;(3)能运用VHDL 语言根据要求实现显示不同汉字;(4)能根据要求对设计电路进行仿真和测试。

2、功能要求:实现显示汉字“电气二加油”的一屏一屏显示。

3、本人的工作:负责软件的编写,仿真,下载,调试。

二.设计方案:1、硬件部分(框图)2、软件部分library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity wen is ---函数库port(clk,k,l:in std_logic;ld,com:out std_logic_vector(7 downto 0));end wen; ----主函数architecture one of wen issignal st:std_logic_vector(7 downto 0);signal osc,osd:std_logic;signal d_ff:std_logic_vector(29 downto 0);signaldata,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15:std_logic_vector(7 downto 0);signal lie0:std_logic_vector(6 downto 0); ---定义变量begincom<=data;ld<=st;d0<="00000000"when lie0(6 downto 0)="0000000"else"00000100"when lie0(6 downto 0)="0000001"else"00100000"when lie0(6 downto 0)="0000010"else"01000100"when lie0(6 downto 0)="0000011"else"10001010"when lie0(6 downto 0)="0000100"else"11111111"when lie0(6 downto 0)="0000101"else"11111011"when lie0(6 downto 0)="0000110"else"11011111"when lie0(6 downto 0)="0000111"else"10111011"when lie0(6 downto 0)="0001000"else"01110101"when lie0(6 downto 0)="0001001"else"00000000";d1<="00111110"when lie0(6 downto 0)="0000000"else"00010010"when lie0(6 downto 0)="0000001"else"00100000"when lie0(6 downto 0)="0000010"else"00111110"when lie0(6 downto 0)="0000011"else"01010100"when lie0(6 downto 0)="0000100"else"11000001"when lie0(6 downto 0)="0000101"else"11101101"when lie0(6 downto 0)="0000110"else"11011111"when lie0(6 downto 0)="0000111"else"11000001"when lie0(6 downto 0)="0001000"else"10101011"when lie0(6 downto 0)="0001001"else"00000000";d2<="00101010"when lie0(6 downto 0)="0000000"else"00010101"when lie0(6 downto 0)="0000001"else"00100100"when lie0(6 downto 0)="0000010"else"10000100"when lie0(6 downto 0)="0000011"else"00000000"when lie0(6 downto 0)="0000100"else"11010101"when lie0(6 downto 0)="0000101"else"11101010"when lie0(6 downto 0)="0000110"else"11011011"when lie0(6 downto 0)="0000111"else"01111011"when lie0(6 downto 0)="0001000"else"00000000";d3<="11111111"when lie0(6 downto 0)="0000000"else "00010101"when lie0(6 downto 0)="0000001"else "00100100"when lie0(6 downto 0)="0000010"else "01111100"when lie0(6 downto 0)="0000011"else "11111100"when lie0(6 downto 0)="0000100"else "00000000"when lie0(6 downto 0)="0000101"else "11101010"when lie0(6 downto 0)="0000110"else "11011011"when lie0(6 downto 0)="0000111"else "10000011"when lie0(6 downto 0)="0001000"else "00000011"when lie0(6 downto 0)="0001001"else "00000000";d4<="10101010"when lie0(6 downto 0)="0000000"else "00010101"when lie0(6 downto 0)="0000001"else "00100100"when lie0(6 downto 0)="0000010"else "00000000"when lie0(6 downto 0)="0000011"else "10010100"when lie0(6 downto 0)="0000100"else "01010101"when lie0(6 downto 0)="0000101"else "11101010"when lie0(6 downto 0)="0000110"else "11011011"when lie0(6 downto 0)="0000111"else "11111111"when lie0(6 downto 0)="0001000"else "01101011"when lie0(6 downto 0)="0001001"else "00000000";d5<="10111110"when lie0(6 downto 0)="0000000"else "01110101"when lie0(6 downto 0)="0000001"else "00100100"when lie0(6 downto 0)="0000010"else "01111100"when lie0(6 downto 0)="0000011"else "11111111"when lie0(6 downto 0)="0000100"else "01000001"when lie0(6 downto 0)="0000101"else "10001010"when lie0(6 downto 0)="0000110"else "11011011"when lie0(6 downto 0)="0000111"else "10000011"when lie0(6 downto 0)="0001000"else "00000000"when lie0(6 downto 0)="0001001"else "00000000";d6<="11000000"when lie0(6 downto 0)="0000000"else "10000000"when lie0(6 downto 0)="0000001"else "00100000"when lie0(6 downto 0)="0000010"else "01000100"when lie0(6 downto 0)="0000011"else "10010100"when lie0(6 downto 0)="0000100"else"01111111"when lie0(6 downto 0)="0000110"else"11011111"when lie0(6 downto 0)="0000111"else"10111011"when lie0(6 downto 0)="0001000"else"01101011"when lie0(6 downto 0)="0001001"else"00000000";d7<="00000000"when lie0(6 downto 0)="0000000"else"11000000"when lie0(6 downto 0)="0000001"else"00100000"when lie0(6 downto 0)="0000010"else"01111100"when lie0(6 downto 0)="0000011"else"11111100"when lie0(6 downto 0)="0000100"else"11111111"when lie0(6 downto 0)="0000101"else"00111111"when lie0(6 downto 0)="0000110"else"11011111"when lie0(6 downto 0)="0000111"else"10000011"when lie0(6 downto 0)="0001000"else"00000011"when lie0(6 downto 0)="0001001"else"00000000"; ---字库电气二加油d8<="00000000"when lie0="00000000"else"00111110"when lie0="00000001"else"00101010"when lie0="00000010"else"11111111"when lie0="00000011"else"10101010"when lie0="00000100"else"10111110"when lie0="00000101"else"11000000"when lie0="00000110"else"00000000"when lie0="00000111"else"00000000"when lie0="00001000"else"00000000"when lie0="00001001"else"00000000";d9<="00111110"when lie0="00000000"else"00101010"when lie0="00000001"else"11111111"when lie0="00000010"else"10101010"when lie0="00000011"else"10111110"when lie0="00000100"else"11000000"when lie0="00000101"else"00000000"when lie0="00000110"else"00000000"when lie0="00000111"else"00000000"when lie0="00001000"else"00000000"when lie0="00001001"else"00000000";d10<="00101010"when lie0="00000000"else"10101010"when lie0="00000010"else "10111110"when lie0="00000011"else "11000000"when lie0="00000100"else "00000000"when lie0="00000101"else "00000000"when lie0="00000110"else "00000000"when lie0="00000111"else "00000000"when lie0="00001000"else "00111110"when lie0="00001001"else "00000000";d11<="11111111"when lie0="00000000"else "10101010"when lie0="00000001"else "10111110"when lie0="00000010"else "11000000"when lie0="00000011"else "00000000"when lie0="00000100"else "00000000"when lie0="00000101"else "00000000"when lie0="00000110"else "00000000"when lie0="00000111"else "00111110"when lie0="00001000"else "00101010"when lie0="00001001"else "00000000";d12<="10101010"when lie0="00000000"else "10111110"when lie0="00000001"else "11000000"when lie0="00000010"else "00000000"when lie0="00000011"else "00000000"when lie0="00000100"else "00000000"when lie0="00000101"else "00000000"when lie0="00000110"else "00111110"when lie0="00000111"else "00101010"when lie0="00001000"else "11111111"when lie0="00001001"else "00000000";d13<="10111110"when lie0="00000000"else "11000000"when lie0="00000001"else "00000000"when lie0="00000010"else "00000000"when lie0="00000011"else "00000000"when lie0="00000100"else "00000000"when lie0="00000101"else "00111110"when lie0="00000110"else "00101010"when lie0="00000111"else "11111111"when lie0="00001000"else"00000000";d14<="11000000"when lie0="00000000"else "00000000"when lie0="00000001"else "00000000"when lie0="00000010"else "00000000"when lie0="00000011"else "00000000"when lie0="00000100"else "00111110"when lie0="00000101"else "00101010"when lie0="00000110"else "11111111"when lie0="00000111"else "10101010"when lie0="00001000"else "10111110"when lie0="00001001"else"00000000";d15<="00000000"when lie0="00000000"else "00000000"when lie0="00000001"else "00000000"when lie0="00000010"else "00000000"when lie0="00000011"else "00111110"when lie0="00000100"else "00101010"when lie0="00000101"else "11111111"when lie0="00000110"else "10101010"when lie0="00000111"else "10111110"when lie0="00001000"else "11000000"when lie0="00001001"else"00000000"; ---字库循环电first:process-----分频beginwait until clk='1';if d_ff(29 downto 0)>=2e8 thend_ff(29 downto 0)<="000000000000000000000000000000"; elsed_ff(29 downto 0)<=d_ff+1;end if;osc<=not d_ff(10);if l='0' thenosd<=not d_ff(26);else osd<= not d_ff(24);---程序分频取第26位24 位end if;end process first;second:process(osc)----扫描部分beginif(osc='1' and osc'event)thencase k iswhen '1'=> ---一屏一屏显示电气二加油if st(7 downto 0)="00000000"or st(7 downto 0)="01111111" then st(7 downto 0)<="11111110";data<=d0;elsif st(7 downto 0)="11111110"thenst(7 downto 0)<="11111101";data<=d1;elsif st(7 downto 0)="11111101" thenst(7 downto 0)<="11111011";data<=d2;elsif st(7 downto 0)="11111011" thenst(7 downto 0)<="11110111";data<=d3;elsif st(7 downto 0)="11110111" thenst(7 downto 0)<="11101111";data<=d4;elsif st(7 downto 0)="11101111" thenst(7 downto 0)<="11011111";data<=d5;elsif st(7 downto 0)="11011111" thenst(7 downto 0)<="10111111";data<=d6;elsif st(7 downto 0)="10111111" thenst(7 downto 0)<="01111111";data<=d7;end if; ---逐列扫描when '0'=> ---滚动显示电if st(7 downto 0)="00000000"or st(7 downto 0)="01111111" then st(7 downto 0)<="11111110";data<=d8;elsif st(7 downto 0)="11111110"thenst(7 downto 0)<="11111101";data<=d9;elsif st(7 downto 0)="11111101" thenst(7 downto 0)<="11111011";data<=d10;elsif st(7 downto 0)="11111011" thenst(7 downto 0)<="11110111";data<=d11;elsif st(7 downto 0)="11110111" thenst(7 downto 0)<="11101111";data<=d12;elsif st(7 downto 0)="11101111" thenst(7 downto 0)<="11011111";data<=d13;elsif st(7 downto 0)="11011111" thenst(7 downto 0)<="10111111";data<=d14;elsif st(7 downto 0)="10111111" thenst(7 downto 0)<="01111111";data<=d15;end if;end case;end if;end process second;third:process(osd)---循环beginif(osd='1' and osd'event)thenif lie0(6 downto 0)="0001001"thenlie0(6 downto 0)<="0000000";else lie0(6 downto 0)<=lie0+1;end if;end if;end process third;end one;三.软件设计的过程1.初始的设计:构思是按照列共阳行共阴设计“电气二”三个字一频一频显示。

vhdl实验报告_16乘16点阵_字选

vhdl实验报告_16乘16点阵_字选

综合实践总结报告综合实践名称: EDA技术与实践综合实践地点、时间题目功能分析和设计实验的要求有如下三点:1.用16*16点阵的发光二极管显示字符;2.可显示字符为0~9的数字字符与A~F英文字母的大写;3.输入为四位二进制矢量;按照要求可知,LED点阵模块,共由16×16=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。

先将要显示的每一幅图像画在一个16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布以数字8为例,点阵分布为:0000000000000000000000000000000000011111111110000001111111111000000110000001100000011000000110000001100000011000000111111111100000011111111110000001100000011000000110000001100000011000000110000001111111111000000111111111100000000000000000000000000000000000考虑到实际物理实验平台上点阵发光二极管的原理,以下为16×16点阵LED外观图,只要其对应的X、Y轴顺向偏压,即可使LED 发亮。

例如如果想使左上角LED点亮,则Y0=1,X0=0即可。

所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。

(列信号都接地)。

如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。

注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。

汉字显示屏16X16点阵制作

汉字显示屏16X16点阵制作

汉字显示屏16X16点阵制作汉字显示屏广泛应用与汽车报站器,广告屏等。

本文介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,没有使用8*8的点阵发光管模块,而是直接使用了256个高量度发光管,组成了16行16列的发光点阵。

同时为了降低制作难度,仅作了一个字的轮流显示,实际使用时可根据这个原理自行扩充显示的字数。

1、汉字显示的原理:我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。

即国标汉字库中的每一个字均由256点阵来表示。

我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。

事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素。

我们以显示汉字“大”为例,来说明其扫描原理:在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。

如果用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。

一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。

在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。

方向为p00到p07 ,显示汉字“大”时,p05点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭p0.3 灭, p0.4 灭, p0.5 亮,p0.6 灭,p0.7 灭。

即二进制00000100,转换为16进制为 04h.。

上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。

然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h. 这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”的扫描代码为:04H,00H,04H,02H,04H,02H,04H,04H04H,08H,04H,30H,05H,0C0H,0FEH,00H05H,80H,04H,60H,04H,10H,04H,08H04H,04H,0CH,06H,04H,04H,00H,00H由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。

16X16点阵汉字显示

16X16点阵汉字显示
h0,h8:out std_logic_vector(7 downto 0) );
end yz_ok;
architecture count of yz_ok is
signal lie:std_logic_vector(3 downto 0);
signal next1:std_logic_vector(1 downto 0);
思想都是相同的,只是根据不同的硬件,具体的方法有所区
别。目前这种简单的显示方法已经很成熟了,很多地方会用
到它。例如在火车站、机场、银行、证券公司等公共场所的
信息显示都是用的点阵显示。有些场所使用了一些更为复杂
的点阵。随着硬件水平的提高,显示的效果会更加美观。现
设计一个16X16点阵,使用逐行扫描的方式来不间断地显示
when "1100"=>h0<="11111100";h8<="00111111";
when others=>h0<="00000000";h8<="00000000";
end case;
when "01"=>
case lie is
when "0011"=>h0<="00100000";h8<="00100000";
when "1000"=>h0<="11100100";h8<="00011111";
when "1001"=>h0<="00010100";h8<="00100001";

16乘16点阵显示综合设计报告

16乘16点阵显示综合设计报告

一、方案设计本设计大概包括时钟源、CPLD芯片,显示器。

此次实验所用的可编程逻辑器件的主芯片为EPF10K10LC84-3。

通过VHDL语言进行编程分别把程序模块进行编译仿真。

所编的十六进制计数器控制花样信号对字符库进行选择,计数器产生的花样信号和时钟信号共同控制行选信号和列选信号(列选频率一定要比字选频率大很多)把相应的值输入点阵,控制显示器显示相应的字符。

时钟源信号要高于24HZ 。

所分模块有:1、字选模块:为十六进制计数器模块,其时钟源信号要比列选信号小得多。

2、列选信号:通过给定的时钟信号用来选中列,再对列进行扫描。

3、显示模块:经过字选信号和列选信号输出十六位二进制用来显示一行。

4、顶层模块:该模块采用图形模式(图3),把所有模块按要求连接起来,再加上顶层输入信号。

二、实验原理16×16扫描LED点阵的工作原理同8位扫描数码管类似。

它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。

所以其扫描译码地址需4位信号线。

2864E2PROM存贮器是电可擦除/编程的只读存贮器,容量为8k×8bit ,有13位并行地址线和8位并行数据线,而一个完整的字符所需的存贮容间为32字节即32×8 bit,也就是说2864最多可连续存256个16×16点阵字形。

存贮方式可事先约定好。

本实验就是要通过CPLD芯片产生读时序,将字形从2864中读出,然后产生写时序,写入16×16的点阵,使其扫描显示输出。

三、单元电路设计1)十六进制计数器用VHDL语言十六进制计数器进行设计,程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY JISHU ISPORT(CLK,RST,LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END JISHU;ARCHITECTURE SHILIU OF JISHU ISBEGINPROCESS(CLK,RST,LOAD,DIN)BEGINIF (CLK'EVENT AND CLK='1') THENIF(RST='1')THEN DOUT<=(OTHERS=>'0');ELSIF (LOAD='1') THEN DOUT<=DIN;ELSIF (DOUT=8) THENDOUT<="0000";ELSEDOUT<=DOUT+1;END IF;END IF;END PROCESS;END SHILIU;设计完成后,器件图如图1图1十六进制计数器2)对行列控制模块进行及字库进行设计行列控制模块进行及字库程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity zhi isport( din : in std_logic_vector(3 downto 0);selout : buffer std_logic_vector(3 downto 0);clk,rst: in std_logic;dotout : out std_logic_vector(15 downto 0));end zhi;architecture one of zhi isbeginprocess(clk,rst,din,selout)variable b:std_logic_vector(15 downto 0);beginif rst='1'then selout<="0000";elsif clk'event and clk='1' thencase din iswhen "0000"=>selout<=selout+1;case selout iswhen "1111" =>b:="0000000000000000";when "0000" =>b:="0010001000011100";when "0001" =>b:="0001000100001000";when "0010" =>b:="0000100010010000";when "0011" =>b:="0000000000100010";when "0100" =>b:="0011100001000100";when "0101" =>b:="0001000000001000";when "0110" =>b:="0001000000010000";when "0111" =>b:="0111111111100000";when "1000" =>b:="0111111111111100";when "1001" =>b:="0001000000000100";when "1010" =>b:="0001010000000100";when "1011" =>b:="0001100000000100";when "1100" =>b:="0011000000000100";when "1101" =>b:="0000000000011100";when others =>b:="0000000000000000";end case;when"0001"=>selout<=selout+1;case selout iswhen "1111" =>b:="0000000000000000";when "0000" =>b:="0000000000000000";when "0001" =>b:="0000000110000000";when "0010" =>b:="0000001100000000";when "0011" =>b:="0000011000000000";when "0100" =>b:="0000110000010000";when "0101" =>b:="0000000000001000";when "0110" =>b:="0111111111111100";when "0111" =>b:="0111111111111110";when "1000" =>b:="0000000000000000";when "1001" =>b:="0000110000000000";when "1010" =>b:="0000011000000000";when "1011" =>b:="0000001100000000";when "1100" =>b:="0000000110000000";when "1101" =>b:="0000000000000000";when others =>b:="0000000000000000";end case;when"0010"=> selout<=selout+1;case selout iswhen "1111" =>b:="0000000000000000";when "0000" =>b:="0000000000000110";when "0001" =>b:="0001100000000110";when "0010" =>b:="1001100000000110";when "0011" =>b:="1101100110000110";when "0100" =>b:="0111100110000110";when "0101" =>b:="0011100110000110";when "0110" =>b:="0001100110000110";when "0111" =>b:="0001100110000110";when "1000" =>b:="0011100110000110";when "1001" =>b:="0111100110000110";when "1010" =>b:="1101100110000110";when "1011" =>b:="1001100000000110";when "1101" =>b:="0000000000000110";when others =>b:="0000000000000000";end case;when "0011"=> selout<=selout+1;case selout iswhen "1111" =>b:="0000000000000000";when "0000" =>b:="0000000000000100";when "0001" =>b:="0000000000001100";when "0010" =>b:="0001000000011100";when "0011" =>b:="0101011011110000";when "0100" =>b:="0101011101100000";when "0101" =>b:="0101010110000000";when "0110" =>b:="1111010111111111";when "0111" =>b:="0101010111111110";when "1000" =>b:="0101010101100100";when "1001" =>b:="0101011000110000";when "1010" =>b:="0001000000011000";when "1011" =>b:="0000000000001100";when "1100" =>b:="0000000000000100";when "1101" =>b:="0000000000000000";when others =>b:="0000000000000000";end case;when"0100"=> selout<=selout+1;case selout iswhen "0000" =>b:="0000000000011000";when "0001" =>b:="0000011000110000";when "0010" =>b:="0110011011000000";when "0011" =>b:="0111111111111100";when "0100" =>b:="0111111111111110";when "0101" =>b:="0110011110000000";when "0110" =>b:="0000011011100000";when "1000" =>b:="0000000000000000";when "1001" =>b:="0000011111110000";when "1010" =>b:="0000011111100000";when "1011" =>b:="0000000000001000";when "1100" =>b:="0111111111111100";when "1101" =>b:="0111111111111110";when "1110" =>b:="0000000000000000";when others =>b:="0000000000000000";end case;when"0101"=> selout<=selout+1;case selout iswhen "0000" =>b:="0000000000000000";when "0001" =>b:="0000111000000010";when "0010" =>b:="0000111000000110";when "0011" =>b:="0000100110001000";when "0100" =>b:="0000100110010110";when "0101" =>b:="0000100110101110";when "0110" =>b:="0110100111010110";when "0111" =>b:="0110101110100110";when "1000" =>b:="0110100110000110";when "1001" =>b:="0000100110010110";when "1010" =>b:="0000100110001110";when "1011" =>b:="0000100110000110";when "1100" =>b:="0000111000000110";when "1101" =>b:="0000111000000010";when "1110" =>b:="0000000000000000";when others =>b:="0000000000000000";end case;when"0110"=> selout<=selout+1;case selout iswhen "1111" =>b:="0000000000000000";when "0000" =>b:="0000000000000010";when "0010" =>b:="0110000110000110";when "0011" =>b:="0110000110000110";when "0100" =>b:="0110000110000110";when "0101" =>b:="0110000110000110";when "0110" =>b:="0111111111111110";when "0111" =>b:="0111111111111110";when "1000" =>b:="0110000110000110";when "1001" =>b:="0110000110000110";when "1010" =>b:="0110000110000110";when "1011" =>b:="0110000110000110";when "1100" =>b:="0110000000000110";when "1101" =>b:="0000000000000010";when others =>b:="0000000000000000";end case;when "0111"=> selout<=selout+1;case selout iswhen "0000" =>b:="0000000000100100";when "0001" =>b:="0010001000011000";when "0010" =>b:="0010010100011000";when "0011" =>b:="0010110010100100";when "0100" =>b:="0011000001001010";when "0101" =>b:="0010010010101010";when "0110" =>b:="0010010010101010";when "0111" =>b:="0010010010101010";when "1000" =>b:="0111111111111110";when "1001" =>b:="0010010010101010";when "1010" =>b:="0010010010101010";when "1011" =>b:="0010010010101010";when "1100" =>b:="0011111110001010";when "1101" =>b:="0000010000001010";when "1110" =>b:="0000010000000010";when others =>b:="0000000000000000";end case;when"1000"=> selout<=selout+1;case selout iswhen "0000" =>b:="0000000001111100";when "0001" =>b:="0000100011000000";when "0010" =>b:="0010100100100000";when "0011" =>b:="0010101000010000";when "0100" =>b:="0111111111001000";when "0101" =>b:="0010100100000100";when "0110" =>b:="0010100100000010";when "0111" =>b:="0000100000000010";when "1000" =>b:="0000000000000010";when "1001" =>b:="0100010001110010";when "1010" =>b:="0100100010001010";when "1011" =>b:="0101000010001010";when "1100" =>b:="0110010010001010";when "1101" =>b:="0111111001110010";when "1110" =>b:="0000000000000000";when others =>b:="0000000000000000";end case;when"1001"=>selout<=selout+1;case selout iswhen "1111" =>b:="0000111100001111";when "0000" =>b:="0000111100001111";when "0001" =>b:="0000111100001111";when "0010" =>b:="0000111100001111";when "0011" =>b:="1111000011110000";when "0100" =>b:="1111000011110000";when "0101" =>b:="1111000011110000";when "0110" =>b:="1111111111110000";when "0111" =>b:="0000111100001111";when "1000" =>b:="0000111100001111";when "1001" =>b:="0000111100001111";when "1010" =>b:="0000111100001111";when "1011" =>b:="1111000011110000";when "1101" =>b:="1111000011110000";when "1110" =>b:="1111000011110000";when others =>null;end case;when"1010"=>selout<=selout+1;case selout iswhen "1111" =>b:="1111000011110000";when "0000" =>b:="1111000011110000";when "0001" =>b:="1111000011110000";when "0010" =>b:="1111000011110000";when "0011" =>b:="0000111100001111";when "0100" =>b:="0000111100001111";when "0101" =>b:="0000111100001111";when "0110" =>b:="0000111100001111";when "0111" =>b:="1111000011110000";when "1000" =>b:="1111000011110000";when "1001" =>b:="1111000011110000";when "1010" =>b:="1111000011110000";when "1011" =>b:="0000111100001111";when "1100" =>b:="0000111100001111";when "1101" =>b:="0000111100001111";when "1110" =>b:="0000111100001111";when others =>null;end case;when"1011"=>selout<=selout+1;case selout iswhen "1111" =>b:="0000000011111111";when "0000" =>b:="0000000011111111";when "0001" =>b:="0000000011111111";when "0010" =>b:="0000000011111111";when "0011" =>b:="0000000011111111";when "0100" =>b:="0000000011111111";when "0101" =>b:="0000000011111111";when "0111" =>b:="1111111100000000";when "1000" =>b:="1111111100000000";when "1001" =>b:="1111111100000000";when "1010" =>b:="1111111100000000";when "1011" =>b:="1111111100000000";when "1100" =>b:="1111111100000000";when "1101" =>b:="1111111100000000";when "1110" =>b:="1111111100000000";when others =>null;end case;when"1100"=> selout<=selout+1;case selout iswhen "1111" =>b:="1111111100000001";when "0000" =>b:="0111111100000011";when "0001" =>b:="0011111100000111";when "0010" =>b:="0001111100001111";when "0011" =>b:="0000111100011111";when "0100" =>b:="0000011100111111";when "0101" =>b:="0000001101111111";when "0110" =>b:="0000000111111111";when "0111" =>b:="1111111110000000";when "1000" =>b:="1111111011000000";when "1001" =>b:="1111110011100000";when "1010" =>b:="1111100011110000";when "1011" =>b:="1111000011111000";when "1100" =>b:="1110000011111100";when "1101" =>b:="1100000011111110";when "1110" =>b:="1000000011111111";when others =>null;end case;when"1101"=> selout<=selout+1;case selout iswhen "0000" =>b:="1111111111111111";when "0001" =>b:="1111110011111111";when "0010" =>b:="1111000011111111";when "0011" =>b:="1110000011111111";when "0100" =>b:="1111100011111111";when "0101" =>b:="1111110011001111";when "0110" =>b:="1111111001000111";when "0111" =>b:="1100000000000011";when "1000" =>b:="1110001100111111";when "1001" =>b:="1110011100011111";when "1010" =>b:="1111111100000111";when "1011" =>b:="1111111100001111";when "1100" =>b:="1111111100111111";when "1101" =>b:="1111111111111111";when "1110" =>b:="1111111111111111";when others =>null;end case;when"1110"=> selout<=selout+1;case selout iswhen "1111" =>b:="1111111111111111";when "0000" =>b:="1111111111111111";when "0001" =>b:="1111111111111111";when "0010" =>b:="1111111111111111";when "0011" =>b:="1111000000001111";when "0100" =>b:="1111011100001111";when "0101" =>b:="1111001101101111";when "0110" =>b:="1111000111101111";when "0111" =>b:="1111011110001111";when "1000" =>b:="1111011011001111";when "1001" =>b:="1111000011101111";when "1010" =>b:="1111000000001111";when "1011" =>b:="1111111111111111";when "1100" =>b:="1111111111111111";when "1110" =>b:="1111111111111111";when others =>null;end case;when"1111"=> selout<=selout+1;case selout iswhen "1111" =>b:="1111111111111111";when "0000" =>b:="1111111111111111";when "0001" =>b:="1111111111111111";when "0010" =>b:="1111111111111111";when "0011" =>b:="1111111111111111";when "0100" =>b:="1111111111111111";when "0101" =>b:="1111111111111111";when "0110" =>b:="1111111111111111";when "0111" =>b:="1111111111111111";when "1000" =>b:="1111111111111111";when "1001" =>b:="1111111111111111";when "1010" =>b:="1111111111111111";when "1011" =>b:="1111111111111111";when "1100" =>b:="1111111111111111";when "1101" =>b:="1111111111111111";when "1110" =>b:="1111111111111111";when others =>null;end case;when others=>null;end case;end if;dotout<=b;end process;end one;设计完成后,该模块器件图如图2图2 行列控制模块四、总原理图把十六进制计数器和行列控制模块连接成一个器件,总原理图如图3图3 总原理图其引脚图如图4图4 总器件引脚图图5为部分字符仿真波形,如下图5 部分字符仿真波形五、结论16×16点阵显示综合设计基本符合要求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

毕业设计(论文)开题报告目录摘要ABSTRACT第一章前言 (1)1.1本设计的研究背景和研究目的 (1)1.2LED点阵显示特点 (1)1.3FPGA设计的特点 (1)第二章系统设计 (3)2.1设计任务与要求 (3)2.1.1设计任务 (3)2.1.2设计要求 (3)2.2设计原理 (3)2.2.1总体设计方案 (3)2.2.2方案的比较 (4)2.3扫描控制模块 (4)2.3.1 LED的显示原理 (4)2.3.2汉字的存储 (5)2.4汉字显示 (5)2.4.1列循环扫描 (5)2.4.2字符样式设计 (6)2.4.3字母循环扫描及期间的延时环节 (9)2.5整个完整的程序 (9)第三章系统调试与仿真 (14)3.1开发环境介绍 (14)3.2调试与仿真 (14)3.2.1 创建工程 (14)3.2.2 编译前设置 (14)3.2.3 全程编译 (16)3.2.4时序仿真 (17)第四章结束语 (18)答谢辞 (18)参考文献 (18)摘要主要研究基于VHDL的Led点阵汉字滚动显示。

首先描述了基于现场可编程门阵(FPGA)的硬件电路,以及点阵显示汉字的原理;然后在单个16X16 LED发光二极管点阵上滚动汉字的原理;最后给出了描述其功能的VHDL语言程序设计方法。

通过编程、调试、仿真、下载正确地实现了汉字滚动显示扫描结果,其硬件系统的实验验证也获得了与软件模拟仿真结论相吻合的结果。

关键词:LED点阵;FPGA;VHDL语言;汉字滚动显示AbstractPrimary research is based on VHDL, Led Scrolling dot matrix characters. First described based on field programmable gate array (FPGA) hardware circuit, as well as the principle character dot matrix display; and then in a single 16X16 LED scrolling LED dot matrix on the principles of Chinese characters; Finally, theVHDL description language program of its functions design. Through programming, debugging, simulation, download the correct character scroll achieved scan results, the experimental verification of its hardware and software are also obtained findings consistent with simulation results.Keywords: LED dot-matrix; FPGA; VHDL language; character scrolling displa第一章前言1.1 本设计的研究背景和研究目的受到体育场馆用LED显示屏需求快速增长的带动,近年来,中国LED显示屏应用逐步增多。

目前,LED已经广泛应用在银行、火车站、广告、体育场馆之中。

而随着世博会的临近,LED显示屏将广泛的应用在体育场馆以及道路交通指示中,LED显示屏在体育广场中的应用将出现快速增长。

目前,国从事LED显示屏生产的企业众多,同时,受到外资企业LED显示屏价格过高的影响,在中国LED显示屏市场上多以本土企业为主。

目前,本土LED显示屏生产企业除供应国需求外,还不断把产品出口到国外市场。

而近年来,受到成本压力的影响,国际上一些知名的LED显示屏企业也逐步把生产基地移到了中国,如巴可在设立了显示屏生产基地,Lighthouse在也拥有生产基地,Daktronics、莱茵堡都在国设立了生产工厂。

随着国际LED显示屏生产大厂不断把生产基地转移至国,加之国众多的LED显示屏本土企业,中国正在成为全球LED显示屏的主要生产基地。

因此研究LED汉字滚动显示屏的设计方法具有重要的理论和现实意义。

随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用LED点阵滚动显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。

采用传统方法设计的汉字滚动显示器,通常需要使用单片机、存储器和制约逻辑电路来进行PCB板级的系统集成。

尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多研发经费和较长投放市场周期的代价。

随着电子设计自动化(EDA)技术的进展,基于可编程FPGA 器件进行系统芯片集成的新设计方法,也正在快速地到代基于PCB板的传统设计方式。

因此,本设计的研究是很有必要的,之所以基于FPGA设计是因为现场可编程门阵列(FPGA)设计周期小,灵活度高,适合用于小批量系统,提高系统的可靠性和集成度。

并且采用编写灵活的VHDL语言编写主程序。

1.2 LED点阵显示特点(1)可以显示各种数字、文字、图表、曲线、图形;(2)采用纯红、高绿作双基色发光器件,发光亮度高,色彩鲜艳、丰富;(3)显示效果清晰、稳定、功耗低、寿命长;(4)优质铝合金结构,磨沙、银镜或钛金不锈钢包边。

尺寸和规格可根据需要灵活组合;(5)支持各种计算机网络,编辑软件丰富、易用;(6)适用于室、外所有信息发布及广告宣传场所。

如:银行、证券交易所、商场、市场、宾馆、洒楼、电信、邮政、医院、车站、机场等。

1.3 FPGA设计的特点FPGA 通常被认为是ASIC 实现的一种替代手段. 一般ASIC 包括三种, 既全定制、半定制(含标准单元和门阵列) 以及可编程器件。

对于前两种, 需要支付不可重复使用的工程费用NRE (Non recurring Engineering) , 主要用于芯片的流片、中测、分析的工程开销, 一次费用一般在1 万至数万美元以上。

如果一次不成功、返工、甚至多次返工,NRE 费用将要上升。

成本高、风险大, 而通常对每个ASIC 品种的需求量往往不大,NRE 费用分摊到每个产品上价太高, 用户无法接受。

而对于可编程器件PLD (Programmable Logic Device) 正是可以解决上述问题的新型ASIC, PLD 以其操作灵活、使用方便、开发迅速、投资风险小等突出优点, 特别适合于产品开发初期、科研样品研制或小批量的产品. FPGA 是一种新型的PLD, 其除了具有PLD 的优点外, 其规模比一般的PLD 的规模大。

目前,Xilinx 推出的XC4025 可以达到25000 门的规模,Altera 公司的FLEX10K100 系列芯片可达到十万门的规模,完全可以满足用户的一般设计需要。

FPGA 的主要特点是: 寄存器数目多, 采用查找表计数,适合时序逻辑设计。

但是互连复杂, 由于互连采用开关矩阵,因而使得延时估计往往不十分准确。

FPGA 也有其自身的局限性, 其一就是器件规模的限制,其二就是单元延迟比较大。

所以, 在设计者选定某一FPGA器件后, 要求设计者对器件的结构、性能作深入的了解, 在体系结构设计时, 就必须考虑到器件本身的结构及性能, 尽可能使设计的结构满足器件本身的要求. 这样就增加了设计的难度。

离开对FPGA 结构的详细了解, 设计人员就不可能优化设计。

因而设计人员必须了解FPGA 器件的特性和限制, 熟悉FPGA 的结构。

在了解FPGA 结构特点的基础上, 就可以利用VHDL 语言描写出高效的电路描述实现性能优化的电路。

第二章系统设计2.1设计任务与要求2.1.1设计任务(1)设计一个16×16的LED点阵显示器;(2)在设计过程中,EDA试验箱进行仿真调试。

2.1.2设计要求(1)输出预定义“王、日、田、口”四个汉字;(2)输出汉字循环显示;(3)操作方便、可维护性高;(4)程序简捷,便于修改。

2.2设计原理2.2.1总体设计方案方案一:本设计所使用的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显示屏上,再利用另一个进程对这个数组按一定频率进行数据更新,更新的方式可以有多种。

因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动显示。

如图2-1为该方案原理图。

该方案只能实现汉字的滚动显示。

方案二中将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即可符合视觉暂留要求。

此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。

相关文档
最新文档