一.实验要求:
在实验板上有八个数码管,实现数码管的动态显示,具体要求为:在计数开始前八位数码管都显示0;开始计数后,在八个数码管上动态显示13579BDF。
二.实验背景知识
1、LED数码管基础知识
在数码管上显示数字就是将相应的段位点亮组成要显示的数字,共阴数码管的码值表如下所示,‘1’代表相应的管脚输出高电平,点亮相应段位;‘0’代表相应的管脚输出低电平,不点亮相应段位。
2、动态数码管原理
如果开发板上使用的是共阴极动态数码管,这种数码管有四个共阴极分别选通对应的每位数码管,四位数码管的八个段码脚连接在一起。其动态显示的原理是:每次选通其中一位,送出这位要显示的内容,然后一段时间后选通下一位送出对应的数据,4个数码管这样依次选通并送出相应的数据,结束后在重复进行。这样只要选通时间选取的合适,由于人眼的视觉暂留,数码管看起来就是连续显示的。
三、实验步骤:
开发板上有 8 个八段数码管,可以方便设计各种数值显示电路。八段数码管本身采用的是共阴极驱动的主要由“位选”和“段选”两块电路驱动。自左向右为DK7-DK0。数码管的位选示意图如下:
段选示意图为:
四.程序(板子使用的是xc7z020clg484-1)
`timescale 1ns / 1ps
module shiyan55(
clk,
reset,
shuma1,
shuma2,
weixuan
);
input clk;
input reset;
output shuma1;
output shuma2;
output weixuan;
reg [7:0] shuma1;
reg [7:0] shuma2;
reg [7:0] weixuan;
reg [25:0] counter;
reg [2:0] select;
always@(posedge clk or negedge reset)
begin
if(!reset)
counter<=0;
else if(counter==3200)
counter<=0;
else
counter<=counter+1;
end
always@(posedge clk or negedge reset)
begin
if(!reset)
select<=3'b000;
else if(counter==3200)
select<=select+1'b1;
else
select<=select;
end
always@(*)
begin
case(select)
3'b000:begin weixuan<=8'b1000_0000;shuma1<=8'b0110_0000; end
3'b001:begin weixuan<=8'b0100_0000;shuma1<=8'b1111_0010; end
3'b010:begin weixuan<=8'b0010_0000;shuma1<=8'b1011_0110; end
3'b011:begin weixuan<=8'b0001_0000;shuma1<=8'b1110_0000; end
3'b100:begin weixuan<=8'b0000_1000;shuma2<=8'b1111_0110; end
3'b101:begin weixuan<=8'b0000_0100;shuma2<=8'b1111_1110; end
3'b110:begin weixuan<=8'b0000_0010;shuma2<=8'b1111_1100; end
3'b111:begin weixuan<=8'b0000_0001;shuma2<=8'b1000_1110; end
default:select<=3'b000;
endcase
end
endmodule
五.i/o封装
后面的封装省略,不会可问。
六.运行结果
点赞加粉哦。