乘16点阵显示实验报告 本文关键词:点阵,实验,报告,显示
乘16点阵显示实验报告 本文简介:实验报告实验名称:[16×16点阵显示实验]姓名:[]学号:[]指导教师:[]实验时间:[]16×16点阵显示实验1实验要求任务1:将所给程序改正使结果为正显示;任务2:使显示四个字、八个字。2实验原理2.1LED显示器结构和原理1>8*8LED点阵的结构图18*8LED点阵结构图从图1中可以看出,
乘16点阵显示实验报告 本文内容:
实
验
报
告
实验名称:
[16×16点阵显示实验]
姓
名:
[]
学
号:
[
]
指导教师:
[]
实验时间:
[
]
16×16点阵显示实验
1
实验要求
任务1:将所给程序改正使结果为正显示;
任务2:
使显示四个字、八个字。
2
实验原理
2.1
LED显示器结构和原理
1>8*8LED点阵的结构
图1
8*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。
图2
8*8LED点阵实物图
图3
8*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.2
LPM_ROM的应用
该模块为逻辑宏模块存储器。其应用过程如下。
1选择模块
2点击ok后,得到
3属性编辑:可以根据实际需要选择数据宽度和内存的容量,默认是8bit,32个字空间。
修改空间和数据属性,Cyclone系列支持最大存储深度4k。
该界面可以选择输出引脚的属性,
需要把hex文件或者mif
其中mif文件或者hex文件可以由多种形式生成。或由多种工具获得,
如
Quartus
的
Text
File编辑器、Matlab
等。
完成设置:
放置该模块:
按照基本操作步骤添加引脚,并进行编译,排除错误。注意总线形式的引脚设置方法。
双击引脚标识,修改对话框中的内容,获得总线连接方式。
3
实验结果
通过对程序及原理图的修改,逐步完成了老师的要求,最后使显示器显示“面朝大海,春暖花开。”
4
实验心得
这次实验比之前更加深入一点,通过这次实验,我了解了16*16点阵的基本工作原理,学习了用Verilog
HDL语言编写点阵扫描的程序。虽然在实验中遇到了一些问题,尤其是四个字变八个字的过程,只因为一个小小的接线问题,始终看不到“春暖花开”。但是自己看着问题一步一步的解决,知识一点一点的积累,确实很有成就感,这又增加了我对FPGA学习的热情。虽然还不能完全读懂本实验上的所有程序,但是能够通过修改部分程序来完成老师要求的任务,也是有意义的。
附录:实验程序清单
module
dianzhen
(clk50mhz,row,sel0,sel1,sel2,sel3,line);
input
clk50mhz;
//实验箱提供50MHz时钟信号
output
sel0,sel1,sel2,sel3;
//设置引脚选通点阵
output
reg
[15:0]
row;
//列
output
reg
[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计数子
assign
sel0=1
b0;
assign
sel1=1
b1;
assign
sel2=1
b0;
assign
sel3=1
b0;
[email protected](posedge
clk50mhz)
begin
if(cnt>=25
d50000000)
begin
cnt=25
d50000000)
begin
cnt1=25
d500)
begin
cnt2=25
d50000000)
begin
cnt<=25
b0;
clk=~clk;
//1s
end
else
cnt<=cnt+1;
end
always
@
(posedge
clk)
//列扫描
begin
case(line)
4
h0:begin
row=16
b1111111111111111;line<=4
h1;end
4
h1:begin
row=16
b1111111111111111;line<=4
h2;end
4
h2:begin
row=16
b1111111111111111;line<=4
h3;end
4
h3:begin
row=16
b1111111111111111;line<=4
h4;end
4
h4:begin
row=16
b1111111111111111;line<=4
h5;end
4
h5:begin
row=16
b1111111111111111;line<=4
h6;end
4
h6:begin
row=16
b1111111111111111;line<=4
h7;end
4
h7:begin
row=16
b1111111111111111;line<=4
h8;end
4
h8:begin
row=16
b1111111111111111;line<=4
h9;end
4
h9:begin
row=16
b1111111111111111;line<=4
ha;end
4
ha:begin
row=16
b1111111111111111;line<=4
hb;end
4
hb:begin
row=16
b1111111111111111;line<=4
hc;end
4
hc:begin
row=16
b1111111111111111;line<=4
hd;end
4
hd:begin
row=16
b1111111111111111;line<=4
he;end
4
he:begin
row=16
b1111111111111111;line<=4
hf;end
4
hf:begin
row=16
b1111111111111111;line<=4
h0;end
default:line<=4
h0;
endcase
end
endmodule