基于FPGA的数字时钟的设计与实现

基于FPGA的Digital_clock的设计与实现

一、设计要求

1.正常显示功能

四位数码管显示当前时间、日期以及闹钟时间。对于时间(当前时间、闹钟时间)来说,数码管的前两位显示小时,后两位显示分钟。对于日期的年份来说,使用四位数码管进行显示;对于日期的月份和日期来说,数码管的前两位显示月份,后两位显示日期。两位之间的“冒号”点亮,各个数码管的小数点不用点亮。

2.切换功能

复位时,数码管显示当前时间;当外部按下key_switch时,数码管显示年份;再次按下key_switch时,数码管显示月份和日期;再次按下key_switch时,数码管显示闹钟时间;再次按下key_switch时,数码管恢复显示时间。

3.调整功能

当显示时间(当前时间、闹钟时间)时,按下key_adjust,再按下key_add或者key_sub就可以调整分钟;再次按下key_adjust,再按下key_add或者key_sub就可以调整小时;再次按下key_adjust时,即为确定调整。
当显示年份时,按下key_adjust,再按下key_add或者key_sub就可以调整年份;再次按下key_adjust时,即为确定调整。
当显示月份和日期时,按下key_adjust,再按下key_add或者key_sub就可以调整日期;再次按下key_adjust,再按下key_add或者key_sub就可以调整月份;再次按下key_adjust时,即为确定调整。
如果对上述的调整有疑问,可以再次调整。如果在调整期间,按下key_switch,所作调整也会立即生效。

4.调整功能显示

功能进行调整时,所对应调整的部分应该亮0.5秒,灭0.5秒。

5.声音模块

无论按下什么按键,都应该发出“叮”的一声。当闹钟时间和当前时间相同时,应该一直播放音乐《世上只有妈妈好》,直到有按键按下,终止音乐。

6.闹钟

闹钟的小时可以调整到24,用以关闭闹钟。其他时间打开闹钟。闹钟的时间不设置日期,即一旦设置闹钟,每天都会起作用。

7.补充说明

按照每个月30天进行设计,不考虑闰月等情况的影响。

二、硬件分析

  • 主控芯片:FPGA(Artix7)
  • 晶振:50MHz
  • 复位源:低电平有效
  • 按键:切换、调整、加减按键均为低电平有效
  • 蜂鸣器:无源蜂鸣器
  • 数码管:四位一体共阳极数码管,并且公共端采用NPN三极管控制

三、设计架构

1.总体设计

2.分模块设计

2.1Key_ctrl模块的设计与实现

2.2Beep_ctrl模块的设计与实现

2.2.1Beep_music模块的设计与实现

2.3Show_ctrl模块的设计与实现

2.4Digital_clock_ctrl模块的设计与实现

2.4.1 Clock_ctrl模块的实现

四、基本原理

4.1按键

开发板上面有四个按键,当按键按下时,将对应的网络置成低电平;当按键释放时,将对应的网络置成高电平。

按键所用开关为机械弹性开关,当机械触点断开、闭合时不会马上进入稳定状态,瞬间伴随有一连串的抖动。抖动时间一般为 5ms~10ms。我们采用持续采样的方案解决这一问题:当检测到信号持续为低 10ms,认为按键按下;当检测到信号持续为高10ms,认为按键释放。在设计时,需要考虑到外部的按键信号为异步信号,需要进行同步处理。方案为外界信号延迟两拍。

每次按键按下的时间的长短不一,经过消抖后,低电平的持续长度长短也不一样。此长度可能远远大于一个时钟周期的长度。要让每次按下只能进行一次有效切换,需要进行边沿检测:通过检测下降沿(上升沿)的变化,产生一个新的信号——脉冲(一个时钟周期的脉冲) ,利用此脉冲作为翻转的使能即可。

4.2数码管

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

通过分时轮流控制各个数码管的的 COM 端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为 1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口,而且功耗更低。

4.3蜂鸣器

在设计时,首先将简谱中的音符存起来;利用计数器产生 1/4秒为周期的脉冲,在此脉冲驱动下,将事先存好的音符一个个输出;根据音符的值,计算出分频比;根据分频比,产生对应频率的波形。将此波形输出即可。乐谱频率如下所示:

五、设计代码

本设计的所有相关设计文件及代码全部提交至gitee仓库,请访问shihao_Yang获取。

posted @ 2021-12-08 16:51  shihao_Yang  阅读(1428)  评论(0编辑  收藏  举报