当前位置:文档之家› 七段数码管的动态显示

七段数码管的动态显示

1、实验内容:数码管的动态显示
利用实验板上的某四位数码管依次显示 16 进制的0000~FFFF。

为实现功能重用的目的,我们仍然将系统划分为几个部分:
(1)时钟分频模块:将开发板上的 50MHz 高速时钟进行分频产生一个5Hz 的时钟用于计数。
(2)计数模块:实现从 0000~FFFF 的计数功能。用4位十六进制数来实现,其中 15‐12 位表示十六进制数的最高位,11‐8 位表示次高位,7‐4 位表示次低位,3‐0位表示最低位
(3)数码管动态显示模块:将计数模块的输出作为显示字符的输入值,分时送出相应段码,实现数码管的动态显示效果。

2、参考程序:

module SegDynamicDisp(CLK,rst_n,SEG0,SEG1,SEG2,SEG3);//数码管动态显示模块?
input CLK;
input rst_n;
output [7:0]SEG0;//定义输出数码管0的段码带
output [7:0]SEG1;//定义输出数码管1的段码带
output [7:0]SEG2;//定义输出数码管2的段码带
output [7:0]SEG3;//定义输出数码管3的段码带

//..............................................................

reg [7:0]SEG0;//定义输出数码管0的段码带
reg [7:0]SEG1;//定义输出数码管1的段码带
reg [7:0]SEG2;//定义输出数码管2的段码带
reg [7:0]SEG3;//定义输出数码管3的段码带

//..................................................................

parameter seg0=8'hC0,
seg1=8'hF9,
seg2=8'hA4,
seg3=8'hB0,
seg4=8'h99,
seg5=8'h92,
seg6=8'h82,
seg7=8'hF8,
seg8=8'h80,
seg9=8'h90,
sega=8'h88,
segb=8'h83,
segc=8'hC6,
segd=8'hA1,
sege=8'h86,
segf=8'h8E;
//....................................................................

reg[23:0] cnt;//定义计数寄存器,用来实现定时的功能
reg [15:0]counter;//定义计数寄存器,用于实现显示的数值
always @(posedge CLK or negedge rst_n)//计数过程,记录当前显示的位选序号
if(!rst_n)
begin
cnt<=24'D0;//复位时cnt初始化为0
counter<=2'b00;//复位时counter初始化为0
end
else
begin
cnt<=cnt+1'b1;//实现计数的功能
if(cnt==24'D1*******)
begin
cnt<=0;//当达到计数值以后回复初始值
counter<=counter+1;//当达到计时时间以后显示的数值也相应的+1
end
end

//....................................................
always @(posedge CLK or negedge rst_n)
if(!rst_n)
begin
SEG0<=0;
SEG1<=0;
SEG2<=0;
SEG3<=0;
end
else
always @(counter)
begin
case(counter[3:0])
4'h0: sm_dbr <= seg0;
4'h1: sm_dbr <= seg1;
4'h2: sm_dbr <= seg2;
4'h3: sm_dbr <= seg3;
4'h4: sm_dbr <= seg4;
4'h5: sm_dbr <= seg5;
4'h6: sm_dbr <= seg6;
4'h7: sm_dbr <= seg7;
4'h8: sm_dbr <= seg8;

4'h9: sm_dbr <= seg9;
4'ha: sm_dbr <= sega;
4'hb: sm_dbr <= segb;
4'hc: sm_dbr <= segc;
4'hd: sm_dbr <= segd;
4'he: sm_dbr <= sege;
4'hf: sm_dbr <= segf;
default: ;
endcase
case(counter[7:4])
4'h0: sm_dbr <= seg0;
4'h1: sm_dbr <= seg1;
4'h2: sm_dbr <= seg2;
4'h3: sm_dbr <= seg3;
4'h4: sm_dbr <= seg4;
4'h5: sm_dbr <= seg5;
4'h6: sm_dbr <= seg6;
4'h7: sm_dbr <= seg7;
4'h8: sm_dbr <= seg8;
4'h9: sm_dbr <= seg9;
4'ha: sm_dbr <= sega;
4'hb: sm_dbr <= segb;
4'hc: sm_dbr <= segc;
4'hd: sm_dbr <= segd;
4'he: sm_dbr <= sege;
4'hf: sm_dbr <= segf;
default: ;
endcase
case(counter[11:8])
4'h0: sm_dbr <= seg0;
4'h1: sm_dbr <= seg1;
4'h2: sm_dbr <= seg2;
4'h3: sm_dbr <= seg3;
4'h4: sm_dbr <= seg4;
4'h5: sm_dbr <= seg5;
4'h6: sm_dbr <= seg6;
4'h7: sm_dbr <= seg7;
4'h8: sm_dbr <= seg8;
4'h9: sm_dbr <= seg9;
4'ha: sm_dbr <= sega;
4'hb: sm_dbr <= segb;
4'hc: sm_dbr <= segc;
4'hd: sm_dbr <= segd;
4'he: sm_dbr <= sege;
4'hf: sm_dbr <= segf;
default: ;
endcase
case(counter[15:12])
4'h0: sm_dbr <= seg0;
4'h1: sm_dbr <= seg1;
4'h2: sm_dbr <= seg2;
4'h3: sm_dbr <= seg3;
4'h4: sm_dbr <= seg4;
4'h5: sm_dbr <= seg5;
4'h6: sm_dbr <= seg6;
4'h7: sm_dbr <= seg7;
4'h8: sm_dbr <= seg8;
4'h9: sm_dbr <= seg9;
4'ha: sm_dbr <= sega;
4'hb: sm_dbr <= segb;
4'hc: sm_dbr <= segc;
4'hd: sm_dbr <= segd;
4'he: sm_dbr <= sege;
4'hf: sm_dbr <= segf;
default: ;
endcase

end

endmodule

3、接口:

clk--PIN_N2
rst_n--PIN_N25

SEG0[0]--PIN_AF10
SEG0[1]--PIN_AB12
SEG0[2]--PIN_AC12
SEG0[3]--PIN_AD11
SEG0[4]--PIN_AE11
SEG0[5]--PIN_V14
SEG0[6]--PIN_V13

SEG1[0]--PIN_V20
SEG1[1]--PIN_V21
SEG1[2]--PIN_W21
SEG1[3]--PIN_Y22
SEG1[4]--PIN_AA24
SEG1[5]--PIN_AA23
SEG1[6]--PIN_AB24

SEG2[0]--PIN_AB23
SEG2[1]--PIN_V22
SEG2[2]--PIN_AC25
SEG2[3]--PIN_AC26
SEG2[4]--PIN_AB26
SEG2[5]--PIN_AB25
SEG2[6]--PIN_Y24

SEG3[0]--PIN_Y23
SEG3[1]--PIN_AA25
SEG3[2]--PIN_AA26
SEG3[3]--PIN_Y26
SEG3[4]--PIN_Y25
SEG3[5]--PIN_U22
SEG3[6]--PIN_W24

4、上机程序

module SegDynamicDisp(CLK,rst_n,SEG0,SEG1,SEG2,SEG3);
input CLK;
input rst_n;
output [6:0]SEG0;
output [6:0]SEG1;
output [6:0]SEG2;
output [6:0]SEG3;

reg [6:0]SEG0;
reg [6:0]SEG1;
reg [6:0]SEG2;
reg [6:0]SEG3;
//........以上是定义的一些输入输出接口..........................
parameter seg0=7'hC0,
seg1=7'hF9,
seg2=7'hA4,
seg3=7'hB0,
seg4=7'h99,
seg5=7'h92,
seg6=

7'h82,
seg7=7'hF8,
seg8=7'h80,
seg9=7'h90,
sega=7'h88,
segb=7'h83,
segc=7'hC6,
segd=7'hA1,
sege=7'h86,
segf=7'h8E;
//..............以上是定义的参数,用来标记段代码...................
reg[23:0] cnt;
reg [15:0]counter;

always @(posedge CLK or negedge rst_n)
if(!rst_n)
begin
cnt<=24'D0;
counter<=2'b00;

end
else
begin
cnt<=cnt+1'b1;
if(cnt==24'D1*******)
begin
cnt<=0;
counter<=counter+1;
end
end

//..........用来实现计数功能和控制数字递增的速度....................
always @(counter)
begin
case(counter[3:0])
4'h0: SEG0 <= seg0;
4'h1: SEG0 <= seg1;
4'h2: SEG0 <= seg2;
4'h3: SEG0 <= seg3;
4'h4: SEG0 <= seg4;
4'h5: SEG0 <= seg5;
4'h6: SEG0 <= seg6;
4'h7: SEG0 <= seg7;
4'h8: SEG0 <= seg8;
4'h9: SEG0 <= seg9;
4'ha: SEG0 <= sega;
4'hb: SEG0 <= segb;
4'hc: SEG0 <= segc;
4'hd: SEG0 <= segd;
4'he: SEG0 <= sege;
4'hf: SEG0 <= segf;
default: ;
endcase
case(counter[7:4])
4'h0: SEG1 <= seg0;
4'h1: SEG1 <= seg1;
4'h2: SEG1 <= seg2;
4'h3: SEG1 <= seg3;
4'h4: SEG1 <= seg4;
4'h5: SEG1 <= seg5;
4'h6: SEG1 <= seg6;
4'h7: SEG1 <= seg7;
4'h8: SEG1 <= seg8;
4'h9: SEG1 <= seg9;
4'ha: SEG1 <= sega;
4'hb: SEG1 <= segb;
4'hc: SEG1 <= segc;
4'hd: SEG1 <= segd;
4'he: SEG1 <= sege;
4'hf: SEG1 <= segf;
default: ;
endcase
case(counter[11:8])
4'h0: SEG2 <= seg0;
4'h1: SEG2 <= seg1;
4'h2: SEG2 <= seg2;
4'h3: SEG2 <= seg3;
4'h4: SEG2 <= seg4;
4'h5: SEG2 <= seg5;
4'h6: SEG2 <= seg6;
4'h7: SEG2 <= seg7;
4'h8: SEG2 <= seg8;
4'h9: SEG2 <= seg9;
4'ha: SEG2 <= sega;
4'hb: SEG2 <= segb;
4'hc: SEG2 <= segc;
4'hd: SEG2 <= segd;
4'he: SEG2 <= sege;
4'hf: SEG2 <= segf;
default: ;
endcase
case(counter[15:12])
4'h0: SEG3 <= seg0;
4'h1: SEG3 <= seg1;
4'h2: SEG3 <= seg2;
4'h3: SEG3 <= seg3;
4'h4: SEG3 <= seg4;
4'h5: SEG3 <= seg5;
4'h6: SEG3 <= seg6;
4'h7: SEG3 <= seg7;
4'h8: SEG3 <= seg8;
4'h9: SEG3 <= seg9;
4'ha: SEG3 <= sega;
4'hb: SEG3 <= segb;
4'hc: SEG3 <= segc;
4'hd: SEG3 <= segd;
4'he: SEG3 <= sege;
4'hf: SEG3 <= segf;
default: ;
endcase
end
//...................用来实现显示功能.....................
endmodule

5、实验结果

复位按键为0时:HEX3

HEX2 HEX1 HEX0 显示的为0000;
复位按键为1时:HEX3 HEX2 HEX1 HEX0 显示的依次为:0000——FFFF





相关主题
文本预览
相关文档 最新文档