数码管静态显示(一)

1.原理

计数0.5S,一个时钟周期20ns,因此要计数0.5s就是要从0计数到24999_999。

级联两个芯片可以实现16位得串并转换

MR是主复位端口,横线表示低电平有效。通常接到vcc,防止数据得清零。DS输入数据,SHCP输入时钟,在上升沿时刻,将输入的串行数据输入到移位寄存器中。Q7S溢出8位会输入到下一个595芯片中。内部得8位寄存器由STCP控制,是一个时钟,当STCP上升沿会将数据输入到寄存器当中,使能信号OE低电平有效时就将存储得数据输出出去。

实验目标,动态显示000000-FFFFFF的循环静态显示,每个字符的显示时间是0.5s。

2.代码

复制代码
module seg_static#(
	parameter CNT_MAX=25'd24999_999
)
(
	input 	wire			sys_clk			,
	input wire 				sys_rst_n		,
	
	output reg [5:0]		sel				,
	output reg [7:0]		seg				
);

reg[24:0] cnt;
reg [3:0] data;
reg cnt_flag;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		cnt<=25'd0;
	else if(cnt==CNT_MAX)
		cnt<=25'd0;
	else 
		cnt<=cnt+1'b1;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		data<=4'd0;
	else if((cnt_flag==1'b1)&&(data==4'd15))
		data<=4'd0;
	else if(cnt==CNT_MAX)
		data<=data+1'b1;
	else
		data<=data;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		cnt_flag<=1'b0;
	else if(cnt==CNT_MAX-1'b1)
		cnt_flag<=1'b1;
	else 
		cnt_flag<=1'b0;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		sel<=6'b0;
	else 
		sel<=6'b111_111;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		seg<=8'hc0;
	else case(data)
		4'd0:	seg=8'hc0;
		4'd1:	seg=8'hf9;
		4'd2:	seg=8'ha4;
		4'd3:	seg=8'hb0;
		4'd4:	seg=8'h99;
		4'd5:	seg=8'h92;
		4'd6:	seg=8'h82;
		4'd7:	seg=8'hf8;
		4'd8:	seg=8'h80;
		4'd9:	seg=8'h90;
		4'd10:  seg=8'h88;
		4'd11:  seg=8'h83;
		4'd12:  seg=8'hc6;
		4'd13:  seg=8'ha1;
		4'd14:  seg=8'h86;
		4'd15:  seg=8'h8e;
		default:seg=8'hc0;
	endcase
	
endmodule;

seg_595_static.v

复制代码
module seg_595_static
(
	input wire 		sys_clk			,
	input wire 		sys_rst_n		,
	
	output reg 		ds				,
	output reg 		shcp			,
	output reg		stcp			,
	output reg 		oe		
);

wire [5:0]sel;
wire [7:0]seg;

seg_static #(
	.CNT_MAX  (25'd24)
)
seg_static_inst(
	.sys_clk	(sys_clk)		,
	.sys_rst_n	(sys_rst_n)	,
				
	.sel		(sel)		,
	.seg		(seg)		
);

endmodule

tb_seg_595_static.v

复制代码
`timescale 1ns/1ns
module tb_seg_595_static();

reg sys_clk;
reg sys_rst_n;

initial
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		#20
		sys_rst_n<=1'b1;
	end
	
always#10 sys_clk=~sys_clk;

seg_static #(
	.CNT_MAX  (25'd24)
)
seg_static_inst(
	.sys_clk	(sys_clk)		,
	.sys_rst_n	(sys_rst_n)	,
				
	.sel		(sel)		,
	.seg		(seg)		
);


endmodule
相关推荐
风行男孩16 小时前
stm32基础学习——按键的使用
stm32·嵌入式硬件·学习
小热茶17 小时前
浮点数计算专题【五、 IEEE 754 浮点乘法算法详解---基于RISCV的FP32乘法指令在五级流水线的运行分析与SystemC实现】
人工智能·嵌入式硬件·算法·systemc
brave and determined17 小时前
传感器学习(day09):三维手势识别:人机交互的未来革命
嵌入式硬件·手势识别·传感器·tof·嵌入式设计·多角成像技术·光飞时间技术
恒锐丰小吕17 小时前
无锡黑锋 HF5903 40V热插拔、50V耐压、可调限流保护开关技术解析
嵌入式硬件·硬件工程
国科安芯1 天前
AS32S601型MCU芯片电源管理(PMU)模块详解
单片机·嵌入式硬件·性能优化·架构·risc-v
Jack电子实验室1 天前
【杭电HDU】校园网(DeepL/Srun)自动登录教程
python·嵌入式硬件·计算机网络·自动化
QK_001 天前
STM32--中断
stm32·单片机·嵌入式硬件
@good_good_study1 天前
STM32 死区时间
stm32·单片机
SystickInt1 天前
32 低功耗模式(睡眠 停机 待机 )
单片机·嵌入式硬件
brave and determined1 天前
传感器学习(day08):加速度传感器:智能时代的感知利器
嵌入式硬件·传感器·工作原理·加速度传感器·嵌入式设计·三轴·计步算法