16X16点阵显示实验.docx

上传人:b****8 文档编号:9989756 上传时间:2023-02-07 格式:DOCX 页数:15 大小:42.24KB
下载 相关 举报
16X16点阵显示实验.docx_第1页
第1页 / 共15页
16X16点阵显示实验.docx_第2页
第2页 / 共15页
16X16点阵显示实验.docx_第3页
第3页 / 共15页
16X16点阵显示实验.docx_第4页
第4页 / 共15页
16X16点阵显示实验.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

16X16点阵显示实验.docx

《16X16点阵显示实验.docx》由会员分享,可在线阅读,更多相关《16X16点阵显示实验.docx(15页珍藏版)》请在冰豆网上搜索。

16X16点阵显示实验.docx

16X16点阵显示实验

实验报告

 

实验名称:

[16X16点阵显示实验]

姓名:

学号:

指导教师:

实验时间:

[2013年6月15日]

 

 

信息与通信工程学院

 

16X16点阵显示实验

1、实验要求:

理解并掌握点阵显示符号的原理,理解原有程序,会使用动态扫描的方式使点阵显示汉字,明白点阵滚动显示的原理。

根据原有程序,掌握LPM_ROM的应用,会应用LPM_ROM存储需要显示的内容。

参照液晶显示程序,编写16*16点阵显示程序。

任务一:

实现点阵列扫描。

点亮点阵的一列,并让其不断的向右移动。

任务二:

在点阵上循环滚动显示“嵌入式系统设计”。

2、实验原理:

2.1点阵基本原理

本实验对点阵的扫描使用列扫描的方式。

就是将要显示的数据分成16列,在某一时刻只选中一列,并向点阵传送该列需要显示的数据,那么如果从左往右依次循环选中所有列,并且循环的速度足够快,因为视觉停留效应,我们就能看到完整的显示了。

如果要显示大于16列的信息,比如要显示多个汉字,由于只能同时显示16列,那么就需要在一个比较慢的时钟的指挥下,不断更新要显示的连续的16列数据,使用这样的方法就能实现滚动显示。

2.2任务原理

8*8LED点阵共由64个发光二极管组成,每个发光二极管放置在行线和列线的交叉点上,当对应的某一行高电平(置1),且某一列低电平(置0),则相应的发光二极管就亮;因此要用8*8LED点阵来显示一个字符或汉字,只需要根据字符或汉字图形中的线条或笔画,通过点亮多个发光二极管来勾勒出字符或汉字的线条或笔画就行了。

当要比较完美的显示一般的汉字,单个8*8LED点阵模块很难做到,因为LED的点数(也称为像素点)不够多,因此要显示汉字的话,需要多个8*8LED点阵拼合成一个显示屏。

假如用4个8*8LED点阵模块拼成16*16的点阵,即能满足一般汉字的显示。

16×16扫描LED点阵的工作原理同8位扫描数码管类似。

它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。

通过时钟的每列扫描显示完整汉字。

2.3、实验设计流程:

任务一系统结构图如图1所示。

图1任务一系统结构图

任务二系统结构图如图2所示。

图2任务二系统结构图

3.管脚分配:

choose[3]

PIN_139

choose[2]

PIN_137

choose[1]

PIN_134

choose[0]

PIN_127

clk_50M

PIN_23

data[15]

PIN_46

data[14]

PIN_44

data[13]

PIN_41

data[12]

PIN_39

data[11]

PIN_35

data[10]

PIN_33

data[9]

PIN_30

data[8]

PIN_15

data[7]

PIN_13

data[6]

PIN_11

data[5]

PIN_10

data[4]

PIN_8

data[3]

PIN_6

data[2]

PIN_5

data[1]

PIN_4

data[0]

PIN_3

l5

PIN_142

rst

PIN_56

sel[2]

PIN_146

sel[1]

PIN_145

sel[0]

PIN_144

4、实验结果:

使用QuartusII软件将实验工程分别下载到实验箱中,能够看到预期的现象:

将任务一的工程下载到实验箱后,可以看到一竖条向右移动,移动速度为1s每列。

将任务二的工程下载到实验箱后,点阵上滚动显示汉字“嵌入式系统设计”,字体移动速度为0.34秒每列。

实验现象表明实验程序符合要求,能够完成实验要求任务。

5实验心得

通过这次实验,我学到了一个有时序功能的器件如何用verilog语言实现其功能。

学会了8*8LED点阵共由64个发光原理,要用8*8LED点阵来显示一个字符或汉字,只需要根据字符或汉字图形中的线条或笔画,通过点亮多个发光二极管来勾勒出字符或汉字的线条或笔画就行了。

如何用点阵拼合成一个显示屏假如用4个8*8LED点阵模块拼成16*16的点阵,即能满足一般汉字的显示。

而16×16扫描LED点阵的工作原理同8位扫描数码管类似。

它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。

通过时钟的每列扫描显示完整汉字。

并通过模块和模块的嵌套或者连接实现相应功能。

通过这次实验,学到了很多东西,同时也认识到了自己只是FPGA道路上的新手,还有很多未知的知识需要学习。

真正学习的历程需要在课下多努力,希望通过这学期的学习自己能熟练掌握一些编程的技术,培养良好的思维模式。

6参考文献

[1]王金明.《数字系统设计与VerilogHDL》第3版、第2版,电子工业出版社,2009、2005.TP271/W24.

[2]夏宇闻.《Verilog数字系统设计教程》,北京航空航天大学出版社,第1、2版,2008.TP312VH/X31.

[3]蒋璇,臧春华.《数字系统设计与PLD应用技术》,电子工业出版社,TP271/J63.

[4]侯伯亨,顾新.《VHDL硬件描述语言与数字逻辑电路设计》(修订版),西安电子科技大学出版社.TP312/H490.

[5](美)John威廉斯著;李林,陈亦欧,郭志勇译.《Verilog数字VLSI设计教程》,电子工业出版社.2010.7.

[6]潘松,黄继业.《EDA技术实用教程》,科学出版社,2006.TN702/P18.

 

附录:

程序清单

任务一:

modulescan(clk_50M,rst,choose,data,sel,l5);

inputclk_50M;

inputrst;

outputreg[3:

0]choose;

outputreg[15:

0]data;

outputwire[2:

0]sel;

outputwirel5;

assignsel=3'b010;

assignl5=1'b0;

//+++++++++++++++++++++++++++++++++++++

//分频模块开始

//+++++++++++++++++++++++++++++++++++++

regscan_clk;

reg[40:

0]count_div;

always@(posedgeclk_50M)

begin

if(count_div==24'd49999999999)

begin

scan_clk<=~scan_clk;

count_div<=24'b000000000000000000000000;

end

else

begin

count_div<=count_div+1;

end

end

//-------------------------------------

//分频模块结束

//------------------------------------

always@(posedgescan_clk,negedgerst)

begin

if(!

rst)

choose<=0;

else

choose<=choose+1'b1;

end

alwaysdata=16'hffff;

endmodule

任务二:

`defineBETA_TIME8'h02

modulescan(clk_50M,rst,choose,data,sel,l5,rom_addr,romdata);

inputclk_50M;

inputrst;

outputreg[3:

0]choose;

outputreg[15:

0]data;

outputwire[2:

0]sel;

outputwirel5;

reg[15:

0]disp_memery[0:

15];

reg[15:

0]rom[0:

128];

assignsel=3'b010;

assignl5=1'b0;

//+++++++++++++++++++++++++++++++++++++

//分频模块开始

//分频得到的时钟用于改变显示内容

//+++++++++++++++++++++++++++++++++++++

regdisp_change_clk;

reg[40:

0]count_div;

//

always@(posedgeclk_50M)

begin

if(count_div==24'd49999999999)

begin

disp_change_clk<=~disp_change_clk;

count_div<=24'b000000000000000000000000;

end

else

begin

count_div<=count_div+1;

end

end

//-------------------------------------

//分频模块结束

//------------------------------------

//+++++++++++++++++++++++++++++++++++++

//分频得到的时钟用于改变屏幕扫描

//+++++++++++++++++++++++++++++++++++++

regdisp_scan_clk;

reg[40:

0]count_div1;

always@(posedgeclk_50M)

begin

if(count_div1==24'd4999)

begin

disp_scan_clk<=~disp_scan_clk;

count_div1<=24'b000000000000000000000000;

end

else

begin

count_div1<=count_div1+1;

end

end

//-------------------------------------

//分频模块结束

//------------------------------------

reg[6:

0]rom_addr;

//wire[15:

0]romdata;

output[6:

0]rom_addr;

output[15:

0]romdata;

always@(posedgeclk_50Mornegedgerst)

begin

if(!

rst)

rom_addr<=7'h0;

else

if(rom_addr==7'b000_1111)

rom_addr<=0;

else

rom_addr<=rom_addr+7'b000_0001;

end

always@(posedgedisp_scan_clkornegedgerst)

begin

if(!

rst)

choose<=4'hf;

else

choose<=choose+1'b1;

end

reg[6:

0]disp_count;

always@(posedgedisp_change_clkornegedgerst)

begin

if(!

rst)

disp_count<=7'h00;

else

disp_count<=disp_count+1'b1;

end

always@(posedgeclk_50M)

begin

disp_memery[rom_addr]<=rom[rom_addr+disp_count];

end

alwaysdata=disp_memery[4'hf-choose];

always@(*)

begin

rom[7'h00]=16'h0000;

rom[7'h01]=16'h0200;

rom[7'h02]=16'h6FFE;

rom[7'h03]=16'h2248;

rom[7'h04]=16'h2248;

rom[7'h05]=16'h2FFE;

rom[7'h06]=16'h2201;

rom[7'h07]=16'hE082;

rom[7'h08]=16'h2104;

rom[7'h09]=16'h2E18;

rom[7'h0a]=16'h22E0;

rom[7'h0b]=16'h2210;

rom[7'h0c]=16'h628C;

rom[7'h0d]=16'h0306;

rom[7'h0e]=16'h0004;

rom[7'h0f]=16'h0000;

rom[7'h10]=16'h0002;

rom[7'h11]=16'h0004;

rom[7'h12]=16'h0008;

rom[7'h13]=16'h0010;

rom[7'h14]=16'h8060;

rom[7'h15]=16'hC180;

rom[7'h16]=16'h6E00;

rom[7'h17]=16'h1800;

rom[7'h18]=16'h0600;

rom[7'h19]=16'h0100;

rom[7'h1a]=16'h00C0;

rom[7'h1b]=16'h0020;

rom[7'h1c]=16'h0018;

rom[7'h1d]=16'h000C;

rom[7'h1e]=16'h0008;

rom[7'h1f]=16'h0000;

rom[7'h20]=16'h0000;

rom[7'h21]=16'h1004;

rom[7'h22]=16'h1106;

rom[7'h23]=16'h110C;

rom[7'h24]=16'h11F8;

rom[7'h25]=16'h1108;

rom[7'h26]=16'h1110;

rom[7'h27]=16'h1010;

rom[7'h28]=16'hFF00;

rom[7'h29]=16'h10E0;

rom[7'h2a]=16'h9018;

rom[7'h2b]=16'h7004;

rom[7'h2c]=16'h5002;

rom[7'h2d]=16'h1001;

rom[7'h2e]=16'h000E;

rom[7'h2f]=16'h0000;

rom[7'h30]=16'h0000;

rom[7'h31]=16'h0002;

rom[7'h32]=16'h4084;

rom[7'h33]=16'h44C8;

rom[7'h34]=16'h4D90;

rom[7'h35]=16'h55A0;

rom[7'h36]=16'h6682;

rom[7'h37]=16'h4681;

rom[7'h38]=16'h44FE;

rom[7'h39]=16'h8880;

rom[7'h3a]=16'hB2A0;

rom[7'h3b]=16'h8190;

rom[7'h3c]=16'h80C8;

rom[7'h3d]=16'h8046;

rom[7'h3e]=16'h0000;

rom[7'h3f]=16'h0000;

rom[7'h40]=16'h0404;

rom[7'h41]=16'h0C44;

rom[7'h42]=16'h34C4;

rom[7'h43]=16'hC548;

rom[7'h44]=16'h0648;

rom[7'h45]=16'h0849;

rom[7'h46]=16'h2102;

rom[7'h47]=16'h230C;

rom[7'h48]=16'h25F0;

rom[7'h49]=16'hB900;

rom[7'h4A]=16'h6100;

rom[7'h4B]=16'h21FC;

rom[7'h4C]=16'h2502;

rom[7'h4D]=16'h2382;

rom[7'h4E]=16'h210E;

rom[7'h4F]=16'h0000;

rom[7'h50]=16'h0200;

rom[7'h51]=16'h8200;

rom[7'h52]=16'h73FE;

rom[7'h53]=16'h2004;

rom[7'h54]=16'h0009;

rom[7'h55]=16'h0101;

rom[7'h56]=16'h0202;

rom[7'h57]=16'h7DC2;

rom[7'h58]=16'h4134;

rom[7'h59]=16'h4108;

rom[7'h5A]=16'h4108;

rom[7'h5B]=16'h7D34;

rom[7'h5C]=16'h03C2;

rom[7'h5D]=16'h0203;

rom[7'h5E]=16'h0202;

rom[7'h5F]=16'h0000;

rom[7'h60]=16'h0400;

rom[7'h61]=16'h8400;

rom[7'h62]=16'h7400;

rom[7'h63]=16'h27FE;

rom[7'h64]=16'h0004;

rom[7'h65]=16'h0008;

rom[7'h66]=16'h0410;

rom[7'h67]=16'h0400;

rom[7'h68]=16'h0400;

rom[7'h69]=16'h0400;

rom[7'h6A]=16'hFFFF;

rom[7'h6B]=16'h0400;

rom[7'h6C]=16'h0400;

rom[7'h6D]=16'h0400;

rom[7'h6E]=16'h0400;

rom[7'h6F]=16'h0000;

rom[7'h70]=16'h0000;

rom[7'h71]=16'h0000;

rom[7'h72]=16'h0000;

rom[7'h73]=16'h0000;

rom[7'h74]=16'h0000;

rom[7'h75]=16'h0000;

rom[7'h76]=16'h0000;

rom[7'h77]=16'h0000;

rom[7'h78]=16'h0000;

rom[7'h79]=16'h0000;

rom[7'h7A]=16'h0000;

rom[7'h7B]=16'h0000;

rom[7'h7C]=16'h0000;

rom[7'h7D]=16'h0000;

rom[7'h7E]=16'h0000;

rom[7'h7F]=16'h0000;

end

Endmodule

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

当前位置:首页 > 自然科学 > 生物学

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

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