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

📄 clock.v

📁 用Verilog 实现的电子时钟
💻 V
字号:
module clock(clk,             clr,             pause,             turn,             mode,             sec,             min1,             min0,             hour1,             hour0,             alert,             LD_alert                          );input    clk;             //时钟信号(50MHz)input    clr;             //清零键input    pause;           //秒表暂停键input    turn;            //调整分还是小时位的控制input    [1:0]mode;       //决定时钟显示功能状态output   sec;              //接发光二极管output   [3:0]min1;        //用于输出接数码管3output   [3:0]min0;        //用于输出接数码管4output   [3:0]hour1;       //用于输出接数码管1output   [3:0]hour0;       //用于输出接数码管2output   alert;            //接发光二极管,代替轰鸣器output   LD_alert;         //当闹铃设定后,发光二极管显示wire     sec;              //秒位显示wire     LD_alert;         //用于闹铃存在时的提醒显示wire     clk1;             //时钟1swire     clk2;             //时钟100ms,用于秒表最小计时单位wire     clr1;reg      [3:0]min1;        //显示reg      [3:0]min0;        //显示reg      [3:0]hour1;       //显示reg      [3:0]hour0;       //显示reg      [3:0]smin1;       //校时reg      [3:0]smin0;       //校时reg      [3:0]shour1;      //校时reg      [3:0]shour0;      //校时reg      [3:0]amin1;       //闹铃reg      [3:0]amin0;       //闹铃reg      [3:0]ahour1;      //闹铃reg      [3:0]ahour0;      //闹铃reg      [3:0]mmin1;       //秒表reg      [3:0]mmin0;       //秒表reg      [3:0]mhour1;      //秒表reg      [3:0]mhour0;      //秒表reg      alert;            //当闹铃到时高电平输出reg      [7:0]count;fdiv     fdiv(.f50m(clk),.f1(clk1));           //50MHZ分频到1HZfdiv_ms  fdiv_ms(.f50m(clk),.f2(clk2));        //50MHZ分频到10HZkey_press  key_press1(.clk(clk),.key(clr),.key_out(clr1));        //消抖always @(posedge clk1)   begin  if(!clr1)    begin	 smin0<=0;	 smin1<=0;	 shour1<=0;	 shour0<=0;	 amin1<=0;         amin0<=0;         ahour1<=0;         ahour0<=0;                  count<=0;    end  else     begin           if((count==59))                                              begin               count<=0;              smin0<=1;            end         else            count<=count+1;//以上为秒计数工作过程                 if((smin1==5)&&(smin0==9)&&(count==59))            begin              smin1<=0;              smin0<=0;              shour0<=1;            end         else             if((smin0==9)&&(count==59))                  begin                   smin1<=smin1+1;                   smin0<=0;                end             else               if((count==59))                 smin0<=smin0+1;               else                 smin0<=smin0;   //以上为分工作过程         if((shour1==2)&&(shour0==3)&&(smin1==5)&&(smin0==9)&&(count==59))             begin               shour1<=0;               shour0<=0;              end         else              if((shour0==9)&&(smin1==5)&&(smin0==9)&&(count==59))                 begin                    shour1<=shour1+1;                    shour0<=0;                 end              else                 if((smin1==5)&&(smin0==9)&&(count==59))                    shour0<=shour0+1;                  else                    shour0<=shour0;                            //以上为小时工作过程         if(mode==2'b01)                                             //闹铃调时状态              if(turn==1)                                            //当turn为高电平时调整分位                 if((amin1==5)&&(amin0==9))                   begin                     amin1<=0;                     amin0<=0;                   end                    else                     if(amin0==9)                       begin                          amin1<=amin1+1;                         amin0<=0;                       end                     else                        amin0<= amin0+1;               else                                                //当turn为低电平时调整小时位                 if((ahour1==2)&&(ahour0==3))                    begin                      ahour1<=0;                      ahour0<=0;                   end                 else                      if(ahour0==9)                        begin                          ahour1<=ahour1+1;                          ahour0<=0;                               end                      else                         ahour0<=ahour0+1;            //else;                      //以上为闹铃定时过程          if(mode==2'b10)                                             //时钟调时状态             if(turn==1)                                           //当turn为高电平时调整分位                if((smin1==5)&&(smin0==9))                  begin                    smin1<=0;                    smin0<=0;                  end                   else                    if(smin0==9)                      begin                         smin1<=smin1+1;                        smin0<=0;                      end                    else                       smin0<=smin0+1;             else                                                  //当turn为低电平时调整小时位                if((shour1==2)&&(shour0==3))                   begin                     shour1<=0;                     shour0<=0;                  end                else                     if(shour0==9)                       begin                         shour1<=shour1+1;                         shour0<=0;                              end                     else                        shour0<=shour0+1;         //else;                      end end		 //以上为时钟调时过程always @(posedge clk2)  begin  if(!clr1)    begin       mmin1<=0;        mmin0<=0;        mhour1<=0;       mhour0<=0;    end  else     begin       if(mode==2'b11)         begin                                                      //秒表计时状态             if(pause==0)                                           //当pause为低电平时开始计时                begin   		  if((mhour0==9)&&(mmin1==9)&&(mmin0==9))                           begin  			mhour1<=mhour1+1;			mmin1<=0;			mmin0<=0;			mhour0<=0;	     	     end		  else                                             		      if((mmin1==9)&&(mmin0==9))			 begin                           mhour0<=mhour0+1;			   mmin1<=0;			   mmin0<=0;			 end		      else			 if(mmin0==9)			    begin				mmin1<=mmin1+1;				mmin0<=0;			    end			 else			     mmin0<=mmin0+1;	        end              else                                                 //当pause为高电平时停止计时                begin                              mmin1<=mmin1;                    mmin0<=mmin0;                    mhour1<=mhour1;                  mhour0<=mhour0;                end                       end    end end//以上为秒表计时功能assign LD_alert=(amin1|amin0|ahour1|ahour0)?1:0;                      //当闹铃有定时后LD_alert发光以示闹铃已定assign sec=clk1;                                                      //接秒时钟发光always@(posedge clk)  begin   if(!clr1)      alert<=0;   else       if((amin1==smin1)&&(amin0==smin0)&&(ahour1==shour1)&&(ahour0==shour0))          alert<=1;                                                  //对闹铃做检查,时间到时发光      else alert<=0; end//以下为选择显示模块always @ (posedge clk)   begin	 if(!clr1)	  begin	     min0<=0;	     min1<=0;	     hour1<=0;             hour0<=0;	  end	else  	 begin  	    case(mode)                2'b01:   begin                                       //mode=01时,显示闹铃模块                          min1<=amin1;                           min0<=amin0;                            hour1<=ahour1;                          hour0<=ahour0;                                   end                2'b10:   begin                                      //mode=10时,显示校时模块                          min1<=smin1;                             min0<=smin0;                             hour1<=shour1;                           hour0<=shour0;                          end                2'b11:   begin                                      //mode=11时,显示秒表模块                          min1<=mmin1;                             min0<=mmin0;                             hour1<=mhour1;                           hour0<=mhour0;                           end                         2'b00:  begin                                      //其他状态,显示普通时钟模块                          min1<=smin1;                                   min0<=smin0;                            hour1<=shour1;                          hour0<=shour0;                        end           endcase          end  end                       endmodule

⌨️ 快捷键说明

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