FPGA之数码管

module seg7(clk,rst,sel,seg,num);
input clk;
input rst;
output reg[3:0] sel;
output reg[7:0] seg;
output reg[3:0] num;
reg[31:0] counter_5kHz;
reg[31:0] counter_1Hz;
reg[1:0] pos;
always@(posedge clk or negedge rst)
	begin
		if(!rst)
		begin
		seg<=8'b0000_0000;         //复位键按下,初始化
		sel<=4'b1111;
		counter_1Hz<=0;
		counter_5kHz<=0;
		num<=0;
		pos<=0;
	end
	
	else
	begin
		if(counter_1Hz<5000_0000)        //显示数据刷新控制
													//未达到计数值,数据保持且计数器加一
		begin
			counter_1Hz<=counter_1Hz+1;
		end
		else
		begin
			num<=num+1;
			counter_1Hz<=0;
		end
		
		case(num)               //判断数据值,将对应数码管显示编码赋给段选端口
			
			4'b0000:seg<=8'b0011_1111;
			4'b0001:seg<=8'b0000_0110;
			4'b0010:seg<=8'b0101_1011;
			4'b0011:seg<=8'b0100_1111;
			4'b0100:seg<=8'b0110_0110;
			4'b0101:seg<=8'b0110_1101;
			4'b0110:seg<=8'b0111_1101;
			4'b0111:seg<=8'b0000_0111;
			4'b1000:seg<=8'b0111_1111;
			4'b1001:seg<=8'b0110_1111;
			4'b1010:seg<=8'b0111_0111;
			4'b1011:seg<=8'b0111_1100;
			4'b1100:seg<=8'b0011_1001;
			4'b1101:seg<=8'b0101_1110;
			4'b1110:seg<=8'b0111_1001;
			4'b1111:seg<=8'b0111_0001;
			default:seg<=8'b0000_0000;
		endcase
		if(counter_5kHz<1_0000)
		
		begin
			counter_5kHz<=counter_5kHz+1;
		end
		else
		begin
			pos<=pos+1;
			counter_5kHz<=0;
		end
		case(pos)			//判断数码管位选控制信号
			2'b00:sel<=4'b1110;
			2'b01:sel<=4'b1101;
			2'b10:sel<=4'b1011;
			2'b11:sel<=4'b0111;
			default:sel<=8'b1111;
		endcase
	end
end
endmodule
		
		
		
`timescale 1ns/1ps                       //测试代码
module seg7_tb;
	reg clk;										//时钟
	reg rst;										//复位
	wire[3:0] sel;								//位选端口
	wire[7:0] seg;								//段选端口
	wire[3:0] num;                      //数据输出端口
	initial begin
		clk = 0;
		rst = 0;
	#20 rst = 1;
	end
	
	always #10 clk = ~clk;
	seg7 i(
				.clk(clk),
				.rst(rst),
				.sel(sel),
				.seg(seg),
				.num(num)
				);
endmodule

 

仿真结果图:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值