七段数码管的动态显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
七段数码管的动态显示
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'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;