数码管静态显示(一)

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
相关推荐
三品吉他手会点灯4 分钟前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
woohuwan15 分钟前
CST 匝数比和采样电阻怎么算?
单片机·嵌入式硬件
王光环3 小时前
STM32H750串口一直进IRQ问题解决
stm32·单片机·嵌入式硬件
2401_854151554 小时前
STM32 选项字节与读写保护(RDP)
stm32·单片机·嵌入式硬件
piaoyiren4 小时前
STC8 单片机蜂鸣器播放音乐
单片机·嵌入式硬件
阿拉斯攀登4 小时前
无人售货柜MQTT客户端工业级配置:心跳、遗嘱、重连、QoS适配实战
嵌入式硬件·mqtt·安卓·零售·无人售货柜·无人售货机
KaifuZeng6 小时前
通信与接口协议面试问题汇总三
单片机·嵌入式硬件·面试·通信与接口协议
嵌入式-老费6 小时前
esp32开发与应用(从esp32到esp32s3)
嵌入式硬件
阿拉斯攀登6 小时前
无人售货柜设备开机自动注册逻辑:唯一标识绑定、防重复、批量铺货适配
嵌入式硬件·安卓·零售·安卓驱动·无人售货柜·无人售货机
芯岭技术郦7 小时前
基于 XL2417D 的场控应援荧光棒芯片特性介绍
单片机·个人开发·信息与通信·射频工程