电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx

上传人:b****5 文档编号:7607362 上传时间:2023-01-25 格式:DOCX 页数:11 大小:18.17KB
下载 相关 举报
电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx_第1页
第1页 / 共11页
电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx_第2页
第2页 / 共11页
电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx_第3页
第3页 / 共11页
电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx_第4页
第4页 / 共11页
电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx

《电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx》由会员分享,可在线阅读,更多相关《电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx(11页珍藏版)》请在冰豆网上搜索。

电子钟程序的设计模块有时钟初始化模块时钟工作模块.docx

电子钟程序的设计模块有时钟初始化模块时钟工作模块

电子钟:

程序的设计模块有:

时钟初始化模块、时钟工作模块、时钟设置模块、闹钟设置模块、闰年的月份天数判断模块、数码管显示模块、闹钟铃声模块及其它的设置模块。

程序使用8个输入分别与8个按键连接,用按键8对应时钟工作状态(work_state),当work_state为0时,时钟正常工作,当work_state为1时,进入时钟设置状态。

按键7对应输入端口display_set控制时钟显示状态(display_state),每按2次(用于产生上升沿触发)则数码管的输出不同。

Display_state与work_state相结合使用,以区分设置的参数。

按键6~4对应输入个脚in_set,该参数共有三位,用以表示三个状态:

state_yorh (设置年或小时)、state_morm(设置月份或分钟)、 state_dors(设置日期或秒钟)。

按键3~2对应数值设置端口up各down。

Up用于产生上升沿触发,当down为0时,则每一个上升沿产生时,相应的参数加1,当down为1时,则每一个上升沿产生时,相应的参数减1。

按键1与输入端口clock_on相连,用于闹钟的开与关,当 clock_on为1时开闹钟,否则关闹钟。

扬声器与输出端口speaker相连,用于输出闹钟铃声。

 

是用GW48教学实验箱仿真的

 、电子钟

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:

0] out1,out2,out3,out4,out5,out6,out7,out8;

reg[2:

0] display_state;

reg[7:

0] hour,minute,second,year,month,day,day_max;

reg[7:

0] hour_set,minute_set,second_set,day_set,month_set,year_set,day_set_max;

integer century=20;

integer i=0;

reg speaker;

reg[7:

0] clock_hour,clock_minute,clock_second;

reg[3:

0] high,med,low;

        reg[13:

0] divider,origin;

        reg[7:

0] counter;

        reg 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<=8;

        month<=8;

        month_set<=8;

        day<=8;

        day_set<=8;

        hour<=0;

        minute<=0;

        second<=0;

        clock_hour<=0;

        clock_minute<=0;

        clock_second<=0;

        display_state<=0;

        end

        

        

//******电子钟正常工作状态下/work_state等于0时,时钟处于工作状态*******//

always @(posedge clk_1024Hz)         //频率选择1024HZ

        begin

        if(i>=1023)

                begin

                i<=0;

                if(work_state)

                        begin

                        second<=second_set;

                        minute<=minute_set;

                        hour<=hour_set;

                        day<=day_set;

                        month<=month_set;

                        year<=year_set;

                end

                else        

                begin

                        if(second>=59)

                        begin

                                second<=0;

                                if(minute>=59)

                                begin

                                        minute<=0;

                                        if(hour>=23)

                                        begin

                                                hour<=0;

                                                if(day>=day_max)

                                                begin

                                                        day<=1;

                                                        if(month>=12)

                                                        begin

                                                                month<=1;

                                                                if(year>=99)

                                                                        year<=0;

                                                                else

                                                                        year<=year+1;

                                                        end

                                                        else

                                                                month<=month+1;

                                                end

                                                else

                                                        day<=day+1;

                                        end

                                        else

                                                hour<=hour+1;

                                end

                                 else

                                        minute<=minute+1;

                        end

                        else

                                second<=second+1;

                end

                end

        else

                i<=i+1;

        end

//******数码管显示状态设置*******//

always @(posedge display_set)

        begin

        if(display_state>=2)

                display_state<=0;

        else

                display_state<=display_state+1;

        end

        

//*闹钟模块设置,用clock_on控制闹钟,闹钟铃声播放时间为一分钟,可手动关闭闹钟**//

always @(posedge clk_6MHz)

        begin 

        if(clock_on)

                begin

                        if(clock_hour==hour&&clock_minute==minute)

                                speaker<=out;

                        else        speaker<=0;

                end

        else        speaker<=0;

        end

        

//*************设置时钟的初值*************************//

/*用up来触发,当down=0时,一个上升沿触发来时加1,否则减1.***/

always        @( posedge up)

        begin

        if(!

work_state)       //时间处于正常工作状态时,使要设置的初始值保持同步

                begin

                    second_set<=second;

                        minute_set<=minute;

                        hour_set<=hour;

                        day_set<=day;

                        month_set<=month;

                        year_set<=year;

                end

        else

        begin

                if(display_state==1)//当display_state==1时,则是设置年月日的初始值,否则是设置时间.

                begin

                        if(down==0)

                        begin

                                case(in_set)

                                state_yorh:

begin

                                                if(year_set>=99)

                                                        year_set<=0;

                                                else

                                                        year_set<=year_set+1;

                                                end                                

                            state_morm:

begin

                                                if(month_set>=12)

                                                        month_set<=1;

                                                else

                                                        month_set<=month_set+1;

                                                end

                            state_dors:

begin

                                                if(day_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<=day_set-1;

                                                end

                                endcase

                        end

                end

                else if(display_state==0)

                begin

                        if(down==0)

                        begin

                                case(in_set)

                                state_yorh:

begin

                                                if(hour_set>=23)

                                                        hour_set<=0;

                                                else

                                                        hour_set<=hour_set+1;

                                                end                                

                            state_morm:

begin

                                                if(minute_set>=59)

                                                        minute_set<=0;

                                                else

                                                        minute_set<=minute_set+1;

                                                end

                            state_dors:

begin

                                                if(second_set>=59)

                                                        second_set<=0;

                                                else

                                                        second_set<=second_set+1;

                                                end

                                endcase

                  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1