数码管动态显示

演示视频,下载下来观看 download:https://cdn.jsdmirror.com/gh/zikwq/Blog_Pic/e8e08759159b97eaaae26cac1a17c68e.mp4

```verilog seg.v module top( clk, //系统输入时钟

            rst_n,//系统复位

            segdata,//数码管段选
            segcs//数码管位选
         );

input clk; input rst_n;

output reg [7:0]segdata; output reg [2:0]segcs;

reg[31:0] count; reg[24:0]count1ms;

reg[2:0]number;

reg[19:0]tenvalue; reg clk1ms;

parameter sample=2'b00, display=2'b01;

//-----------数码管驱动时钟----------- always@(posedge clk) begin if(count1ms>25'd1000_0) begin clk1ms<=~clk1ms; count1ms<=0; end else count1ms<=count1ms+1; end

//-----------从0开始显示数字----------- always@(posedge clk1ms or negedge rst_n) if(!rst_n) tenvalue <= 20'd0; else if(tenvalue == 20'd999999) tenvalue <= 20'd0; else tenvalue <= tenvalue + 1'd1;

//-----------数码管译码----------- function[7:0] leddata; input[3:0] datain; begin case(datain) 4'd0: leddata=8'b11000000;//0 4'd1: leddata=8'b11111001;//1 4'd2: leddata=8'b10100100;//2 4'd3: leddata=8'b10110000;//3 4'd4: leddata=8'b10011001;//4 4'd5: leddata=8'b10010010;//5 4'd6: leddata=8'b10000010;//6 4'd7: leddata=8'b11111000;//7 4'd8: leddata=8'b10000000;//8 4'd9: leddata=8'b10010000;//9 4'd10: leddata=8'b10111111;//- 4'd11: leddata=8'b01111111;//. default:leddata=8'bzzzz_zzzz; endcase end endfunction

//-----------数码管扫描----------- always@(posedge clk1ms) begin if(number==3'd6) number<=0; else begin number<=number+1; case(number) 4'd0: begin segdata<=leddata((tenvalue/10)%10);//个位
segcs<=3'b101; end 4'd1: begin segdata<=leddata((tenvalue/100)%10);//十位
segcs<=3'b100; end 4'd2: begin segdata<=leddata((tenvalue/1000)%10); //百位
segcs<=3'b011; end 4'd3: begin segdata<=leddata((tenvalue/10000)%10);//千位
segcs<=3'b010; end 4'd4: begin segdata<=leddata((tenvalue/100000)%10);//万位
segcs<=3'b001; end 4'd5: begin segdata<=leddata((tenvalue/1000000)%10);//十万位
segcs<=3'b000; end endcase end end

endmodule

```