功能:用两个数码管显示0-99的数,每隔一秒加1。
由于数码管的段选段是连在一起的,要想两个数码管显示不一样的值,就必须动态地扫描数码管。因为人眼地时间分辨率是20ms,只要扫描数码管地的周期小于20ms,就可以使用残影让数码管显示数值,给人的感觉就是数码管同时显示了两个数字。
使用到的模块:
1.查找表,将数码管要显示的数值翻译成数码管的段选信号,从低位到告位分别对应着hgfedcba
2.分频模块,每隔1ms扫描一次数码管,所以要一个1kHz的时钟
3.用1kHz的信号去扫描数码管的位选端
4.获取相应数码管的显示值
5.计数模块,产生0-99
顶层模块代码
module test_top(clk_50M,reset,select,seg);
input clk_50M;
input reset;
output [1:0]select;
output[7:0]seg;
reg [7:0]datain;
reg [25:0]cnt;//4999_9999计时1秒
reg [3:0]gewei,shiwei;
//产生datain
always@(posedge clk_50M,negedge reset)
if(!reset)begin
datain<=8'h00;
gewei<=4'h0;
shiwei<=4'h0;
end
else if(cnt==26'd4999_9999) begin
if(shiwei>4'h9 && gewei>4'h9)begin
gewei<=4'h0;
shiwei<=4'h0;
datain<={shiwei,gewei};