FPGA数字时钟计数器
好久没有登博客了,周末出去浪了一转!!!
今天给大家讲一下数字时钟计数器,上个月写的。只是简单的数字时钟计数,没有设置闹钟、设置时间和秒表的功能,下次我会发一个带有功能的数字时钟,今天只是简单的数字时钟计数器。
由于我的板子只有4位数码管,因此该数字时钟我将用两位数码管进行分钟显示,两位数码管进行时钟显示,用一个LED灯进行秒钟闪烁。
(1)分频
数字时钟计数器,最重要的是分频系数。数字时钟所要进行的计数有秒钟计数、分钟计数、和时钟计数。
①
我所使用的板子内部时钟是50Mhz,首先要进行秒钟分频,由于要利用LED灯闪烁一次(高电平、低电平交替一次)代表1s,因此秒钟输出Ts=0.5s为一个周期,fs=1/Ts = 2Hz,分频系数为n_s=50Mhz/2hz-1=24999999;
②
接下来是时钟分频,时钟分频由秒钟输出时钟来计算,当秒钟上升沿到30次时,分钟时钟翻转一次,到59次时,再翻转一次,实现分钟计数(分钟时钟高电平、低电平交替一次为1分钟);
③
接下来是时钟分频,时钟分频原理类似于由秒钟时钟分频分钟时钟。
(2)有了秒钟时钟、分钟时钟、小时时钟,可以在各自的always块中设置对应数码管显示的参数,秒钟到分钟数字进制为60进制,分钟到时钟数字进制为60进制,时钟到天的数字进制为24进制,由于个位、十位在数码管上分开显示,我使用个位、十位分别计数(hg,hs,sg,ss)。
(3)然后我们还需要一个数码管动态显示的时钟,分频系数我设置为499,这个时钟大家可以根据人眼暂停原理自己设置满足该定理的分频系数即可。
(4)最后就是我们的动态显示,利用case语句和设置i变量循环实现动态显示。
代码如下:
//
// Company:
// Engineer: Grace
//
// Create Date: 19:59:03 10/17/2018
// Design Name:
// Module Name: D_CLOCK
// Project Name: D_clock
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module D_CLOCK(
input clk, //系统时钟输入
output reg [3:0] wei, //数码管位选
output reg [6:0] data_out, //数码管段选
output reg clk_s