16X16点阵显示设计

更新时间:2024-05-23 10:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实 验 报 告

课程名称 EDA技术使用教程

实验名称 16*16点阵显示综合实验

实验类型 验 证 (验证、综合、设计、创新) 学院名称 专 业 年级班级 开出学期

实验四、16*16点阵显示综合实验

一、 实验要求

设计一个共阴16X16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示自己的名字,其中列选信号为16-4编码器编码输出。

二、实验目的

1、 了解点阵字符的产生和显示原理。

2、了解E2PROM和16×16点阵LED的工作机理。 3、 加强对于总线产生,地址定位的CPLD实现的理解。

三、硬件要求

1. 主芯片。 2. 可变时钟源。

3. 带有事先编程好字库/字符的E2PROM 2864。 4. 16×16扫描LED点阵。

四、实验原理

16×16扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。所以其扫描译码地址需4位信号线。要使16点阵上某个点亮,如第10行第4列的LED点亮,只要让列选信号为“0100”,从而选中第4列,再给第10行一个高电平,即可点亮该LED。本实验通过FPGA芯片写入字形,产生扫描信号。为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以大于24HZ的频率扫描列,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。

五、VHDL语言程序代码

library ieee;

2

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dots_test is

port ( clk:in std_logic; dotout:out std_logic_vector(15 downto 0); selout:out std_logic_vector(3 downto 0); M :out std_logic_vector(3 downto 0) ); end dots_test;

architecture a of dots_test is

signal sel_tmp:std_logic_vector(3 downto 0); signal dot_tmp:std_logic_vector(15 downto 0);

type dot_type is array (0 to 15) of std_logic_vector(15 downto 0); --定义16个长度为16位的数组,用来存放每一行的显示值 signal dotout_tmp:dot_type;

constant dotout_tmp1:dot_type:= --陶

(x\ x\

constant dotout_tmp2:dot_type:= --军 (x\ x\

constant dotout_tmp3:dot_type:= --喜 (x\

x\

signal scan_sel:std_logic_vector(3 downto 0);

signal clk_value:std_logic_vector(2 downto 0):=(others => '1');

constant clk_value_store:std_logic_vector(2 downto 0):=(others => '1'); signal key_tmp:std_logic_vector(3 downto 0);

begin M <= \功能选择位选择16x16点阵功能

connection:block begin dotout <= dotout_tmp(conv_integer(scan_sel)); selout <= scan_sel; end block connection;

scan_display:block --扫描显示及时钟分频

3

begin

clock_divisor: process(clk) begin if rising_edge(clk) then if (clk_value = clk_value_store) then scan_sel <= scan_sel + 1; end if; clk_value <= clk_value + 1; end if; end process clock_divisor; end block scan_display;

Free_Counter : Block -- 计数器 -- 产生扫描信号 Signal Q : STD_LOGIC_VECTOR(40 DOWNTO 0); Signal S : STD_LOGIC_VECTOR(2 DOWNTO 0); Begin

t1: PROCESS (clk) -- 计数器计数 Begin IF clk'Event AND clk='1' then Q <= Q+1; END IF; S <= Q(28 DOWNTO 26); if ( s=0) then for i in 0 to 15 loop dotout_tmp(i) <= dotout_tmp1(i); end loop; elsif ( s=1) then for i in 0 to 15 loop dotout_tmp(i) <= dotout_tmp2(i); end loop;

elsif ( s=2) then for i in 0 to 15 loop dotout_tmp(i) <= dotout_tmp3(i); end loop; end if;

END PROCESS t1;

End Block Free_Counter; end a;

六、实验结果

4

七、结论和总结

通过这次对16*16点阵字符发生器的设计与实践,让我加深了对VHDL语言的了解。本次设计使我对LED点阵显示原理及电路结构有一定的感性和理性认识,培养和锻炼敢于我们的实际动手做东西的能力。 不过本次设计也存在一些不足,暴露了自己对EDA的掌握还有所欠缺。在设计过程中,对于引脚的选择输入,电压的选择与程序的纠错都不是很熟练。也感谢老师对我设计的指导与帮助。总的来说,这次设计的收获好是很大的。

5

本文来源:https://www.bwwdw.com/article/to57.html

Top