?? date_screen_set.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 + -