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

📄 date_screen_set.v

📁 一个电子中的verilog实验源代码。适合verilog初学者学习参考
💻 V
字号:
// **********************************************************************************
// FileName		:date_screen_set.v
//
// Discription	:日期的显示与设置模块
//
// Date			:
//
// Author		: dandan
// **********************************************************************************
module date_screen_set(clk_5,reset,set,day_carry,mode,mode_date,year_count,month_count,day_count);

input clk_5,reset;
input set;
input day_carry;
input [5:0] mode;
input [2:0] mode_date;
output [7:0] year_count,month_count,day_count;

reg [7:0] year_count,month_count,day_count;
reg [3:0] set_count;

//主状态机
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	Day_set=3'b001,			//设置日子
			Month_set=3'b010,		//设置月
			Year_set=3'b100;		//设置年
			

always@(posedge clk_5)
	if(reset)
		begin
			year_count<=05;			//为了仿真方便,初始日期设置为05年12月31日		
			month_count<=12;
			day_count<=31;
			set_count<=0;
		end
	else
		if(mode==Date_set)			//当设置日期时
			begin
				case(mode_date)		
				Year_set:			//设置年
					begin
						if(set)		//开始设置,当set计数器计到1s时,每周期年计数器+1
							begin
								if(!set_count)
									begin
										set_count<=set_count+1;
										if(year_count<99)	year_count<=year_count+1;	
										else	year_count<=0;
									end
								else if((set_count<5)&&(set_count>0))	set_count<=set_count+1;
								else 	
									begin
										if(year_count<99)	year_count<=year_count+1;	
										else	year_count<=0;
									end		
							end
						else	set_count<=0;
					end
				Month_set:			//设置月
					begin
						if(set)		//开始设置,当set计数器计到1s时,每周期月计数器+1
							begin
								if(!set_count)
									begin
										set_count<=set_count+1;
										if(month_count<12)	month_count<=month_count+1;	
										else	month_count<=1;
									end
								else if((set_count<5)&&(set_count>0))	set_count<=set_count+1;
								else 	
									begin
										if(month_count<12)	month_count<=month_count+1;	
										else	month_count<=1;
									end		
							end
						else	set_count<=4'b0;
					end
					
				Day_set:			//设置天
					begin
						if(set)		//开始设置,当set计数器计到1s时,每周期日计数器+1
							begin
								if(!set_count)
									begin
										set_count<=set_count+1;
										case(month_count)	
										4,6,9,11:		//4,6,9,11月
											begin
												if(day_count<30)	day_count<=day_count+1;
												else				day_count<=1;
											end
										2:				//考虑到闰月
											begin
												if(day_count<28)	day_count<=day_count+1;
												else				day_count<=1;
											end
										1,3,5,7,8,10,12://1,3,5,7,8,10,12月
											begin
												if(day_count<31)	day_count<=day_count+1;
												else				day_count<=1;
											end
										endcase
									end											
								else if((set_count<5)&&(set_count>0))	set_count<=set_count+1;
								else 	
									begin
										case(month_count)
										4,6,9,11:		//4,6,9,11月
											begin
												if(day_count<30)	day_count<=day_count+1;
												else				day_count<=1;
											end
										2:				//考虑到闰月
											begin
												if(day_count<28)	day_count<=day_count+1;
												else				day_count<=1;
											end
										1,3,5,7,8,10,12://1,3,5,7,8,10,12月
											begin
												if(day_count<31)	day_count<=day_count+1;
												else				day_count<=1;
											end
										endcase
									end
							end
						else	set_count<=0;
					end	
				endcase
			end
		else
			begin
				if(day_carry)		//如果有日进位,日期开始计数
					begin
						if((day_count<30)&&(month_count==4||month_count==6||month_count==9||month_count==11))
							begin	//4,6,9,11月30天
								day_count<=day_count+1;	
							end
						else if((day_count<28)&&(month_count==2))
							begin	//2月28天
								day_count<=day_count+1;	
							end
						else if((day_count<31)&&(month_count||month_count==3||month_count==5||month_count==7||month_count==8||month_count==10||month_count==12))
							begin	//1,3,5,7,8,10,12月31天
								day_count<=day_count+1;	
							end
						else	
							begin
								day_count<=1;	
								if(month_count<12)	month_count<=month_count+1;
								else//如果日期等于该月日期上限,日期归1,月计数器+1,同理年计数器+1
									begin
										month_count<=1;
										if(year_count<99)	year_count<=year_count+1;
										else	year_count<=0;
							 		end
							end
					end
			end							
endmodule

⌨️ 快捷键说明

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