电子钟程序的设计模块有时钟初始化模块时钟工作模块Word文件下载.docx
《电子钟程序的设计模块有时钟初始化模块时钟工作模块Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子钟程序的设计模块有时钟初始化模块时钟工作模块Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
、电子钟
module
clock(work_state,clock_on,clk_6MHz,clk_4Hz,in_set,display_set,clk_1024Hz,up,down,out1,out2,out3,out4,out5,out6,out7,out8,speaker);
input
work_state,clk_1024Hz,up,down,display_set,clk_6MHz,in_set,clock_on,clk_4Hz;
output
out1,out2,out3,out4,out5,out6,out7,out8,speaker;
wire[2:
0]
in_set;
reg[3:
out1,out2,out3,out4,out5,out6,out7,out8;
reg[2:
display_state;
reg[7:
hour,minute,second,year,month,day,day_max;
hour_set,minute_set,second_set,day_set,month_set,year_set,day_set_max;
integer
century=20;
i=0;
reg
speaker;
clock_hour,clock_minute,clock_second;
high,med,low;
reg[13:
divider,origin;
counter;
out;
wire
carry;
//*****各初始值设置时对应的状态********//
parameter
state_yorh=3'
b100,
//设置年或小时对应的按键状态
state_morm=3'
b010,
//设置月或分对应的按键状态
state_dors=3'
b001;
//设置日或秒对应的按键状态
//***初始化时钟:
08年08月08日00:
00:
00*****//
initial
begin
year<
=8;
year_set<
month<
month_set<
day<
day_set<
hour<
=0;
minute<
second<
clock_hour<
clock_minute<
clock_second<
display_state<
end
//******电子钟正常工作状态下/work_state等于0时,时钟处于工作状态*******//
always
@(posedge
clk_1024Hz)
//频率选择1024HZ
if(i>
=1023)
i<
if(work_state)
=second_set;
=minute_set;
=hour_set;
=day_set;
=month_set;
=year_set;
else
if(second>
=59)
if(minute>
if(hour>
=23)
if(day>
=day_max)
=1;
if(month>
=12)
if(year>
=99)
else
=year+1;
=month+1;
=day+1;
=hour+1;
=minute+1;
=second+1;
=i+1;
//******数码管显示状态设置*******//
display_set)
if(display_state>
=2)
=display_state+1;
//*闹钟模块设置,用clock_on控制闹钟,闹钟铃声播放时间为一分钟,可手动关闭闹钟**//
clk_6MHz)
begin
if(clock_on)
if(clock_hour==hour&
&
clock_minute==minute)
speaker<
=out;
//*************设置时钟的初值*************************//
/*用up来触发,当down=0时,一个上升沿触发来时加1,否则减1.***/
@(
posedge
up)
if(!
work_state)
//时间处于正常工作状态时,使要设置的初始值保持同步
second_set<
=second;
minute_set<
=minute;
hour_set<
=hour;
=day;
=month;
=year;
if(display_state==1)//当display_state==1时,则是设置年月日的初始值,否则是设置时间.
if(down==0)
case(in_set)
state_yorh:
if(year_set>
=year_set+1;
end
state_morm:
if(month_set>
=month_set+1;
state_dors:
if(day_set>
=day_set_max)
=day_set+1;
endcase
if(year_set<
=0)
=99;
=year_set-1;
if(month_set<
=1)
=12;
=month_set-1;
if(day_set<
=day_set_max;
=day_set-1;
if(display_state==0)
if(hour_set>
=hour_set+1;
if(minute_set>
=minute_set+1;
if(second_set>
=second_set+1;