16×16点阵显示综合实验

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

《EDA技术综合设计》

课程设计报告

报告题目: 16×16点阵显示综合实验作者所在系部:电子工程系

作者所在专业:

作者所在班级:

作者姓名:

指导教师姓名:

完成时间:

内容摘要

编写16×16点阵字符发生器的程序,通过CLK信号控制它的行驱动信号和列选信号让其依次输出‘中’,‘国’,‘人’三个字,通过硬件实验观察其结果,对于其他的显示花样以及点亮方式,可以根据实际需要自行设计。

关键字:16×16点阵,CLK,显示花样

目录

一概述 (5)

二方案设计与论证 (5)

三程序清单 (5)

四器件编程与下载 (9)

五性能测试与分析 (10)

六实验设备 (10)

七心得体会 (10)

八参考文献 (11)

课程设计任务书

一、概述

在时钟信号的控制下,使16×16点阵管花样点亮,在EDA试验仪中,16×16点阵显示列的驱动已经做好,其列选信号为SELOUT[3..0],送到4线-16线译码电路,译码电路的输出通过8只75451(双2输入与门,OC门)驱动器驱动16×16点阵管的16条共阴极列线;所以在设计点阵控制接口时,其列选信号必须由SELOUT[3..0]输出去控制译码电路。对于信号的频率,采用与七段数码管的位选信号一样的处理方法,即扫描频率大于24Hz;通过CLK信号控制行驱动与列选信号使其动态依次显示”中国人“三个字。其中CLK为时钟输入端,DIN[3..0]为花样显示模式选择,doout[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,去驱动4-16译码电路产生16×16点阵管的列选信号。

二、方案设计与论证

该程序由三个进程信号组成,进程K1通过CLK信号控制扫描频率s以及计数信号q,进而由q的记述周期控制cp信号。进程k2由cp信号控制汉字的扫描周期s0,实现汉字的依次显示,进程k3由扫描信号s控制点阵的行驱动和列选信号,使其准确显示’中国人’三个字。用VHDL语言编写程序,经过上级调试与编译,并下载到硬件观察实验结果。

三、程序清单

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity A1 is

port(clk,rst:in std_logic;

din :in std_logic_vector(3 downto 0); dotout :out std_logic_vector(15 downto 0); selout:OUT std_logic_vector(3 downto 0));

end A1;

architecture a of A1 is

signal q:std_logic_vector(7 downto 0);

signal so:std_logic_vector(1 downto 0);

signal cp:std_logic;

signal s:std_logic_vector(3 downto 0);

begin

K1:process

begin

if rising_edge(clk) then

if s="1111" then

s<="0000";

if q="11111111"then

q<="00000000";cp<='1';

else q<=q+1;cp<='0';

end if;

else s<=s+1;

end if;

end if;

end process K1;

K2:process

begin

if rising_edge(cp) then

if so="11"then

so<="00";

else so<=so+1;

end if;

end if;

end process K2;

K3:process

begin

if so="00"then

case s is

when"0000"=>selout<="0000";dotout<="0000000000000000"; when"0001"=>selout<="0001";dotout<="0000000000000000"; when"0010"=>selout<="0010";dotout<="0000000000001000"; when"0011"=>selout<="0011";dotout<="0000011111111100"; when"0100"=>selout<="0100";dotout<="0000001000001000"; when"0101"=>selout<="0101";dotout<="0000001000001000"; when"0110"=>selout<="0110";dotout<="0000001000001000"; when"0111"=>selout<="0111";dotout<="1111111111111111"; when"1000"=>selout<="1000";dotout<="0000001000001000"; when"1001"=>selout<="1001";dotout<="0000001000001000"; when"1010"=>selout<="1010";dotout<="0000001000001000"; when"1011"=>selout<="1011";dotout<="0000001000001000"; when"1100"=>selout<="1100";dotout<="0000001000001000"; when"1101"=>selout<="1101";dotout<="0000011111111100"; when"1110"=>selout<="1110";dotout<="0000000000000000"; when"1111"=>selout<="1111";dotout<="0000000000000000"; when others =>null;

end case;

elsif so="01"then

case s is

when"0000"=>selout<="0000";dotout<="0000000000000000";

相关文档
最新文档