利用拨码开关控制点阵进行十六进制数字显.docx

上传人:b****5 文档编号:7463038 上传时间:2023-01-24 格式:DOCX 页数:25 大小:379.26KB
下载 相关 举报
利用拨码开关控制点阵进行十六进制数字显.docx_第1页
第1页 / 共25页
利用拨码开关控制点阵进行十六进制数字显.docx_第2页
第2页 / 共25页
利用拨码开关控制点阵进行十六进制数字显.docx_第3页
第3页 / 共25页
利用拨码开关控制点阵进行十六进制数字显.docx_第4页
第4页 / 共25页
利用拨码开关控制点阵进行十六进制数字显.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

利用拨码开关控制点阵进行十六进制数字显.docx

《利用拨码开关控制点阵进行十六进制数字显.docx》由会员分享,可在线阅读,更多相关《利用拨码开关控制点阵进行十六进制数字显.docx(25页珍藏版)》请在冰豆网上搜索。

利用拨码开关控制点阵进行十六进制数字显.docx

利用拨码开关控制点阵进行十六进制数字显

中北大学

课程设计说明书

 

 

 

学生姓名:

杨述坤

学号:

0706024104 

学院:

电子与计算机科学技术学院 

专业:

微电子学 

题目:

利用拨码开关控制点阵进行十六进制数字显示 

 

 

 

指导教师:

王红亮职称:

讲师

 

 

 

 

2010年6月25日

 

 

 

1、课程设计目的

1.学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。

2.掌握组合逻辑电路、时序逻辑电路的设计方法。

3.学习掌握可编程器件设计的全过程

2、课程设计内容和要求

2.1、设计内容

利用拨码开关控制点阵进行十六进制数字显示,主要包括拨码开关译码电路,行选控制模块和列字符扫描信号。

2.2、设计要求

1.学习掌握拨码开关控制模块、点阵显示模块的工作原理及应用;

2.熟练掌握VHDL编程语言,编写拨码开关控制模块的控制逻辑;

3.仿真所编写的程序,模拟验证所编写的模块功能;

4.下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;

5.整理设计内容,编写设计说明书。

 

3、设计方案及实现情况

3.1、设计思路

图1设计思路

根据题目设计要求,将拨码开关的状态通过FPGA的控制在LED点阵上显示出来,系统框图如图1所示。

本题目采用自顶向下的设计方法,将系统分为两个模块,先分别用MAX+PLUSII文本设计输入编写列选通模块和列字符扫描模块,然后用图形设计输入将两个模块和相应的输入输出进行总的电路设计,通过编译、仿真、时序分析、器件编程、在线验证等一系列操作,最后完成整个设计过程。

3.2、工作原理及框图

图2总体电路原理图

LED点阵简介

LED点阵式显示器不仅可以显示数字,也可显示所有西文字母和符号,与由单个发光二极管连成的显示器相比,具有焊点少、连线少,所有点在同平面、亮度均匀、外形美观等优点,可以代替数码管、符号管和米字管。

如果将多块组合可以构成大屏幕显示屏用于汉字、图形、图表等等的显示,因此被泛用于机场、车站、码头、银行及许多公共场所的指示、说明、广告等场合。

内部结构如图3。

图316×16的LED点阵显示内部电路图

共阳极的16×16的LED点阵显示器的典型连接方式是:

每一行的16个阳极连在一起,由行扫描码锁存器和驱动器的一位控制,总共16行阳极连线由16位分别控制;每一列的16个阴极连在一起,由列扫描码锁存器和驱动器的一位控制,总共16列阴极连线由16位分别控制。

点阵式LED显示器采用逐行扫描式工作。

要使点阵显示出一个字符的编程方法是:

首先选通第一行;接着,向行码锁存器写入该行的字型码。

然后,按相同的方式选通第二行,写第二行的字型码……由此类推,直到写完所有行的字型码,完成一个字符的显示。

3.3、各模块简介功能描述:

(1)列选控制模块

在实验仪器中,16×16点阵显示的驱动电路已经做好,并且其列选通信号为一4-16译码器的输出,所以我们在设计点阵控制接口时,其列选通信号输出必须经4-16编码。

通过

循环进行4位二进制数计数,从而给点阵提供列选通信号,列选通引脚功能如图4:

图4列选通引脚功能图

(2)列字符扫描模块

由点阵的显示原理及编程方法知:

根据要显示的数字写出相应的字型码,然后根据逐行扫描的原理,首先选通第一行,接着,向行码锁存器写入该行的字型码。

然后,按相同的方式选通第二行,写第二行的字型码……由此类推,直到写完所有行的字型码,列字符扫描引脚功能如图5:

图5列字符扫描模块引脚功能图

说明:

当列选通接口SEL0-SEL3为“0000”时,选中第16列,为“0001”时,选中15列,以此类推。

列选通按照0000—0001—0010—……—1110—1111依次循环,在选中某列时,对列进行扫描,当某点列和行都为“1”时,该点被点亮。

硬件连接:

将列选通模块的四位输出接到FPGA试验箱上点阵显示器的SEL0-SEL3四个列选信号输入引脚,将列字符扫描模块的十六位输出接到FPGA试验箱上点阵显示器的q0-q15共十六个列扫描信号输入引脚,根据对FPGA进行的管脚分布连接十六个拨码开关和时钟信号(给一个频率为HZ的时钟信号),完成硬件连线,下载程序到FPGA,观察结果。

补充:

以上程序是使用4个拨码开关对LED点阵进行控制,若要用十六个拨码开关,则只需加一个拨码开关译码电路,其功能引脚如图6:

图6拨码开关译码模块引脚功能图

3.4、仿真结果

1、VHDL语言源程序

--列字符扫描信号产生源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycorais

port(ch:

instd_logic_vector(3downto0);

sel:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(15downto0));

endcora;

architecturecorn_arcofcorais

begin

process(ch,sel)

begin

casechis

when"0000"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0011111111111100";

when"0101"=>q<="0011111111111100";

when"0110"=>q<="0011000000001100";

when"0111"=>q<="0011000000001100";

when"1000"=>q<="0011000000001100";

when"1001"=>q<="0011000000001100";

when"1010"=>q<="0011111111111100";

when"1011"=>q<="0011111111111100";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示0

endcase;

when"0001"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0000000000000000";

when"0101"=>q<="0000000000000000";

when"0110"=>q<="0000000000000000";

when"0111"=>q<="0011111111111100";

when"1000"=>q<="0011111111111100";

when"1001"=>q<="0000000000000000";

when"1010"=>q<="0000000000000000";

when"1011"=>q<="0000000000000000";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示1

endcase;

when"0010"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0000000000000000";

when"0101"=>q<="0011000111111100";

when"0110"=>q<="0011000111111100";

when"0111"=>q<="0011000110001100";

when"1000"=>q<="0011000110001100";

when"1001"=>q<="0011111110001100";

when"1010"=>q<="0011111110001100";

when"1011"=>q<="0000000000000000";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示2

endcase;

when"0011"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0011111111111100";

when"0101"=>q<="0011111111111100";

when"0110"=>q<="0011000110001100";

when"0111"=>q<="0011000110001100";

when"1000"=>q<="0011000110001100";

when"1001"=>q<="0011000110001100";

when"1010"=>q<="0011000110001100";

when"1011"=>q<="0000000000000000";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示3

endcase;

when"0100"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0111111111111110";

when"0101"=>q<="0111111111111110";

when"0110"=>q<="0000000110000000";

when"0111"=>q<="0000000110000000";

when"1000"=>q<="0000000110000000";

when"1001"=>q<="0000000110000000";

when"1010"=>q<="0000000111111110";

when"1011"=>q<="0000000111111110";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示4

endcase;

when"0101"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0000000000000000";

when"0101"=>q<="0011111110001100";

when"0110"=>q<="0011111110001100";

when"0111"=>q<="0011000110001100";

when"1000"=>q<="0011000110001100";

when"1001"=>q<="0011000111111100";

when"1010"=>q<="0011000111111100";

when"1011"=>q<="0000000000000000";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示5

endcase;

when"0110"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0000000000000000";

when"0101"=>q<="0011111110001100";

when"0110"=>q<="0011111110001100";

when"0111"=>q<="0011000110001100";

when"1000"=>q<="0011000110001100";

when"1001"=>q<="0011000110001100";

when"1010"=>q<="0011111111111100";

when"1011"=>q<="0011111111111100";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示6

endcase;

when"0111"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0000000000000000";

when"0101"=>q<="0011111111111100";

when"0110"=>q<="0011111111111100";

when"0111"=>q<="0000000000001100";

when"1000"=>q<="0000000000001100";

when"1001"=>q<="0000000000001100";

when"1010"=>q<="0000000000001100";

when"1011"=>q<="0000000000000000";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示7

endcase;

when"1000"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0011111111111100";

when"0101"=>q<="0011111111111100";

when"0110"=>q<="0011000110001100";

when"0111"=>q<="0011000110001100";

when"1000"=>q<="0011000110001100";

when"1001"=>q<="0011000110001100";

when"1010"=>q<="0011111111111100";

when"1011"=>q<="0011111111111100";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示8

endcase;

when"1001"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000000000000000";

when"0011"=>q<="0000000000000000";

when"0100"=>q<="0011111111111100";

when"0101"=>q<="0011111111111100";

when"0110"=>q<="0011000110001100";

when"0111"=>q<="0011000110001100";

when"1000"=>q<="0011000110001100";

when"1001"=>q<="0011000110001100";

when"1010"=>q<="0011000111111100";

when"1011"=>q<="0011000111111100";

when"1100"=>q<="0000000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示9

endcase;

when"1010"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0011000000000000";

when"0011"=>q<="0001110000000000";

when"0100"=>q<="0000011100000000";

when"0101"=>q<="0000011111000000";

when"0110"=>q<="0000011001110000";

when"0111"=>q<="0000011000011100";

when"1000"=>q<="0000011001110000";

when"1001"=>q<="0000011111000000";

when"1010"=>q<="0000011100000000";

when"1011"=>q<="0001110000000000";

when"1100"=>q<="0011000000000000";

when"1101"=>q<="0000000000000000";

when"1110"=>q<="0000000000000000";

when"1111"=>q<="0000000000000000";

whenothers=>null;--显示A

endcase;

when"1011"=>

caseselis

when"0000"=>q<="0000000000000000";

when"0001"=>q<="0000000000000000";

when"0010"=>q<="0000111001110000";

when"0011"=>q<="0001111111111000";

when"0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1