* 7段数码管测试实验1:以动态扫描方式在4位数码管,显示32计数器的高16位值 hex码 实验的目的是向用户介绍多个数码管动态显示的方法。 动态显示的方法是,按一定的频率轮流向各个数码管的COM端送出低电平,同时送出对应的数据给各段。 -- segment encoding -- 0 -- --- -- 5 | | 1 -- --- <- 6 -- 4 | | 2 -- --- -- 3 COM is GND */
module seg71(clk,dataout,en);
input clk; output[7:0] dataout; output[3:0] en;//COM使能输出 reg[7:0] dataout;//各段数据输出 reg[3:0] en;
reg[31:0] cnt_scan=0;//扫描频率计数器 10M/2^32=0.02Hz 429.5S reg[4:0] dataout_buf;
always@(posedge clk ) begin cnt_scan<=cnt_scan+1; end
//频率 10M/65535 = 152 Hz always @(cnt_scan) begin case(cnt_scan[15:14]) 3'b00 : en = 4'b1110; dataout_buf=cnt_scan[31:28]; 3'b01 : en = 4'b1101; dataout_buf=cnt_scan[27:24]; 3'b10 : en = 4'b1011; dataout_buf=cnt_scan[23:20]; 3'b11 : en = 4'b0111; dataout_buf=cnt_scan[19:16]; default : en = 4'b1111; dataout_buf=0; endcase end
always@(dataout_buf) begin case(dataout_buf) 4'b0000: dataout=8'b0000_0011; 4'b0001: dataout=8'b1001_1111; 4'b0010: dataout=8'b0010_0101; 4'b0011: dataout=8'b0000_1101; 4'b0100: dataout=8'b1001_1001; 4'b0101: dataout=8'b0100_1001; 4'b0110: dataout=8'b0100_0001; 4'b0111: dataout=8'b0001_1111; 4'b1000: dataout=8'b0000_0001; 4'b1001: dataout=8'b0001_1001; 4'b1010: dataout=8'b0001_0001; 4'b1011: dataout=8'b1100_0001; 4'b1100: dataout=8'b0110_0011; 4'b1101: dataout=8'b1000_0101; 4'b1110: dataout=8'b0110_0001; 4'b1111: dataout=8'b0111_0001; endcase end
endmodule |