数码管静态显示(一)

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
相关推荐
NEU-UUN32 分钟前
1.2.STM32简介——全程手敲板书
stm32·单片机·嵌入式硬件
三佛科技-1341638421242 分钟前
全自动削皮机方案,果蔬去皮机/削皮机MCU控制方案开发设计
单片机·嵌入式硬件
应用市场1 小时前
基于STM32的多模态智能门锁系统设计与实现
stm32·单片机·嵌入式硬件
xiaohai@Linux1 小时前
STM32在LVGL上实现移植FatFs文件系统(保姆级详细教程)
stm32·单片机·嵌入式硬件·lvgl·fatfs
Jerry丶Li1 小时前
二十二、STM32的ADC(二)(ADC单通道)
stm32·单片机·嵌入式硬件
飞睿科技1 小时前
超越蓝牙与Wi-Fi,UWB技术如何解锁手机下一波创新浪潮?
嵌入式硬件·物联网·智能手机·uwb
点灯小铭1 小时前
基于单片机的交流功率测量仪设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
星辰pid3 小时前
STM32基于OLED的多级菜单(控制步进/无刷电机/舵机,含FLASH存储数据掉电不丢失)
stm32·单片机·嵌入式硬件
飞睿科技4 小时前
乐鑫ESP32-C2小尺寸高性价比,物联网应用的理想无线连接方案
嵌入式硬件·物联网·智能路由器
RFID舜识物联网4 小时前
NFC与RFID防伪标签:构筑产品信任的科技防线
大数据·人工智能·科技·嵌入式硬件·物联网·安全