process(sc_c,add_min) --此进程是进行60分计时 variable cnt_60m_v:integer range 0 to 59 ; --存放分计时的中间变量,最后传到分输出端cnt_60m begin
if(pause='0') then
selector_min<=sc_c; --当计时/ 调整信号为0时正常计时,否则按键调整时间 else
selector_min<=add_min; end if;
if(selector_min 'event and selector_min='1') then if(cnt_60m_v=59) then cnt_60m_v:=0;
min_c<='1'; --分的进位信号 else
cnt_60m_v:=cnt_60m_v+1; min_c<='0'; end if; end if;
cnt_60m<=cnt_60m_v; --将计数的中间变量传给分输出端 end process;
process(min_c,selector_hour) --此进程是进行12小时计时 variable cnt_12h_v:integer range 0 to 11; --存放时的中间变量,最后传到分输出端cnt_60h begin
if(pause='0') then
selector_hour<=min_c; else
selector_hour<=add_hour; end if;
if(selector_hour 'event and selector_hour='1') then if(cnt_12h_v=11) then cnt_12h_v:=0; else
cnt_12h_v:=cnt_12h_v+1; end if; end if;
cnt_12h<=cnt_12h_v; end process;
end architecture one;
(3)、设置闹铃时间模块
library ieee; --设置闹铃时间,定时闹铃 use ieee.std_logic_1164.all;
entity setalarmtime is
port(set_alarm,set_sc,set_min,set_hour:in std_logic; sc_data,min_data: out integer range 0 to 59; hour_data:out integer range 0 to 11); end entity ;
architecture one of setalarmtime is begin
process(set_sc)
variable set_sc_data:integer range 0 to 59; --定义局部变量 begin
if(set_alarm='1') then
if(set_sc 'event and set_sc='1') then if(set_sc_data=59)then set_sc_data:=0; else
set_sc_data:=set_sc_data+1; --设置秒 end if; end if; end if;
sc_data<=set_sc_data; --秒设置好赋值给输出端 end process;
process(set_min)
variable set_min_data:integer range 0 to 59; begin
if(set_alarm='1') then
if(set_min 'event and set_min='1') then if(set_min_data=59)then set_min_data:=0; else
set_min_data:=set_min_data+1; --设置分 end if;
end if; end if;
min_data<=set_min_data; --分设置好赋值给输出端 end process;
process(set_hour)
variable set_hour_data:integer range 0 to 11; begin
if(set_alarm='1') then
if(set_hour 'event and set_hour='1') then if(set_hour_data=11)then set_hour_data:=0; else
set_hour_data:=set_hour_data+1; --设置时 end if; end if; end if;
hour_data<=set_hour_data; --时设置好赋值给输出端 end process; end architecture one;
(4)、闹铃模块
library ieee;--闹铃模块,时间相等则开始闹铃 use ieee.std_logic_1164.all;
entity alarm is
port(sc,min:in integer range 0 to 59;
hour:in integer range 0 to 11; --正常计时的时分秒 set_sc,set_min:in integer range 0 to 59;
set_hour:in integer range 0 to 11; --设置闹铃时间的时分秒 clear_alarm:in std_logic; --停止闹铃信号 flag_1s:in std_logic; --1hz信号
alarm_start:out bit; --开始闹铃信号 alarm_end:out bit; --结束闹铃信号 flag_alarm:out bit); --闹铃标志信号 end entity;
architecture one of alarm is
signal flag_alarm_start:bit; --定义开始闹铃信号
signal flag_alarm_end:bit; --定义结束闹铃信号 begin
process(sc,min,hour) begin
if(flag_1s 'event and flag_1s='1') then
if(sc=set_sc and min=set_min hour=set_hour) then
flag_alarm_start<=not flag_alarm_start; --如果正常计时的时间和
设置的闹铃时间相等时开始闹铃
else
flag_alarm_start<='0'; --如果时间不相等则不闹铃 end if; end if;
alarm_start<=flag_alarm_start; 将信号赋值给输出端 end process;
process(clear_alarm) begin if(clear_alarm 'event and clear_alarm='1') then flag_alarm_end<=not flag_alarm_end; --如果停止闹铃
信号到来则停止闹铃
end if;
alarm_end<=flag_alarm_end; end process;
process(flag_alarm_start,flag_alarm_end) begin
flag_alarm<=flag_alarm_start xor flag_alarm_end; end process; end architecture one;
(5)、二选一模块
library ieee; --选择正常计时时间或者设置闹铃时间 use ieee.std_logic_1164.all;
entity two_sel_one is
port(selector:in std_logic;--选择信号
sc,min:in integer range 0 to 59;
hour: in integer range 0 to 11;--正常计时时间输入端 set_sc,set_min:in integer range 0 to 59;
set_hour:in integer range 0 to 11; --设置闹铃时间的输入端 sc_out,min_out: out integer range 0 to 59;
hour_out:out integer range 0 to 11);--二选一选择后输出 end entity ;
architecture one of two_sel_one is begin
process(sc,min,hour,set_sc,set_min,set_hour) begin
if(selector='0') then sc_out<=sc; min_out<=min;
hour_out<=hour;--如果选择信号为0时,输出的是正常计时时间 else
sc_out<=set_sc; min_out<=set_min;
hour_out<=set_hour; --如果选择信号为1时,输出的是设置的闹铃
时间
end if; end process; end architecture one;
(6)、显示模块
library ieee; --此程序是将时分秒的十位和个位数分开并且转换成段码,还有
位选
use ieee.std_logic_1164.all;
entity display is
port(sc_data:in integer range 0 to 59; min_data:in integer range 0 to 59; hour_data:in integer range 0 to 11;
flag_1khz:in std_logic; --1khz的位选信号 Q:out std_logic_vector(7 downto 0); --接数码管的段码引脚 S:out std_logic_vector(7 downto 0)); --接数码管的位选引脚 end entity display;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VHDL设计的12进制可调时钟带闹铃功能 - 图文(2)在线全文阅读。
相关推荐: