数码管自动显示:利用计数器原理,先做一个分频计数器,每隔1s钟,由LED自动加一,再选择数码管显示数字;1s=1_000_000_000ns= 1_000_000_000ns/20ns=50_000_000
程序代码: module hex3(rst_n,clk,seg); input clk;//50M input rst_n; output reg [6:0]seg;//段选(控制数码管显示什么数据) //分频器的代码,这里为了完整,不做多个文件来写模块了 reg[25:0] diviter_cnt; //25000-1 reg [3:0]led; //生成一个分频计数器计数 always@(posedge clk or negedge rst_n) if (!rst_n) diviter_cnt<=15'd0; else if (diviter_cnt==25'd50_000_000) diviter_cnt<=15'd0; else diviter_cnt<=diviter_cnt+1'b1; //位选移位寄存器 always@(posedge clk or negedge rst_n) if (!rst_n) led<=4'b0000; else if(led==4'b1111) led<=4'b0000; else if(diviter_cnt==25'd50_000_000) led<=led+4'b0001; //设计一个6选一多路器 always@(led) begin case (led)// 4'h0:seg=7'b1000000;//这里按数码管码表来 4'h1:seg=7'b1111001; 4'h2:seg=7'b0100100; 4'h3:seg=7'b0110000; 4'h4:seg=7'b0011001; 4'h5:seg=7'b0010010; 4'h6:seg=7'b0000010; 4'h7:seg=7'b1111000; 4'h8:seg=7'b0000000; 4'h9:seg=7'b0010000; 4'ha:seg=7'b0001000; 4'hb:seg=7'b0000011; 4'hc:seg=7'b1000110; 4'hd:seg=7'b0100001; 4'he:seg=7'b0000110; 4'hf:seg=7'b0001110; endcase end endmodule