1616点阵显示.docx
- 文档编号:18110350
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:33
- 大小:160.39KB
1616点阵显示.docx
《1616点阵显示.docx》由会员分享,可在线阅读,更多相关《1616点阵显示.docx(33页珍藏版)》请在冰点文库上搜索。
1616点阵显示
目录
第一章系统设计总述1
1.1设计要求1
1.2要求分析1
第二章系统设计原理2
第三章系统子程序设计3
3.132进制计数器设计3
3.216进制计数器设计4
3.3列驱动设计5
3.4行驱动设计6
第四章原理图仿真波形25
第五章设计小结26
参考文献27
第一章系统设计总述
1.1设计要求
使用FPGA设计一个16×16的点阵显示的控制器,使点阵显示器以两种花样显示“江西理工大学应用科学学院欢迎您!
”
1.2要求分析
根据设计要求可以分析出:
点阵显示的花样有静态显示一个汉字,一屏一屏的显示汉字还有滚动显示汉字,还可以用亮着的灯显示汉字或者用暗着的灯显示汉字。
根据以上的分析,本实验采用如下两种花样显示:
第一种花样是用亮着的灯组合所要显示的字,第二种方案是用暗着的灯组成所需要的字。
两种花样都是用一屏一屏的显示方法。
图1-1方案一示例图1-2方案二示例
第二章系统设计原理
16×16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X轴或Y轴。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
本实验就是要通过CPLD芯片产生读时序,将字形从寄存器中读出,然后产生写时序,写入16×16的点阵,使其扫描显示输出。
为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以128HZ的时序逐个点亮每一行,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。
LED点阵每个点都有一个红色的发光二极管。
点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
本实验采取行扫描方式,用列给文字信息,利用周期为1s的脉冲来控制所显示的字。
本设计由32进制计数器(COUNT32),16进制计数器(COUNT16),行驱动(XIANSHI)和列驱动(ROWCON)组成。
图2-116×16点阵原理图
第三章系统子程序设计
3.132进制计数器设计
COUNT32.vhd是32进制的计数器,其每计一次数,输出一个字。
例如当计数为“00000B”时显示“江”,当计数为“00001B”时显示“西”。
给其脉冲周期为1S。
其描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNT32IS
PORT(CLK1:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(4DOWNTO0));
ENDENTITYCOUNT32;
ARCHITECTUREBEHVOFCOUNT32IS
SIGNALCQI:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
PROCESS(CLK1)
BEGIN
IF(CLK1'EVENTANDCLK1='1')THEN
CQI<=CQI+1;
ENDIF;
QOUT<=CQI;
ENDPROCESS;
ENDARCHITECTUREBEHV;
图3-1CUONT32.VHD仿真波形图
从上图中可以看出,本模块是32进制的计数器,当CLK1给予脉冲时输出为前一个数值加1,例如:
在31.46ms前输出为00110B,在这个时刻CLK1给予触发脉冲,31.46ms后的输出为00111B。
可以看出该模块满足设计要求。
3.216进制计数器设计
COUNT16.vhd是16进制的计数器,其输出端控制行和列驱动控制器的输出数据;其描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNT16IS
PORT(CLK:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYCOUNT16;
ARCHITECTUREBEHVOFCOUNT16IS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
CQI<=CQI+1;
ENDIF;
QOUT<=CQI;
ENDPROCESS;
ENDARCHITECTUREBEHV;
图3-2COUNT16.vhd仿真波形图
从上图可以看出,该模块为16进制的计数器,当CLK给予脉冲时输出为前一个数值加1,例如:
在104.86ms前输出为0AH,在这个时刻CLK给予触发脉冲,104.86ms后输出值为0BH。
可以看出该模块满足设计要求
3.3列驱动设计
ROWCON.vhd为列驱动控制器,该模块控制所亮的行,当输出为0001H时,给点阵的第一行高电平,输出为0010H时,给点阵的第二行高电平,依次类推,逐次给每行高电平。
其描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYROWCONIS
PORT(DATAIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
ROW:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDENTITYROWCON;
ARCHITECTUREBEHVOFROWCONIS
SIGNALHANG:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
PROCESS(DATAIN)
BEGIN
CASEDATAINIS
WHEN"0000"=>ROW<="1000000000000000";
WHEN"0001"=>ROW<="0100000000000000";
WHEN"0010"=>ROW<="0010000000000000";
WHEN"0011"=>ROW<="0001000000000000";
WHEN"0100"=>ROW<="0000100000000000";
WHEN"0101"=>ROW<="0000010000000000";
WHEN"0110"=>ROW<="0000001000000000";
WHEN"0111"=>ROW<="0000000100000000";
WHEN"1000"=>ROW<="0000000010000000";
WHEN"1001"=>ROW<="0000000001000000";
WHEN"1010"=>ROW<="0000000000100000";
WHEN"1011"=>ROW<="0000000000010000";
WHEN"1100"=>ROW<="0000000000001000";
WHEN"1101"=>ROW<="0000000000000100";
WHEN"1110"=>ROW<="0000000000000010";
WHEN"1111"=>ROW<="0000000000000001";
WHENOTHERS=>ROW<="0000000000000000";
ENDCASE;ENDPROCESS;
ENDARCHITECTUREBEHV;
图3-3ROWCON.vhd仿真波形图
从上图中83.89ms时刻DATATN为1000B时,输出为0080H。
当DATATN为1010B时,输出为0020H。
可以看出,该模块的设计满足要求。
3.4行驱动设计
XIANSHI.vhd为行驱动控制器SHI控制的是所显示的字。
例如当SHI为00H时,表示显示第一个字;当SHI为01H时,表示显示第二个字,依次类推。
WEI控制所显示的为字的第几行,例如当WEI为0000B时,表示输出字的第一行文字信息;WEI为0001B时,表示输出字的第二行文字信息,依次类推。
其中包括两种花样的显示方式,其描述如下:
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYXIANSHIIS
PORT(WEI:
INSTD_LOGIC_VECTOR(3downto0);
SHI:
INSTD_LOGIC_VECTOR(4downto0);
Q:
OUTSTD_LOGIC_VECTOR(15downto0));
ENDXIANSHI;
ARCHITECTUREXIANSHI_architectureOFXIANSHIIS
BEGIN
process(shi,wei)
variableb:
std_logic_vector(15downto0);
begin
caseshiis
When"00000"=>
caseweiis
when"0000"=>b:
="0100000000000000";
when"0001"=>b:
="0011000000001000";
when"0010"=>b:
="0001011111111100";
when"0011"=>b:
="0000000001000000";
when"0100"=>b:
="1000000001000000";
when"0101"=>b:
="0110000001000000";
when"0110"=>b:
="0010000001000000";
when"0111"=>b:
="0000100001000000";
when"1000"=>b:
="0001000001000000";
when"1001"=>b:
="0010000001000000";
when"1010"=>b:
="1110000001000000";
when"1011"=>b:
="0010000001000000";
when"1100"=>b:
="0010000001001000";
when"1101"=>b:
="0010111111111100";
when"1110"=>b:
="0010000000000000";
when"1111"=>b:
="0010000000000000";
whenothers=>null;endcase;
When"00001"=>
caseweiis
when"0000"=>b:
="0000000000000000";
when"0001"=>b:
="0000000000000100";
when"0010"=>b:
="1111111111111110";
when"0011"=>b:
="0000010010000000";
when"0100"=>b:
="0000010010000000";
when"0101"=>b:
="0000010010000100";
when"0110"=>b:
="0111111111111110";
when"0111"=>b:
="0100010001000100";
when"1000"=>b:
="0100010001000100";
when"1001"=>b:
="0100010001000100";
when"1010"=>b:
="0100010001000100";
when"1011"=>b:
="0100100000110100";
when"1100"=>b:
="0101000000000100";
when"1101"=>b:
="0100000000000100";
when"1110"=>b:
="0111111111111100";
when"1111"=>b:
="0100000000000100";
whenothers=>null;endcase;
When"00010"=>
caseweiis
when"0000"=>b:
="0000000000001000";
when"0001"=>b:
="0000011111111000";
when"0010"=>b:
="1111101001001000";
when"0011"=>b:
="0010001001001000";
when"0100"=>b:
="0010011111111100";
when"0101"=>b:
="0010001001001000";
when"0110"=>b:
="1111101001001000";
when"0111"=>b:
="0010001111111000";
when"1000"=>b:
="0010000001000000";
when"1001"=>b:
="0010000001010000";
when"1010"=>b:
="0010001111111000";
when"1011"=>b:
="0011110001000000";
when"1100"=>b:
="1110000001000000";
when"1101"=>b:
="0100000001000100";
when"1110"=>b:
="0000111111111110";
when"1111"=>b:
="0000000000000000";
whenothers=>null;endcase;
When"00011"=>
caseweiis
when"0000"=>b:
="0000000000000000";
when"0001"=>b:
="0000000000001000";
when"0010"=>b:
="0111111111111100";
when"0011"=>b:
="0000000100000000";
when"0100"=>b:
="0000000100000000";
when"0101"=>b:
="0000000100000000";
when"0110"=>b:
="0000000100000000";
when"0111"=>b:
="0000000100000000";
when"1000"=>b:
="0000000100000000";
when"1001"=>b:
="0000000100000000";
when"1010"=>b:
="0000000100000000";
when"1011"=>b:
="0000000100000000";
when"1100"=>b:
="0000000100000100";
when"1101"=>b:
="1111111111111110";
when"1110"=>b:
="0000000000000000";
when"1111"=>b:
="0000000000000000";
whenothers=>null;endcase;
When"00100"=>
caseweiis
when"0000"=>b:
="0000000100000000";
when"0001"=>b:
="0000000100000000";
when"0010"=>b:
="0000000100000000";
when"0011"=>b:
="0000000100000000";
when"0100"=>b:
="0000000100000100";
when"0101"=>b:
="1111111111111110";
when"0110"=>b:
="0000000100000000";
when"0111"=>b:
="0000001010000000";
when"1000"=>b:
="0000001010000000";
when"1001"=>b:
="0000001010000000";
when"1010"=>b:
="0000001001000000";
when"1011"=>b:
="0000001000010000";
when"1100"=>b:
="0000100000010000";
when"1101"=>b:
="0001000000001110";
when"1110"=>b:
="0110000000000100";
when"1111"=>b:
="0000000000000000";
whenothers=>null;endcase;
When"00101"=>
caseweiis
when"0000"=>b:
="0010001000001000";
when"0001"=>b:
="0001000100001000";
when"0010"=>b:
="0000000000000000";
when"0011"=>b:
="0000000000100000";
when"0100"=>b:
="0111111111111110";
when"0101"=>b:
="0100000000000010";
when"0110"=>b:
="1000000000000100";
when"0111"=>b:
="0001111111100000";
when"1000"=>b:
="0000000001000000";
when"1001"=>b:
="0000000110000100";
when"1010"=>b:
="1111111111111110";
when"1011"=>b:
="0000000100000000";
when"1100"=>b:
="0000000100000000";
when"1101"=>b:
="0000000100000000";
when"1110"=>b:
="0000010100000000";
when"1111"=>b:
="0000001000000000";
whenothers=>null;endcase;
When"00110"=>
caseweiis
when"0000"=>b:
="0000001000000000";
when"0001"=>b:
="0000000100000100";
when"0010"=>b:
="0011111111111110";
when"0011"=>b:
="0010000000000000";
when"0100"=>b:
="0010000100000100";
when"0101"=>b:
="0010100010000100";
when"0110"=>b:
="0010010010000100";
when"0111"=>b:
="0010010001001000";
when"1000"=>b:
="0010001001001000";
when"1001"=>b:
="0010001001001000";
when"1010"=>b:
="0010001000010000";
when"1011"=>b:
="0010001000010000";
when"1100"=>b:
="0010000000100000";
when"1101"=>b:
="0100000001000100";
when"1110"=>b:
="1001111111111110";
when"1111"=>b:
="1001111111111110";
whenothers=>null;endcase;
When"00111"=>
caseweiis
when"0000"=>b:
="0000000000001000";
when"0001"=>b:
="0011111111111100";
when"0010"=>b:
="0010000100001000";
when"0011"=>b:
="0010000100001000";
when"0100"=>b:
="0010000100001000";
when"0101"=>b:
="0011111111111000";
when"0110"=>b:
="0010000100001000";
when"0111"=>b:
="0010000100001000";
when"1000"=>b:
="0010000100001000";
when"1001"=>b:
="0011111111111000";
when"1010"=>b:
="0010000100001000";
when"1011"=>b:
="0010000100001000";
when"1100"=>b:
="0010000100001000";
when"1101"=>b:
="0100000100001000";
when"1110"=>b:
="0100000100101111";
when"1111"=>b:
="1000000000010000";
whenothers=>null;endcase;
When"01000"=>
caseweiis
when"0000"=>b:
="0000010000010000";
when"0001"=>b:
="0000111000010000";
when"0010"=>b:
="1111100010010000";
when"0011"=>b:
="0000100001010000";
when"0100"=>b:
="0000100000010000";
when"0101"=>b:
="1111111010010000";
when"0110"=>b:
="0000100001010000";
when"0111"=>b:
="0001110000010100";
when"1000"=>b:
="0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1616 点阵 显示
![提示](https://static.bingdoc.com/images/bang_tan.gif)