16乘16点阵显示实验报告.docx

上传人:b****2 文档编号:966270 上传时间:2023-04-30 格式:DOCX 页数:15 大小:318.35KB
下载 相关 举报
16乘16点阵显示实验报告.docx_第1页
第1页 / 共15页
16乘16点阵显示实验报告.docx_第2页
第2页 / 共15页
16乘16点阵显示实验报告.docx_第3页
第3页 / 共15页
16乘16点阵显示实验报告.docx_第4页
第4页 / 共15页
16乘16点阵显示实验报告.docx_第5页
第5页 / 共15页
16乘16点阵显示实验报告.docx_第6页
第6页 / 共15页
16乘16点阵显示实验报告.docx_第7页
第7页 / 共15页
16乘16点阵显示实验报告.docx_第8页
第8页 / 共15页
16乘16点阵显示实验报告.docx_第9页
第9页 / 共15页
16乘16点阵显示实验报告.docx_第10页
第10页 / 共15页
16乘16点阵显示实验报告.docx_第11页
第11页 / 共15页
16乘16点阵显示实验报告.docx_第12页
第12页 / 共15页
16乘16点阵显示实验报告.docx_第13页
第13页 / 共15页
16乘16点阵显示实验报告.docx_第14页
第14页 / 共15页
16乘16点阵显示实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

16乘16点阵显示实验报告.docx

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

16乘16点阵显示实验报告.docx

16乘16点阵显示实验报告

实验报告

实验名称:

[16×16点阵显示实验]

姓名:

[]

学号:

[]

指导教师:

[]

实验时间:

[]

 

16×16点阵显示实验

1实验要求

任务1:

将所给程序改正使结果为正显示;

任务2:

使显示四个字、八个字。

2实验原理

2.1LED显示器结构和原理

1>8*8LED点阵的结构

图18*8LED点阵结构图

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

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

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

但要显示信息量大的图形,则需要n个多个8*8LED点阵,拼装成一个大屏幕才行。

LED点阵显示器最大的特点是亮度高、功耗较低、寿命长、容易控制等,因此它的应用很广,常用在广场、车站、商业广告等室外的显示。

2>8*8LED点阵的封装和引脚规律

64个发光二极管按照行共阳、列共阴4个一组的方式封装成一个模块,这样8*8LED点阵模块就有8行、8列共16个引脚。

其实物图如图2,电路模块符号图如图3。

图28*8LED点阵实物图图38*8LED点阵符号图

但8*8LED点阵的16个引脚并不是很有规律,千万不要想象成1~8个引脚是行,9~16个引脚是列。

而且不同产品的点阵外部引脚排列规律还可能不一样。

以下是NLB1388SRA和LDM1388SRA两个型号点阵引脚对应行、列的关系表:

行号

H0

H1

H2

H3

H4

H5

H6

H7

引脚号

9

14

8

12

1

7

2

5

列号

L0

L1

L2

L3

L4

L5

L6

L7

引脚号

13

3

4

10

6

11

15

16

假如你买到一块新的8*8LED点阵,又没有关于它的相关资料,那你只有自己用万用表或通过VCC电源串接一个510欧姆的电阻来检测了。

2.2LPM_ROM的应用

该模块为逻辑宏模块存储器。

其应用过程如下。

1选择模块

2点击ok后,得到

3属性编辑:

可以根据实际需要选择数据宽度和内存的容量,默认是8bit,32个字空间。

修改空间和数据属性,Cyclone系列支持最大存储深度4k。

该界面可以选择输出引脚的属性,

需要把hex文件或者mif

其中mif文件或者hex文件可以由多种形式生成。

或由多种工具获得,如Quartus的TextFile编辑器、Matlab等。

完成设置:

放置该模块:

按照基本操作步骤添加引脚,并进行编译,排除错误。

注意总线形式的引脚设置方法。

双击引脚标识,修改对话框中的内容,获得总线连接方式。

3实验结果

通过对程序及原理图的修改,逐步完成了老师的要求,最后使显示器显示“面朝大海,春暖花开。

4实验心得

这次实验比之前更加深入一点,通过这次实验,我了解了16*16点阵的基本工作原理,学习了用VerilogHDL语言编写点阵扫描的程序。

虽然在实验中遇到了一些问题,尤其是四个字变八个字的过程,只因为一个小小的接线问题,始终看不到“春暖花开”。

但是自己看着问题一步一步的解决,知识一点一点的积累,确实很有成就感,这又增加了我对FPGA学习的热情。

虽然还不能完全读懂本实验上的所有程序,但是能够通过修改部分程序来完成老师要求的任务,也是有意义的。

附录:

实验程序清单

moduledianzhen(clk50mhz,row,sel0,sel1,sel2,sel3,line);

inputclk50mhz;//实验箱提供50MHz时钟信号

outputsel0,sel1,sel2,sel3;//设置引脚选通点阵

outputreg[15:

0]row;//列

outputreg[3:

0]line;//行

wire[15:

0]row1,row2;

wire[3:

0]line1,line2;

reg[24:

0]cnt=0;//1Hz计数子

reg[5:

0]cnt1=0;//16s计数子

assignsel0=1'b0;

assignsel1=1'b1;

assignsel2=1'b0;

assignsel3=1'b0;

always@(posedgeclk50mhz)

begin

if(cnt>=25'd50000000)

begin

cnt<=25'b0;//1Hz计时器

cnt1<=cnt1+1;//16s计时器

end

else

cnt<=cnt+1;

end

hangsaomiaou1(.clk50mhz(clk50mhz),.row(row1),.line(line1));

liesaomiaou2(.clk50mhz(clk50mhz),.row(row2),.line(line2));

always@(*)

if(cnt1<=5'd31)

begin

row<=row1;//行扫描

line<=line1;

end

else

begin

row<=row2;//列扫描

line<=line2;

end

Endmodule

行扫描

modulehangsaomiao(clk50mhz,line,row);

inputclk50mhz;//实验箱输入50MHz时钟信号

outputreg[15:

0]row;//列

outputreg[3:

0]line;//行

reg[24:

0]cnt1,cnt2;//计数子

regclkrow,clkline;//列脉冲、行脉冲

always@(posedgeclk50mhz)

begin

if(cnt1>=25'd50000000)

begin

cnt1<=25'b0;

clkrow=~clkrow;//1s列脉冲

end

else

cnt1<=cnt1+1;

end

always@(posedgeclk50mhz)

begin

if(cnt2>=25'd500)

begin

cnt2<=25'b0;

clkline=~clkline;//100KHz行脉冲

end

else

cnt2<=cnt2+1;

end

always@(posedgeclkline)

begin

case(line)

4'd0:

line<=4'd1;//高速行扫描

4'd1:

line<=4'd2;

4'd2:

line<=4'd3;

4'd3:

line<=4'd4;

4'd4:

line<=4'd5;

4'd5:

line<=4'd6;

4'd6:

line<=4'd7;

4'd7:

line<=4'd8;

4'd8:

line<=4'd9;

4'd9:

line<=4'd10;

4'd10:

line<=4'd11;

4'd11:

line<=4'd12;

4'd12:

line<=4'd13;

4'd13:

line<=4'd14;

4'd14:

line<=4'd15;

4'd15:

line<=4'd0;

default:

line<=4'd0;

endcase

end

always@(posedgeclkrow)//时间间隔为1s的列扫描

begin

case(row)

16'b0000000000000001:

row<=16'b0000000000000010;

16'b0000000000000010:

row<=16'b0000000000000100;

16'b0000000000000100:

row<=16'b0000000000001000;

16'b0000000000001000:

row<=16'b0000000000010000;

16'b0000000000010000:

row<=16'b0000000000100000;

16'b0000000000100000:

row<=16'b0000000001000000;

16'b0000000001000000:

row<=16'b0000000010000000;

16'b0000000010000000:

row<=16'b0000000100000000;

16'b0000000100000000:

row<=16'b0000001000000000;

default:

row<=16'b0000000000000001;

endcase

end

endmodule

列扫描

moduleliesaomiao(clk50mhz,row,line);

inputclk50mhz;//实验箱输入50MHz时钟信号

outputreg[15:

0]row;//行

outputreg[3:

0]line;//列

reg[24:

0]cnt;//计数子

regclk;

always@(posedgeclk50mhz)

begin

if(cnt>=25'd50000000)

begin

cnt<=25'b0;

clk=~clk;//1s

end

else

cnt<=cnt+1;

end

always@(posedgeclk)//列扫描

begin

case(line)

default:

line<=4'h0;

endcase

end

endmodule

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2