FPGA动态数码管显示固定的数字

FPGA动态数码管显示固定的数字

FPGA Cyclone IV E : EP4CE10F17C8
系统时钟:50MHz(20ns)

计时模块

数码管位选刷新计时

module time_count(
	input clk,
	input rst,
	output reg flag
);
parameter MAX_NUM=23'd2500_000;//计数50ms
reg [22:0] cnt;

always @(posedge clk or negedge rst)begin//每50ms,flag置1
	if(!rst)begin
		cnt<=0;
		flag<=0;
	end
	else if(cnt<MAX_NUM-1)begin
			cnt<=cnt+1'b1;
			flag<=0;
	end
	else begin
		cnt<=0;
		flag<=1;
	end
end
endmodule

数码管显示模块

数码管显示固定数字

module dynamic_smg(
	input clk,
	input rst,
	input flag,
	output reg [5:0] wei,   //位选
	output reg [7:0] duan   //段选
);
reg [7:0] num [0:5];
reg [2:0] i;

always @(posedge clk or negedge rst)begin
	if(!rst)begin//固定数字
		num[0]<=8'b1100_0000;//0
		num[1]<=8'b1111_1001;//1
		num[2]<=8'b1010_0100;//2
		num[3]<=8'b1011_0000;//3
		num[4]<=8'b1001_1001;//4
		num[5]<=8'b1001_0000;//9
		duan<=0;
		wei<=6'b011111;//关位选
		i<=0;
	end
	else if(flag==1)//位选移位,刷新显示
		if(i>=3'd0 && i<3'd6)begin
			wei<={wei[4:0],wei[5]};
			duan<=num[i];
			i<=i+1;
		end
		else
			i<=0;
end
endmodule

顶层模块

module top_dynamic_smg(
	input clk,
	input rst,
	output [5:0] wei,   //位选
	output [7:0] duan   //段选
);
parameter TIME_SHOW=23'd50_000;
wire flag;

time_count #(.MAX_NUM(TIME_SHOW)) u_time_count(
	.clk(clk),
	.rst(rst),
	.flag(flag)
);
dynamic_smg u_dynamic_smg(
	.clk(clk),
	.rst(rst),
	.flag(flag),
	.duan(duan),
	.wei(wei)
);
endmodule
  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值