📄 clock_alarm_set.v
字号:
// **********************************************************************************
// FileName :clock_alarm_set.v
//
// Discription :闹钟的显示与设置模块
//
// Date :
//
// Author : dandan
// **********************************************************************************
module clock_alarm_set(clk_5,reset,mode,mode_clock,set,keyin,alm_light_on,hour_count,
minute_count,clock_h_count,clock_m_count,alm_light);
input clk_5,reset;
input [5:0] mode;
input [2:0] mode_clock;
input set;
input keyin;//停止闹铃按键
input [7:0] hour_count,minute_count;
input alm_light_on;
output [7:0] clock_h_count,clock_m_count;
output alm_light;
//主状态机
parameter Time_screen=6'b000_001, //时间正常显示
Time_set=6'b000_010, //设置时间
Date_set=6'b000_100, //设置日期
Clock_set=6'b001_000, //设置闹钟
Sec_clock=6'b010_000, //秒表
O_light_set=6'b100_000; //设置整点报时
//设置闹钟状态机
parameter Clock_on=3'b100, //设置闹钟开关
Clock_hour=3'b010, //设置闹钟的小时
Clock_minute=3'b001; //设置闹钟的分钟
wire alm_on;
reg [7:0] clock_h_count,clock_m_count;
reg alm_light;
reg [3:0] set_count;
//闹铃设置模块
always@(posedge clk_5)
if(reset)
begin
clock_h_count<=0;
clock_m_count<=0;
set_count<=0;
end
else
begin
if((mode==Clock_set)&&(mode_clock==Clock_hour)) //当设置闹钟小时时
begin
if(set) //如果是刚按下的set键
begin
if(!set_count)
begin
set_count<=set_count+1; //计数器计数同时clock_h_count+1
if(clock_h_count<23) clock_h_count<=clock_h_count+1;
else clock_h_count<=0;
end //如果计数器小于5,继续累加
else if((set_count<5)&&(set_count>0)) set_count<=set_count+1;
else
begin //当计到1s时,每周期数值增加一次
if(clock_h_count<23) clock_h_count<=clock_h_count+1;
else clock_h_count<=0;
end
end
else set_count<=0;
end
else if((mode==Clock_set)&&(mode_clock==Clock_minute)) //设置闹钟分钟
begin
if(set)
begin
if(!set_count)
begin
set_count<=set_count+1;
if(clock_m_count<59) clock_m_count<=clock_m_count+1;
else clock_m_count<=0;
end
else if((set_count<5)&&(set_count>0))
begin
set_count<=set_count+1;
end
else
begin
if(clock_m_count<59) clock_m_count<=clock_m_count+1;
else clock_m_count<=0;
end
end
else set_count<=0;
end
end
//闹铃模块
assign alm_on=(alm_light_on&&(hour_count==clock_h_count)&&(minute_count==clock_m_count));
always@(keyin or alm_on)//闹铃开启并且小时与分钟与闹铃设置一致时闹铃响一分钟
if(reset)
begin
alm_light=0;
end
else
begin
if(keyin) alm_light=0; //当按下暂停键时,闹铃停止
else alm_light=1; //否则闹铃继续响
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -