欢迎来到天天文库
浏览记录
ID:46808186
大小:22.94 KB
页数:4页
时间:2019-11-28
《基于FPGA verilog的点阵显示》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、点阵显示LED点阵就是由发光二极管组成的矩阵,我们下面介绍的8*8点阵,即是8行*8列LED构成。下面是共阳8*8点阵的内部结构图:从图中可以看出在横向上,每行LED的阳极连在一块,并引出一个引脚到外面;在竖向上,每列的LED阴极连在一块,并引出一个引脚到外面。所以,要让某行某列的LED亮,就要使该行引出的引脚接高电平,该列引出的引脚接低电平。好了,我们现在说一下驱动方法。由于每行(每列)LED的一个极被连在一块,所以这个驱动方法只能是动态扫描法。从本质上来讲同数码管的动态扫描方法是类似的。结合VHDL程序,我们来解说一下如何让点阵产生隔列的亮竖柱(第一列
2、亮,第二列灭,第三列亮,第四列灭,依次类推)。首先我们定义两个数组:line:outstd_logic_vector(7downto0)--点阵列;row:outstd_logic_vector(7downto0)--点阵行。line(0)对应于第一列的引脚输入,其它成员对应关系依次类推,row(0)对应于第一行的引脚输入,其它成员对应关系依次类推。时刻1:首先我们置line为0XFE,即第一列的引脚置低电平0,其余列的引脚置高电平1,这样,只有第一列上的LED可根据row的值来点亮或者熄灭,其余列上的LED不管row值是什么,都是灭的。与此同时,把row
3、置为0xFF,即全部为高电平1,这样结合“只有第一列上的LED可根据row的值来点亮或者熄灭,其余列上的LED不管row值是什么,都是灭的”的状态,只有第一列上的LED全亮。第一个竖柱点亮了。紧接着,时刻2:置line为0xFF,即所有列上的led都是灭的,不管row上的值是什么值。第二个竖柱是灭的。然后,时刻3:置line为0XFB,即只有第三列的引脚是高电平,其余列的引脚都是低电平,这样,只有第三列上的LED可根据row值来点亮或者熄灭,其余列上的LED不管row值是什么,都是灭的。与此同时,把row置为0xFF,即全部为高电平1,所以只有第三列的le
4、d亮。第三个竖柱是点亮了。这样,依次循环,第一行亮,第二行灭,第三行亮,第四行灭…..当扫描完到第八列,我们控制程序回到第一列重新扫描。只要这个扫描的速度小于人眼的视觉暂留时间,我们就不会感到闪烁,而是以为这些个时刻发生的事情是在一个时刻发生的。这样,隔列点亮竖柱就完成了。//产生横亮条代码如下:moduleled_88(clk,rst,row,col);inputclk,rst;output[7:0]row,col;reg[7:0]col,row;wireclk_1k;reg[2:0]cnt;//1k时钟defparamGen_RxClk.divdFAC
5、TOR=24000,Gen_RxClk.divdWIDTH=14;//分频出1k的时钟gen_divdGen_RxClk(.reset(!rst),.clkin(clk),.clkout(clk_1k));//端口名称关联always@(posedgeclk_1kornegedgerst)beginif(!rst)cnt<=3'b000;elsecnt<=cnt+1'b1;endalways@(cnt)begincase(cnt)3'b000:beginrow=8'b11111110;col=8'hff;end3'b001:beginrow=8'b1111
6、1101;col=8'h00;end3'b010:beginrow=8'b11111011;col=8'hff;end3'b011:beginrow=8'b11110111;col=8'h00;end3'b100:beginrow=8'b11101111;col=8'hff;end3'b101:beginrow=8'b11011101;col=8'h00;end3'b110:beginrow=8'b10111111;col=8'hff;end3'b111:beginrow=8'b01111111;col=8'h00;enddefault:;endcasee
7、ndmodulegen_divd(reset,clkin,clkout);inputreset,clkin;outputclkout;parameterdivdWIDTH=1;parameterdivdFACTOR=1;regclkout;reg[divdWIDTH:0]cnt;always@(posedgeresetorposedgeclkin)if(reset)begincnt<=0;clkout<=0;endelsebegincnt<=cnt+1'b1;if(cnt==(divdFACTOR-1))begincnt<=0;clkout<=~clkou
8、t;endendendmodule
此文档下载收益归作者所有