基于FPGA的多功能数字钟设计
- 前言
- 基础知识
- 按键
- 数码管
- 系统概述
- 按键使用说明
- 模块描述
- 模块设计
- button_debounce
- button_controller
- clock_controller
- digital_tube
- 整体资源用量
- 测试视频
前言
本工程主要是数码管、按键、LED的应用开发。
注:本工程所有IP均使用源码开发。
基础知识
按键
按键作为基本的人机输入接口,在很多电子设计中都能见到。由于机械特性,在按键按下或松开的时候,按键输入值是有抖动的,无论按下去是多平稳,都难以消除抖动。
本设计通过 FPGA 计时来消抖。当按键输入有变化时,计时器清零,否则就累加,直到加到一个预定值(例如10ms),就认为按键稳定,输出按键值,这样就得到一个没有抖动的按键值。
由于在很多地方需要用到按键下降沿或上升沿的检测,所以按键模块也集成了上升沿和下降沿检测的功能。
数码管
分为共阳极数码管和共阴极数码管。
- 共阳极数码管:将8个LED的正极连接在一起接入高电平,将需要点亮的LED的引脚给低电平即可
- 共阴极数码管:将8个LED的负极连接在一起接入低电平,将需要点亮的LED的引脚给高电平即可
通过给 a,b,c,d,e,f,g,dp 各个脚加上不同的控制电压可以使不同的 LED 灯导通、发光,从而显示 0~9 各个数字和 A,B,C,D,E,F 各个字母,因此数码管可以用来显示二进制数、十进制数、十六进制数,如下图所示:
系统概述
系统框图如下图所示:
系统在 Xilinx XC7A35T-2FGG484I FPGA 上开发,使用共阳极数码管进行显示。多功能数字钟功能如下:
- 时钟功能
- 显示时、分、秒,默认12:00:00
- 可通过按键更改时间
- 整点报时:整点报时音为缓慢的 “滴滴滴” 音,响声延续5s
- 闹钟功能
- 可设定闹钟的时、分、秒
- 闹钟提醒:闹铃音为急促的 “滴滴滴” 音,响声延续5s
- 按键开启/禁用闹钟功能,并通过 LED 显示闹钟功能开启(LED亮)或禁用(LED灭)状态
- 秒表功能
- 可实现一小时以内精确至百分之一秒的计时
- 复位功能
- 暂停功能
- 计时器功能
- 可设定计时器的时、分、秒
- 暂停、重新计时功能
- 计时提醒:计时到0时,产生连续5s的 “滴滴滴”音
按键使用说明
button1
- 显示模式下:短按切换功能显示,长按进入编辑模式
- 编辑模式下:短按切换编辑项
button2
-
显示模式下:
- 闹钟显示下,短按开启/禁用闹钟功能
- 计时器显示下,短按开始/暂停计时
- 秒表显示下,短按开始/暂停计时
-
编辑模式下:短按每次加1
button3
-
显示模式下:
- 秒表显示下,短按复位
-
编辑模式下:短按每次加10
button4
- 显示模式下:无操作
- 编辑模式下:短按确认修改并退出编辑模式
模块描述
-
button_debounce:按键消抖模块, 支持消抖时间配置、支持按键上升沿和下降沿检测;
-
button_controller:按键控制模块, 生成短按/长按指示信号;
-
clock_controller:多功能时钟控制模块, 支持时钟、闹钟、秒表、计时器的功能.;
-
digital_tube:数码管驱动模块,支持刷新频率配置、支持共阴极/共阳极数码管类型选择、数码管个数配置。
模块设计
button_debounce
button_controller
clock_controller
digital_tube
整体资源用量
测试视频
基于FPGA的多功能数字钟设计