基于FPGA的点阵汉字显示课程设计论文.docx
- 文档编号:7884668
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:20
- 大小:357.64KB
基于FPGA的点阵汉字显示课程设计论文.docx
《基于FPGA的点阵汉字显示课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于FPGA的点阵汉字显示课程设计论文.docx(20页珍藏版)》请在冰豆网上搜索。
基于FPGA的点阵汉字显示课程设计论文
基于FPGA的点阵显示控制的设计
一.课程要求
1、技术要求:
(1)掌握8X8点阵显示的工作原理;
(2)熟练掌握QuartusⅡ6.0软件的使用方法;
(3)能运用VHDL语言根据要求实现显示不同汉字;
(4)能根据要求对设计电路进行仿真和测试。
2、功能要求:
实现显示汉字“电气二加油”的一屏一屏显示。
3、本人的工作:
负责软件的编写,仿真,下载,调试。
二.设计方案:
1、硬件部分(框图)
2、软件部分
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitywenis---函数库
port(clk,k,l:
instd_logic;
ld,com:
outstd_logic_vector(7downto0));
endwen;----主函数
architectureoneofwenis
signalst:
std_logic_vector(7downto0);
signalosc,osd:
std_logic;
signald_ff:
std_logic_vector(29downto0);
signaldata,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15:
std_logic_vector(7downto0);
signallie0:
std_logic_vector(6downto0);---定义变量
begin
com<=data;
ld<=st;
d0<=
"00000000"whenlie0(6downto0)="0000000"else
"00000100"whenlie0(6downto0)="0000001"else
"00100000"whenlie0(6downto0)="0000010"else
"01000100"whenlie0(6downto0)="0000011"else
"10001010"whenlie0(6downto0)="0000100"else
"11111111"whenlie0(6downto0)="0000101"else
"11111011"whenlie0(6downto0)="0000110"else
"11011111"whenlie0(6downto0)="0000111"else
"10111011"whenlie0(6downto0)="0001000"else
"01110101"whenlie0(6downto0)="0001001"else
"00000000";
d1<=
"00111110"whenlie0(6downto0)="0000000"else
"00010010"whenlie0(6downto0)="0000001"else
"00100000"whenlie0(6downto0)="0000010"else
"00111110"whenlie0(6downto0)="0000011"else
"01010100"whenlie0(6downto0)="0000100"else
"11000001"whenlie0(6downto0)="0000101"else
"11101101"whenlie0(6downto0)="0000110"else
"11011111"whenlie0(6downto0)="0000111"else
"11000001"whenlie0(6downto0)="0001000"else
"10101011"whenlie0(6downto0)="0001001"else
"00000000";
d2<=
"00101010"whenlie0(6downto0)="0000000"else
"00010101"whenlie0(6downto0)="0000001"else
"00100100"whenlie0(6downto0)="0000010"else
"10000100"whenlie0(6downto0)="0000011"else
"00000000"whenlie0(6downto0)="0000100"else
"11010101"whenlie0(6downto0)="0000101"else
"11101010"whenlie0(6downto0)="0000110"else
"11011011"whenlie0(6downto0)="0000111"else
"01111011"whenlie0(6downto0)="0001000"else
"11111111"whenlie0(6downto0)="0001001"else
"00000000";
d3<=
"11111111"whenlie0(6downto0)="0000000"else
"00010101"whenlie0(6downto0)="0000001"else
"00100100"whenlie0(6downto0)="0000010"else
"01111100"whenlie0(6downto0)="0000011"else
"11111100"whenlie0(6downto0)="0000100"else
"00000000"whenlie0(6downto0)="0000101"else
"11101010"whenlie0(6downto0)="0000110"else
"11011011"whenlie0(6downto0)="0000111"else
"10000011"whenlie0(6downto0)="0001000"else
"00000011"whenlie0(6downto0)="0001001"else
"00000000";
d4<=
"10101010"whenlie0(6downto0)="0000000"else
"00010101"whenlie0(6downto0)="0000001"else
"00100100"whenlie0(6downto0)="0000010"else
"00000000"whenlie0(6downto0)="0000011"else
"10010100"whenlie0(6downto0)="0000100"else
"01010101"whenlie0(6downto0)="0000101"else
"11101010"whenlie0(6downto0)="0000110"else
"11011011"whenlie0(6downto0)="0000111"else
"11111111"whenlie0(6downto0)="0001000"else
"01101011"whenlie0(6downto0)="0001001"else
"00000000";
d5<=
"10111110"whenlie0(6downto0)="0000000"else
"01110101"whenlie0(6downto0)="0000001"else
"00100100"whenlie0(6downto0)="0000010"else
"01111100"whenlie0(6downto0)="0000011"else
"11111111"whenlie0(6downto0)="0000100"else
"01000001"whenlie0(6downto0)="0000101"else
"10001010"whenlie0(6downto0)="0000110"else
"11011011"whenlie0(6downto0)="0000111"else
"10000011"whenlie0(6downto0)="0001000"else
"00000000"whenlie0(6downto0)="0001001"else
"00000000";
d6<=
"11000000"whenlie0(6downto0)="0000000"else
"10000000"whenlie0(6downto0)="0000001"else
"00100000"whenlie0(6downto0)="0000010"else
"01000100"whenlie0(6downto0)="0000011"else
"10010100"whenlie0(6downto0)="0000100"else
"00111111"whenlie0(6downto0)="0000101"else
"01111111"whenlie0(6downto0)="0000110"else
"11011111"whenlie0(6downto0)="0000111"else
"10111011"whenlie0(6downto0)="0001000"else
"01101011"whenlie0(6downto0)="0001001"else
"00000000";
d7<=
"00000000"whenlie0(6downto0)="0000000"else
"11000000"whenlie0(6downto0)="0000001"else
"00100000"whenlie0(6downto0)="0000010"else
"01111100"whenlie0(6downto0)="0000011"else
"11111100"whenlie0(6downto0)="0000100"else
"11111111"whenlie0(6downto0)="0000101"else
"00111111"whenlie0(6downto0)="0000110"else
"11011111"whenlie0(6downto0)="0000111"else
"10000011"whenlie0(6downto0)="0001000"else
"00000011"whenlie0(6downto0)="0001001"else
"00000000";---字库电气二加油
d8<=
"00000000"whenlie0="00000000"else
"00111110"whenlie0="00000001"else
"00101010"whenlie0="00000010"else
"11111111"whenlie0="00000011"else
"10101010"whenlie0="00000100"else
"10111110"whenlie0="00000101"else
"11000000"whenlie0="00000110"else
"00000000"whenlie0="00000111"else
"00000000"whenlie0="00001000"else
"00000000"whenlie0="00001001"else
"00000000";
d9<=
"00111110"whenlie0="00000000"else
"00101010"whenlie0="00000001"else
"11111111"whenlie0="00000010"else
"10101010"whenlie0="00000011"else
"10111110"whenlie0="00000100"else
"11000000"whenlie0="00000101"else
"00000000"whenlie0="00000110"else
"00000000"whenlie0="00000111"else
"00000000"whenlie0="00001000"else
"00000000"whenlie0="00001001"else
"00000000";
d10<=
"00101010"whenlie0="00000000"else
"11111111"whenlie0="00000001"else
"10101010"whenlie0="00000010"else
"10111110"whenlie0="00000011"else
"11000000"whenlie0="00000100"else
"00000000"whenlie0="00000101"else
"00000000"whenlie0="00000110"else
"00000000"whenlie0="00000111"else
"00000000"whenlie0="00001000"else
"00111110"whenlie0="00001001"else
"00000000";
d11<=
"11111111"whenlie0="00000000"else
"10101010"whenlie0="00000001"else
"10111110"whenlie0="00000010"else
"11000000"whenlie0="00000011"else
"00000000"whenlie0="00000100"else
"00000000"whenlie0="00000101"else
"00000000"whenlie0="00000110"else
"00000000"whenlie0="00000111"else
"00111110"whenlie0="00001000"else
"00101010"whenlie0="00001001"else
"00000000";
d12<=
"10101010"whenlie0="00000000"else
"10111110"whenlie0="00000001"else
"11000000"whenlie0="00000010"else
"00000000"whenlie0="00000011"else
"00000000"whenlie0="00000100"else
"00000000"whenlie0="00000101"else
"00000000"whenlie0="00000110"else
"00111110"whenlie0="00000111"else
"00101010"whenlie0="00001000"else
"11111111"whenlie0="00001001"else
"00000000";
d13<=
"10111110"whenlie0="00000000"else
"11000000"whenlie0="00000001"else
"00000000"whenlie0="00000010"else
"00000000"whenlie0="00000011"else
"00000000"whenlie0="00000100"else
"00000000"whenlie0="00000101"else
"00111110"whenlie0="00000110"else
"00101010"whenlie0="00000111"else
"11111111"whenlie0="00001000"else
"10101010"whenlie0="00001001"else
"00000000";
d14<=
"11000000"whenlie0="00000000"else
"00000000"whenlie0="00000001"else
"00000000"whenlie0="00000010"else
"00000000"whenlie0="00000011"else
"00000000"whenlie0="00000100"else
"00111110"whenlie0="00000101"else
"00101010"whenlie0="00000110"else
"11111111"whenlie0="00000111"else
"10101010"whenlie0="00001000"else
"10111110"whenlie0="00001001"else
"00000000";
d15<=
"00000000"whenlie0="00000000"else
"00000000"whenlie0="00000001"else
"00000000"whenlie0="00000010"else
"00000000"whenlie0="00000011"else
"00111110"whenlie0="00000100"else
"00101010"whenlie0="00000101"else
"11111111"whenlie0="00000110"else
"10101010"whenlie0="00000111"else
"10111110"whenlie0="00001000"else
"11000000"whenlie0="00001001"else
"00000000";---字库循环电
first:
process-----分频
begin
waituntilclk='1';
ifd_ff(29downto0)>=2e8then
d_ff(29downto0)<="000000000000000000000000000000";
else
d_ff(29downto0)<=d_ff+1;
endif;
osc<=notd_ff(10);
ifl='0'then
osd<=notd_ff(26);
elseosd<=notd_ff(24);---程序分频取第26位24位
endif;
endprocessfirst;
second:
process(osc)----扫描部分
begin
if(osc='1'andosc'event)then
casekis
when'1'=>---一屏一屏显示电气二加油
ifst(7downto0)="00000000"orst(7downto0)="01111111"then
st(7downto0)<="11111110";data<=d0;
elsifst(7downto0)="11111110"then
st(7downto0)<="11111101";data<=d1;
elsifst(7downto0)="11111101"then
st(7downto0)<="11111011";data<=d2;
elsifst(7downto0)="11111011"then
st(7downto0)<="11110111";data<=d3;
elsifst(7downto0)="11110111"then
st(7downto0)<="11101111";data<=d4;
elsifst(7downto0)="11101111"then
st(7downto0)<="11011111";data<=d5;
elsifst(7downto0)="11011111"then
st(7downto0)<="10111111";data<=d6;
elsifst(7downto0)="10111111"then
st(7downto0)<="01111111";data<=d7;
endif;---逐列扫描
when'0'=>---滚动显示电
ifst(7downto0)="00000000"orst(7downto0)="01111111"then
st(7downto0)<="11111110";data<=d8;
elsifst(7downto0)="11111110"then
st(7downto0)<="11111101";data<=d9;
elsifst(7downto0)="11111101"then
st(7downto0)<="11111011";data<=d10;
elsifst(7downto0)="11111011"then
st(7downto0)<="11110111";data<=d11;
elsifst(7downto0)="11110111"then
st(7downto0)<="11101111";data<=d12;
elsifst(7downto0)="11101111"then
st(7downto0)<="11011111";data<=d13;
elsifst(7downto0)="11011111"then
st(7downto0)<="10111111";data<=d14;
elsifst(7downto0)="10111111"then
st(7downto0)<="01111111";data<=d15;
endif;
endcase;
endif;
endprocesssecond;
third:
process(osd)---循环
begin
if(osd='1'andosd'event)then
iflie0(6downto0)="0001001"then
lie0(6downto0)<="0000000";
elselie0(6downto0)<=lie0+1;
endif;
endif;
endprocessthird;
endone;
三.软件设计的过程
1.初始的设计:
构思是按照列共阳行共阴设计“电气二”三个字一频一频显示。
设计思路是通过逐列扫描(高电平控制),字库逐行赋值(低电平控制)。
实际的8X8点阵是列共阴,行共阳,但整体思路不变。
2.模块的设计
设计一开始就在一层文件中,优化也是在这一层文件中的改动,
整个软件的设计分为以下几个部分。
(1)声明函数库.
(2)定义主函数。
(3)声明变量。
(4)字库部分。
(5)分频部分
(6)列扫描部分
(7)循环控制部分
3.优化设计:
(1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 点阵 汉字 显示 课程设计 论文