16×16点阵显示综合实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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";