1、电子钟程序的设计模块有时钟初始化模块时钟工作模块电子钟:程序的设计模块有:时钟初始化模块、时钟工作模块、时钟设置模块、闹钟设置模块、闰年的月份天数判断模块、数码管显示模块、闹钟铃声模块及其它的设置模块。程序使用8个输入分别与8个按键连接,用按键8对应时钟工作状态(work_state),当work_state为0时,时钟正常工作,当work_state为1时,进入时钟设置状态。按键7对应输入端口display_set控制时钟显示状态(display_state),每按2次(用于产生上升沿触发)则数码管的输出不同。Display_state与work_state相结合使用,以区分设置的参数。按键
2、64对应输入个脚in_set,该参数共有三位,用以表示三个状态:state_yorh(设置年或小时)、state_morm(设置月份或分钟)、state_dors(设置日期或秒钟)。按键32对应数值设置端口up各down。Up用于产生上升沿触发,当down为0时,则每一个上升沿产生时,相应的参数加1,当down为1时,则每一个上升沿产生时,相应的参数减1。按键1与输入端口clock_on相连,用于闹钟的开与关,当clock_on为1时开闹钟,否则关闹钟。扬声器与输出端口speaker相连,用于输出闹钟铃声。是用GW48教学实验箱仿真的、电子钟 moduleclock(work_state,cl
3、ock_on,clk_6MHz,clk_4Hz,in_set,display_set,clk_1024Hz,up,down,out1,out2,out3,out4,out5,out6,out7,out8,speaker); inputwork_state,clk_1024Hz,up,down,display_set,clk_6MHz,in_set,clock_on,clk_4Hz; outputout1,out2,out3,out4,out5,out6,out7,out8,speaker; wire2:0in_set; reg3:0out1,out2,out3,out4,out5,out6,o
4、ut7,out8; reg2:0display_state; reg7:0hour,minute,second,year,month,day,day_max; reg7:0hour_set,minute_set,second_set,day_set,month_set,year_set,day_set_max; integercentury=20; integeri=0; regspeaker; reg7:0clock_hour,clock_minute,clock_second; reg3:0high,med,low; reg13:0divider,origin; reg7:0counter
5、; regout; wirecarry; /*各初始值设置时对应的状态*/ parameterstate_yorh=3b100,/设置年或小时对应的按键状态 state_morm=3b010,/设置月或分对应的按键状态 state_dors=3b001;/设置日或秒对应的按键状态 /*初始化时钟:08年08月08日00:00:00*/ initial begin year=8; year_set=8; month=8; month_set=8; day=8; day_set=8; hour=0; minute=0; second=0; clock_hour=0; clock_minute=0;
6、 clock_second=0; display_state=1023) begin i=0; if(work_state) begin second=second_set; minute=minute_set; hour=hour_set; day=day_set; month=month_set; year=59) begin second=59) begin minute=23) begin hour=day_max) begin day=12) begin month=99) year=0; else year=year+1; end else month=month+1; end e
7、lse day=day+1; end else hour=hour+1; end else minute=minute+1; end else second=second+1; end end else i=2) display_state=0; else display_state=display_state+1; end /*闹钟模块设置,用clock_on控制闹钟,闹钟铃声播放时间为一分钟,可手动关闭闹钟*/ always(posedgeclk_6MHz) begin if(clock_on) begin if(clock_hour=hour&clock_minute=minute) s
8、peaker=out; elsespeaker=0; end elsespeaker=0; end /*设置时钟的初值*/ /*用up来触发,当down=0时,一个上升沿触发来时加1,否则减1.*/ always(posedgeup) begin if(!work_state)/时间处于正常工作状态时,使要设置的初始值保持同步 begin second_set=second; minute_set=minute; hour_set=hour; day_set=day; month_set=month; year_set=99) year_set=0; else year_set=12) mon
9、th_set=1; else month_set=day_set_max) day_set=1; else day_set=day_set+1; end endcase end else begin case(in_set) state_yorh:begin if(year_set=0) year_set=99; else year_set=year_set-1; end state_morm:begin if(month_set=1) month_set=12; else month_set=month_set-1; end state_dors:begin if(day_set=1) day_set=day_set_max; else day_set=23) hour_set=0; else hour_set=59) minute_set=0; else minute_set=59) second_set=0; else second_set=second_set+1; end endcase
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1