实验二 数码管动态显示
代码
//Name: scan_led.v
//Function: counter 60
// KEY8 50MHz PIN_27 SW8 hgfedcba select
// in clk rst seg8 bit8
//Author: YanceyLu
module scan_led(in,clk,rst,seg8,bit8);
input in,clk,rst;
output [7:0] seg8;
output [7:0] bit8;
reg [7:0] seg8;
reg [7:0] bit8;
reg [15:0] delay_cnt;
reg display_bit;
reg [5:0] cnt;
wire [3:0] data10;
wire [3:0] data1;
reg [7:0] map_data10;
reg [7:0] map_data1;
always @(posedge clk or negedge rst)
begin
if(!rst)
delay_cnt<=0;
else
begin
if(delay_cnt==49999)
delay_cnt<=0;
else
delay_cnt<=delay_cnt+1;
end
end
always @(posedge clk or negedge rst)
begin
if(!rst)
display_bit<=0;
else
begin
if(delay_cnt==49999)
display_bit<=display_bit+1;
else
display_bit<=display_bit;
end
end
always @(display_bit)
begin
case(display_bit)
0: bit8<=8'b11111110;
1: bit8<=8'b11111101;
endcase
end
always @(bit8)
begin
case(bit8)
8'b11111110: seg8<=map_data1;
8'b11111101: seg8<=map_data10;
endcase
end
always @(data10 or data1)
begin
case(data10)
0: map_data10<=8'hc0;//0
1: map_data10<=8'hf9;//1
2: map_data10<=8'ha4;//2
3: map_data10<=8'hb0;//3
4: map_data10<=8'h99;//4
5: map_data10<=8'h92;//5
endcase
case(data1)
0: map_data1<=8'hc0;//0
1: map_data1<=8'hf9;//1
2: map_data1<=8'ha4;//2
3: map_data1<=8'hb0;//3
4: map_data1<=8'h99;//4
5: map_data1<=8'h92;//5
6: map_data1<=8'h82;//6
7: map_data1<=8'hf8;//7
8: map_data1<=8'h80;//8
9: map_data1<=8'h90;//9
endcase
end
assign data10=cnt/10;
assign data1=cnt%10;
always @(negedge in or negedge rst)
begin
if(!rst)
cnt<=0;
else
begin
if(cnt==59)
cnt<=0;
else
cnt<=cnt+1;
end
end
endmodule
效果视频
由于没有对按键做处理,包括与时钟同步和变成单周期脉冲,所有按键计数有时会有些异常。
哈哈,多包涵!