⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock_alarm_set.v

📁 一个电子中的verilog实验源代码。适合verilog初学者学习参考
💻 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 + -