数码管静态显示(一)

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
相关推荐
scan13 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu013 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
深圳市青牛科技实业有限公司5 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比6 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie6 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
西瓜籽@7 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^138287988729 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张10 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_7393128713 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章13 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频