数码管动态扫描Verilog

  1. 数码管进阶
  • 动态扫描

module SEG
(
   CLK_50M,RST_N,
   SEG_DATA,SEG_EN
); 
 
input CLK_50M;
input  RST_N;

output reg 	[5:0] SEG_EN;
output reg 	[7:0] SEG_DATA;

reg 			[15:0] time_cnt;
reg 			[15:0] time_cnt_n;

reg 			[2:0] led_cnt;
reg 			[2:0] led_cnt_n;


parameter SET_TIME_10MS=16'd50_000;

always@(posedge CLK_50M or negedge RST_N)
begin
   if(!RST_N)
   	time_cnt<=16'h0;
   else
   	time_cnt<=time_cnt_n;
end

always@(*)
begin
   if(time_cnt==SET_TIME_10MS)
   	time_cnt_n=16'h0;
   else
   	time_cnt_n=time_cnt+16'h1;
end

always@(posedge CLK_50M or negedge RST_N)
begin
   if(!RST_N)
   	led_cnt<=3'h0;
   else
   	led_cnt<=led_cnt_n;
end
always@(*)
begin
   if(time_cnt==SET_TIME_10MS)
   	led_cnt_n=led_cnt+1'h1;
   else
   	led_cnt_n=led_cnt;
end


always@(*)
begin
   case(led_cnt)
   	3'b000:SEG_DATA=8'b00111111;
   	3'b001:SEG_DATA=8'b00000110;
   	3'b010:SEG_DATA=8'b01011011;
   	3'b011:SEG_DATA=8'b01001111;
   	3'b100:SEG_DATA=8'b01100110;
   	3'b101:SEG_DATA=8'b01101101;
   	default:SEG_DATA=8'b00111111;
   endcase
   	
end

always@(*)
begin
   case(led_cnt)
   	3'b000:SEG_EN=6'b111110;
   	3'b001:SEG_EN=6'b111101;
   	3'b010:SEG_EN=6'b111011;
   	3'b011:SEG_EN=6'b110111;
   	3'b100:SEG_EN=6'b101111;
   	3'b101:SEG_EN=6'b011111;
   	default:SEG_EN=6'b111111;
   endcase
end

endmodule


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值