欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

time_screen_set.v

一个电子中的verilog实验源代码。适合verilog初学者学习参考
V
字号:
// **********************************************************************************
// FileName		:time_screen_set.v
//
// Discription	:时间的显示与设置模块
//
// Date			:
//
// Author		: dandan
// **********************************************************************************
module time_screen_set(clk_5,reset,set,mode,mode_time,hour_count,minute_count,sec_count,day_carry);

input clk_5,reset;
input set;
input [5:0] mode;
input [2:0] mode_time;
output [7:0] hour_count,minute_count,sec_count;
output day_carry;

//主状态机
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	Hour_set=3'b100,		//设置小时
			Minute_set=3'b010,		//设置分钟
			Sec_set=3'b001;			//设置秒

reg [7:0] hour_count,minute_count,sec_count,msec_count;
reg day_carry;						//日进位
reg [3:0] set_count;				//set计数器

always@(posedge clk_5)
	if(reset)
		begin
			hour_count<=23;			//为了仿真方便,从23点59分57秒开始计时
			minute_count<=59;
			sec_count<=56;
			msec_count<=4;
			day_carry<=0;
			set_count<=0;
		end
	else
		if(mode==Time_set)			//设置时间状态
			begin
				case(mode_time)		
				Hour_set:			//设置小时
					begin
						if(set)		//开始设置
							begin	
								if(!set_count)											//如果set是刚被按下
									begin
										set_count<=set_count+1;							//计数器开始计数
										if(hour_count<23)	hour_count<=hour_count+1;	//且小时计数器+1
										else	hour_count<=0;
									end
								else if((set_count<5)&&(set_count>0))	set_count<=set_count+1;
								else 													//如果计数器小于5,继续计数
									begin												//如果计数器大于5,每clk_5的
										if(hour_count<23)	hour_count<=hour_count+1;	//上升沿小时计数器+1
										else	hour_count<=0;
								    end
							end
						else	set_count<=0;
					end												
				Minute_set:			//设置分钟
					begin
						if(set)		//开始设置
							begin	
								if(!set_count)											//如果set是刚被按下
									begin
										set_count<=set_count+1;							//计数器开始计数
										if(minute_count<59)	 minute_count<=minute_count+1;
										else	minute_count<=0;						//且分钟计数器+1
									end
								else if((set_count<5)&&(set_count>0))	set_count<=set_count+1;
								else 													//如果计数器小于5,继续计数
									begin												//否则每0。2s分钟+1
										if(minute_count<59)		minute_count<=minute_count+1;
										else	minute_count<=0;
									end	
							end
						else	set_count<=0;
					end				
				Sec_set:	if(set)		sec_count<=0;									//秒清零
				endcase
			end
		else						//时间显示计数
			begin
				if(hour_count==23&&minute_count==59&&sec_count==59&&msec_count==4)
					begin			//当23:59:59时,显示00:00:00,且日进位
						day_carry<=1;
						hour_count<=0;
						minute_count<=0;
						sec_count<=0;
						msec_count<=0;
					end
				else if(minute_count==59&&sec_count==59&&msec_count==4)
					begin			//当xx:59:59时,显示xx:00:00
						day_carry<=0;
						hour_count<=hour_count+1;
						minute_count<=0;
						sec_count<=0;
						msec_count<=0;
					end
				else if(sec_count==59&&msec_count==4)
					begin			//当xx:xx:59时,显示xx:xx:00
						day_carry<=0;
						minute_count<=minute_count+1;
						sec_count<=0;
						msec_count<=0;
					end
				else if(msec_count==4)
					begin			//否则秒+1
						day_carry<=0;
						sec_count<=sec_count+1;
						msec_count<=0;
					end
				else
					begin
						day_carry<=0;
						msec_count<=msec_count+1;
					end
			end


endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -