名称:数字时钟+闹钟功能 VHDL QuartusII软件:QuartusII语言:VHDL代码功能:
代码实现思路:
代码结构:
顶层模块(Digital_clock):连接各功能模块,调度信号。
分频模块(fenping):将50MHz时钟分频为1Hz。
按键消抖模块(key_jitter):消除按键抖动,输出稳定按键信号。
计时模块(jishi):实现时分秒计数与时间设置。
闹钟模块(alarm_clock):实现闹钟时间设置与触发。
显示模块(display):驱动数码管显示当前时间或闹钟时间。
响铃模块(Bell):在闹钟时间到达时输出响铃信号。
---
工程相关图片
---
各功能模块图片
按键模块
分频模块
计时模块
闹钟模块
显示模块
响铃模块
---
部分代码预览
```vhdl LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY Digital_clock IS PORT ( clk_50M?????: IN STD_LOGIC; shift_time???: IN STD_LOGIC;--切换开关12/24进制 shift_alarm??: IN STD_LOGIC;--切换计时还是闹钟 key_1???????: IN STD_LOGIC;--修改选择(时分) key_2???????: IN STD_LOGIC;--修改时间 bell_out????: OUT STD_LOGIC; bit_select??: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管位选 seg_select??: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选 ); END Digital_clock;
ARCHITECTURE behave OF Digital_clock IS --模块声明 --响铃模块 COMPONENT Bell IS PORT ( clk_50M?????: IN STD_LOGIC; clear_alarm????????????: IN STD_LOGIC;--关闭闹钟键(key3) alarm_hour_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); alarm_minute_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); alarm_second_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); hour_time???: IN STD_LOGIC_VECTOR(7 DOWNTO 0); minute_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); second_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); bell_out????: OUT STD_LOGIC ); END COMPONENT; --闹钟模块 COMPONENT alarm_clock IS PORT ( clk_50M????????????: IN STD_LOGIC; rst_n??????????????: IN STD_LOGIC; state_mode????????: IN STD_LOGIC;--当前模式,0:计时,1:闹钟 key_1_neg???????: IN STD_LOGIC;--修改选择(时分) key_2_neg???????: IN STD_LOGIC;--修改时间 alarm_hour_time????: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--时 alarm_minute_time??: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--分 alarm_second_time??: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--秒 ); END COMPONENT; --显示模块 COMPONENT display IS PORT ( clk?????????: IN STD_LOGIC; state_mode??: IN STD_LOGIC; shift_time??: IN STD_LOGIC;--切换开关12/24进制 alarm_hour_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); alarm_minute_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); alarm_second_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); hour_time???: IN STD_LOGIC_VECTOR(7 DOWNTO 0); minute_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); second_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); bit_select??: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); seg_select??: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; --分频模块 COMPONENT fenping IS PORT ( clk_50M?????: IN STD_LOGIC; clk_1Hz?????: OUT STD_LOGIC ); END COMPONENT; --按键消抖 COMPONENT key_jitter IS PORT ( clkin???????: IN STD_LOGIC; key_in??????: IN STD_LOGIC; key_negedge : OUT STD_LOGIC ); END COMPONENT; --计时模块 COMPONENT jishi IS PORT ( clk_50M???????????: IN STD_LOGIC; rst_n?????????????: IN STD_LOGIC; clk_1Hz???????????: IN STD_LOGIC; state_mode????????: IN STD_LOGIC;--当前模式,0:计时,1:闹钟 key_1_neg???????: IN STD_LOGIC;--修改选择(时分) key_2_neg???????: IN STD_LOGIC;--修改时间 hour_time?????????: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--时 minute_time???????: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--分 second_time???????: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--秒 ); END COMPONENT; SIGNAL hour_time?????????????: STD_LOGIC_VECTOR(7 DOWNTO 0);--时 SIGNAL minute_time???????????: STD_LOGIC_VECTOR(7 DOWNTO 0);--分 SIGNAL second_time???????????: STD_LOGIC_VECTOR(7 DOWNTO 0);--秒 SIGNAL alarm_hour_time???????: STD_LOGIC_VECTOR(7 DOWNTO 0);--闹钟时 SIGNAL alarm_minute_time?????: STD_LOGIC_VECTOR(7 DOWNTO 0);--闹钟分 ```
代码获取:
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1541