乘16点阵显示实验报告.doc
《乘16点阵显示实验报告.doc》由会员分享,可在线阅读,更多相关《乘16点阵显示实验报告.doc(11页珍藏版)》请在装配图网上搜索。
实 验 报 告 实验名称: [1616点阵显示实验] 姓 名: [] 学 号: [ ] 指导教师: [] 实验时间: [ ] 1616点阵显示实验 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=1b0; assign sel1=1b1; assign sel2=1b0; assign sel3=1b0; always@(posedge clk50mhz) begin if(cnt>=25d50000000) begin cnt<=25b0; //1Hz计时器 cnt1<=cnt1+1; //16s计时器 end else cnt<=cnt+1; end hangsaomiao u1(.clk50mhz(clk50mhz),.row(row1),.line(line1)); liesaomiao u2(.clk50mhz(clk50mhz),.row(row2),.line(line2)); always@(*) if(cnt1<=5d31) begin row<=row1; //行扫描 line<=line1; end else begin row<=row2; //列扫描 line<=line2; end Endmodule 行扫描 module hangsaomiao(clk50mhz,line,row); input clk50mhz; //实验箱输入50MHz时钟信号 output reg [15:0] row; //列 output reg [3:0] line; //行 reg [24:0] cnt1,cnt2; //计数子 reg clkrow,clkline; //列脉冲、行脉冲 always@(posedge clk50mhz) begin if(cnt1>=25d50000000) begin cnt1<=25b0; clkrow=~clkrow; //1s列脉冲 end else cnt1<=cnt1+1; end always@(posedge clk50mhz) begin if(cnt2>=25d500) begin cnt2<=25b0; clkline=~clkline; //100KHz行脉冲 end else cnt2<=cnt2+1; end always@(posedge clkline) begin case(line) 4d0:line<=4d1; //高速行扫描 4d1:line<=4d2; 4d2:line<=4d3; 4d3:line<=4d4; 4d4:line<=4d5; 4d5:line<=4d6; 4d6:line<=4d7; 4d7:line<=4d8; 4d8:line<=4d9; 4d9:line<=4d10; 4d10:line<=4d11; 4d11:line<=4d12; 4d12:line<=4d13; 4d13:line<=4d14; 4d14:line<=4d15; 4d15:line<=4d0; default:line<=4d0; endcase end always@(posedge clkrow) //时间间隔为1s的列扫描 begin case(row) 16b0000000000000001: row<=16b0000000000000010; 16b0000000000000010: row<=16b0000000000000100; 16b0000000000000100: row<=16b0000000000001000; 16b0000000000001000: row<=16b0000000000010000; 16b0000000000010000: row<=16b0000000000100000; 16b0000000000100000: row<=16b0000000001000000; 16b0000000001000000: row<=16b0000000010000000; 16b0000000010000000: row<=16b0000000100000000; 16b0000000100000000: row<=16b0000001000000000; 16b0000001000000000: row<=16b0000010000000000; 16b0000010000000000: row<=16b0000100000000000; 16b0000100000000000: row<=16b0001000000000000; 16b0001000000000000: row<=16b0010000000000000; 16b0010000000000000: row<=16b0100000000000000; 16b0100000000000000: row<=16b1000000000000000; 16b1000000000000000: row<=16b0000000000000001; default : row<=16b0000000000000001; endcase end endmodule 列扫描 module liesaomiao(clk50mhz,row,line); input clk50mhz; //实验箱输入50MHz时钟信号 output reg [15:0] row; //行 output reg [3:0] line; //列 reg [24:0] cnt; //计数子 reg clk; always@(posedge clk50mhz) begin if(cnt>=25d50000000) begin cnt<=25b0; clk=~clk; //1s end else cnt<=cnt+1; end always @ (posedge clk) //列扫描 begin case(line) 4h0:begin row=16b1111111111111111;line<=4h1;end 4h1:begin row=16b1111111111111111;line<=4h2;end 4h2:begin row=16b1111111111111111;line<=4h3;end 4h3:begin row=16b1111111111111111;line<=4h4;end 4h4:begin row=16b1111111111111111;line<=4h5;end 4h5:begin row=16b1111111111111111;line<=4h6;end 4h6:begin row=16b1111111111111111;line<=4h7;end 4h7:begin row=16b1111111111111111;line<=4h8;end 4h8:begin row=16b1111111111111111;line<=4h9;end 4h9:begin row=16b1111111111111111;line<=4ha;end 4ha:begin row=16b1111111111111111;line<=4hb;end 4hb:begin row=16b1111111111111111;line<=4hc;end 4hc:begin row=16b1111111111111111;line<=4hd;end 4hd:begin row=16b1111111111111111;line<=4he;end 4he:begin row=16b1111111111111111;line<=4hf;end 4hf:begin row=16b1111111111111111;line<=4h0;end default:line<=4h0; endcase end endmodule- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 点阵 显示 实验 报告

链接地址:https://www.zhuangpeitu.com/p-9502732.html