一、工作原理
8*8点阵内部由8行8列共64个LED灯组成。通过控制其中部分LED灯亮可以组成图形或者数字,和前面使用的数码管类似。点阵也分为共阳极(BS)和共阴极(AS),行控制线接的 LED 阳极的点阵称为共阳极点阵,行控制线接的ID阴极的点阵称为共阴极点阵。
行8个,列8个,所以只需要16个电平信号就可以控制点阵屏,需要点亮【R1,C1】那个灯的话,就需要[R1,R2,R3,R4,R5,R6,R7,R8]=[1,0,0,0,0,0,0,0],[C1,C2,C3,C4,C5,C6,C7,C8]=[0,1,1,1,1,1,1,1]
点阵屏的驱动芯片74HC596:
所以根据原理图,我们确定从数据的低位进行输出。
二、模块划分
三、程序设计
采用IP的方式生成5M的SCK,具体方法参照我之前的文章https://blog.csdn.net/loveyousosad/article/details/139745966?spm=1001.2014.3001.5501
SCK模块:
`timescale 1ns / 1ps
module PLL_clk_5M(
input sys_clk ,
input rst_n ,
output SCK , //74HC595时钟
output locked
);
clk_5M instance_name
(
// Clock out ports
.clk_5M(SCK), // output clk_5M
// Status and control signals
.resetn(rst_n), // input resetn
.locked(locked), // output locked
// Clock in ports
.sys_clk(sys_clk)); // input sys_clk
endmodule
74HC595模块:
`timescale 1ns / 1ps
module HC_595(
input sys_clk ,
input rst_n ,
output SCK , //SCK:点阵屏驱动时钟
output reg RCK , //数据锁存信号
output reg DI //数据
);
wire locked ;
wire en ;
reg [3:0] cnt_bit ;
reg [3:0] cnt ;
reg [15:0] data_reg = 16'b0000_0001_0111_1111 ;
assign en = ( locked & rst_n )? 1:0 ; //locked信号是SCK平稳运行的标志信号
//cnt_bit
always@(posedge SCK )
if(!rst_n)
cnt_bit <= 0 ;
else if ( en == 1 )begin
if( cnt_bit == 15 )
cnt_bit <= 0 ;
else
cnt_bit <= cnt_bit +1 ;
end
else
cnt_bit <= 0 ;
/DI
always@(negedge SCK ) //在时钟下降沿赋值,保证数据准确
if(!rst_n)
DI <= 0 ;
else if( en == 1 )
DI <= data_reg[cnt_bit] ;
else
DI <= 0 ;
/RCK信号在数据传输完成之后拉高3~5个时钟周期
always@(posedge sys_clk)
if(!rst_n)
cnt <= 0 ;
else if ( en == 1 )begin
if ( cnt_bit == 0 )begin
if ( cnt == 9 )
cnt <= 0 ;
else
cnt <= cnt +1 ;
end
else
cnt <= 0;
end
else
cnt <= 0;
always@(posedge sys_clk)
if(!rst_n)
RCK <= 1'b0 ;
else if(en==1)begin
if(cnt_bit == 0 && cnt >=5 && cnt <=7)
RCK <= 1'b1 ;
else
RCK <= 1'b0 ;
end
else
RCK <= 1'b0 ;
PLL_clk_5M PLL_clk_5M_u1(
. sys_clk(sys_clk) ,
. rst_n (rst_n ) ,
.locked(locked) ,
. SCK (SCK )
);
endmodule
管脚绑定:
set_property PACKAGE_PIN U15 [get_ports clk_5M]
set_property PACKAGE_PIN W15 [get_ports DI]
set_property PACKAGE_PIN U17 [get_ports RCK]
set_property PACKAGE_PIN M20 [get_ports req]
set_property PACKAGE_PIN Y18 [get_ports rst_n]
set_property PACKAGE_PIN K17 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk_5M]
set_property IOSTANDARD LVCMOS33 [get_ports RCK]
set_property IOSTANDARD LVCMOS33 [get_ports req]
set_property IOSTANDARD LVCMOS33 [get_ports DI]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
四、仿真结果
五、实验结果