名称:数字时钟+闹钟功能 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
704