module seg_HC595_diver(sys_clk,sys_rst,seg,sel,stcp_reg,shcp_pose,ds,oe);
input sys_clk,sys_rst;
input wire [7:0] seg;//段选
input wire [5:0] sel;//位选
output stcp_reg,shcp_pose,ds,oe;
reg shcp_pose;//表示寄存器移位驱动时钟
reg stcp_reg;//存储器驱动,表示把移好位数据存到芯片
reg ds;//串行数据(这里6分频传送一个码元,共传输14个)
reg oe;//输出使能低电平,表示芯片输出(这里默认低电平)
reg [2:0] cnt6;
reg [3:0] data_bit;//数据当时所占的数组位置
wire [13:0] data; //暂时保存串行数据
//由于连接芯片问题,导致段数据要倒着输入
assign data={seg[0],seg[1],seg[2],seg[3],seg[4],seg[5],seg[6],seg[7],sel};
//时钟6分频
always@(posedge sys_clk or negedge sys_rst)
begin
if(!sys_rst)
cnt6<=3'd0;
else if(cnt6==3'd5)
cnt6<=3'd0;
else
cnt6<=cnt6+1'b1;
end
//移位寄存器驱动时钟6分频(在4是跳变)
always@(posedge sys_clk or negedge sys_rst)
begin
if(!sys_rst)
shcp_pose<=1'b0;
else if(cnt6==3'd4)
shcp_pose<=1'b1;
else
shcp_pose<=1'b0;
end
//用于移位(一个周期也就是6个计数类,在1时改变值)
always@(posedge sys_clk or negedge sys_rst)
begin
if(!sys_rst)
data_bit<=4'd0;
else if((cnt6==3'd1)&&(data_bit==4'd13))
data_bit<=4'd0;
else if(cnt6==3'd1)
data_bit<=data_bit+1'b1;
else
data_bit<=data_bit;
end
//数据输出,也就是在6个数内,完成一个数据输入
always@(posedge sys_clk or negedge sys_rst)
begin
if(!sys_rst)
ds<=1'b0;
else if(cnt6==3'd2)
ds<=data[data_bit];
FPGA(4)移位寄存器的编写方法(HC595驱动)
最新推荐文章于 2024-07-23 17:20:24 发布
本文介绍了FPGA中移位寄存器的编写方法,特别是通过HC595芯片进行驱动的相关原理。
摘要由CSDN通过智能技术生成