一、实验任务

利用四个数码管显示59秒计时器。

二、代码实现

将开发板的48M晶振分频出1M,然后计数器累加,将计数器结果显示在数码管上。低位逢十进一,第二位逢五进一,依次构成59秒计时器。

部分代码展示:

module cnt59(clk,rst_n,dataout,en);

input clk,rst_n;
output[:] dataout;
output[:] en;//COM使能输出 reg[:] dataout;//各段数据输出
reg[:] en; reg[:] cnt_scan;//扫描频率计数器
reg[:] dataout_buf; wire clk1m;
wire clk1000;
wire clk1; //产生时钟
defparam Gen_ClkDiv3.divdFACTOR=,Gen_ClkDiv3.divdWIDTH=;//分频时钟
div Gen_ClkDiv3(.reset(rst_n),.clkin(clk1000),.clkout(clk1));//端口名称关联 always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin //低电平复位
cnt_scan<=;
end
else
begin
cnt_scan<=cnt_scan+;
end
end always @(cnt_scan)//段码扫描频率
begin
case(cnt_scan[:])
'b00 :
en = 'b1110;
'b01 :
en = 'b1101;
'b10 :
en = 'b1011;
'b11 :
en = 'b0111;
default :
en = 'b1110;
endcase
end reg [:] cnt1;
reg [:] cnt2;
reg [:] cnt3;
reg [:] cnt4; always@(posedge clk1 or negedge rst_n)
begin
if(!rst_n)
begin
cnt1 <= 'b0000;
cnt2 <= 'b0000;
cnt3 <= 'b0000;
cnt4 <= 'b0000;
end
else
begin
cnt1 <= (cnt1<)? cnt1+'b1:4'd0;
cnt2 <= (cnt2<)? (cnt1==)?cnt2+'b1:cnt2 : (cnt1==9)?4'd0:cnt2;
cnt3 <= (cnt3<)? (cnt2== && cnt1==)?cnt3+'b1:cnt3 : (cnt2==5 && cnt1==9)?4'd0:cnt3;
cnt4 <= (cnt4<)? (cnt3== && cnt2== && cnt1==)?cnt4+'b1:cnt4 : (cnt3==9 && cnt2==5 && cnt1==9)?4'd0:cnt4;
end
end always@(en) //对应COM信号给出各段数据,段码
begin
case(en)
'b1110:
dataout_buf<=cnt1;//输入将要显示的数字
'b1101:
dataout_buf<=cnt2;
'b1011:
dataout_buf<=cnt3;
'b0111:
dataout_buf<=cnt4;
default:
dataout_buf<=;
endcase
end always@(dataout_buf)
begin
case(dataout_buf) //将要显示的数字译成段码
'b0000://0
dataout='b0000_0011;
'b0001://1
dataout='b1001_1111;
'b0010://2
dataout='b0010_0101;
'b0011://3
dataout='b0000_1101;
'b0100://4
dataout='b1001_1001;
'b0101://5
dataout='b0100_1001;
'b0110://6
dataout='b0100_0001;
'b0111://7
dataout='b0001_1111;
'b1000://8
dataout='b0000_0001;
'b1001://9
dataout='b0000_1001;
default://这里仅编译了0-9这几个数字
dataout='b1111_1111;//全灭
endcase
end endmodule

三、感悟

相比于其他小程序来说,这篇是一个很简单的应用,包括程序也很简单。但是在编写之时,会有一些细节没有把握住,致使烧写结果出问题。希望自己以后思考问题可以更加全面。比如59秒在进位时,是要有两个判断条件,一位为5一位为9才能进位,而由于自己的粗心大意,编程时只想着为5就进位,结果9秒为5的时候一直在进位。这也为我以后思考问题提了个醒。如何更为全面细致认真的思考。就比如说如果要实现一个功能,要同时满足几个条件。这也是程序员思维缜密之所在。加油。

05-08 14:49