| 
 | 
 
- module clk(Clk0,Clk1,Change,Mkey,Hkey,SEG,DIG);
 
 - input        Clk0,Clk1,Change,Mkey,Hkey;//clk0为FPGA晶振频率,clk1为1hz时钟频率
 
 - output [7:0] SEG,DIG;//数码管的段选和位选
 
 - reg [12:0]   CNT_R0;
 
 - reg          F_OUT;
 
 - reg [7:0]    HOUR,MIN,SEC;
 
 - wire         hclk,mclk;
 
 - reg          flag,mc,hc;
 
 - reg [2:0]    SCAN_R;
 
 - reg [3:0]    SEG_M [7:0];
 
 - reg [7:0]    SEG_DR;
 
 - reg [7:0]    SEG,DIG;
 
 - always @(posedge Clk0)//分频
 
 - begin
 
 -    CNT_R0 <= CNT_R0 + 1'b1;
 
 -   
 
 -    if(CNT_R0 < 4096)
 
 -    begin
 
 -       F_OUT <= 1;
 
 -    end
 
 -    else
 
 -    begin
 
 -       F_OUT <= 0;
 
 -    end
 
 - end
 
 - always @(posedge F_OUT)
 
 - begin
 
 -    SCAN_R = SCAN_R + 1'b1;
 
 -   
 
 -    case(SCAN_R)
 
 -       3'h0 : begin DIG = 8'hFE  ; SEG_DR = SEG_M[0]; end
 
 -       3'h1 : begin DIG = 8'hFD  ; SEG_DR = SEG_M[1]; end
 
 -       3'h2 : begin DIG = 8'hFB  ; SEG_DR = SEG_M[2]; end
 
 -       3'h3 : begin DIG = 8'hF7  ; SEG_DR = SEG_M[3]; end
 
 -       3'h4 : begin DIG = 8'hEF  ; SEG_DR = SEG_M[4]; end
 
 -       3'h5 : begin DIG = 8'hDF  ; SEG_DR = SEG_M[5]; end
 
 -       3'h6 : begin DIG = 8'hBF  ; SEG_DR = SEG_M[6]; end
 
 -       3'h7 : begin DIG = 8'h7F  ; SEG_DR = SEG_M[7]; end
 
 -    endcase
 
 - end
 
 - always @(posedge Clk0)
 
 - begin
 
 -    case(SEG_DR)
 
 -       4'h0 : SEG <= 8'h3F;
 
 -       4'h1 : SEG <= 8'h06;
 
 -       4'h2 : SEG <= 8'h5B;
 
 -       4'h3 : SEG <= 8'h4F;
 
 -       4'h4 : SEG <= 8'h66;
 
 -       4'h5 : SEG <= 8'h6D;
 
 -       4'h6 : SEG <= 8'h7D;
 
 -       4'h7 : SEG <= 8'h07;
 
 -       4'h8 : SEG <= 8'h7F;
 
 -       4'h9 : SEG <= 8'h6F;
 
 -       4'hA : SEG <= 8'h40;
 
 -    default : SEG <= 4'h00;  
 
 -    endcase
 
 - end
 
 - always @(posedge Change)//选择手动调时还是正常计时
 
 - begin
 
 -  if(flag==0)
 
 -  flag<=1;
 
 -  else
 
 -  flag<=0;
 
 - end
 
 - always @(posedge Clk1)
 
 - begin
 
 -    if(SEC==8'b01011001)begin SEC<=0; if(flag==0)mc<=1;else mc<=mc;end
 
 -    else begin
 
 -    if(SEC[3:0]==4'b1001)
 
 -    begin SEC[3:0]<=0;SEC[7:4]<=SEC[7:4]+1'b1;if(flag==0)mc<=0;else mc<=mc;end
 
 -    else
 
 -    begin
 
 -        SEC[3:0]<=SEC[3:0]+1'b1;if(flag==0)mc<=0;else mc<=mc; end
 
 -    end  
 
 - end
 
 - assign mclk=(flag==0)?(!flag&mc):(!mc&Mkey)|(mc&!Mkey);
 
 - always @(posedge mclk)
 
 - begin
 
 -    if(MIN==8'b01011001)begin MIN<=0; if(flag==0)hc<=1;else hc<=hc;end
 
 -    else begin
 
 -    if(MIN[3:0]==4'b1001)
 
 -    begin
 
 -  MIN[3:0]<=0;MIN[7:4]<=MIN[7:4]+1'b1;if(flag==0)hc<=0;else hc<=hc;end
 
 -    else
 
 -    begin
 
 -        MIN[3:0]<=MIN[3:0]+1'b1;if(flag==0)hc<=0;else hc<=hc; end
 
 -    end  
 
 - end
 
 - assign hclk=(flag==0)?(!flag&hc):(!hc&Hkey)|(hc&!Hkey);
 
 - always @(posedge hclk)
 
 - begin
 
 -    if(HOUR==8'h00100011) HOUR<=0; 
 
 -    else  begin
 
 - if(HOUR[3:0]==4'b1001)begin HOUR[3:0]<=0;HOUR[7:4]<=HOUR[7:4]+1'b1;end
 
 - else
 
 -        HOUR[3:0]<=HOUR[3:0]+1'b1;  
 
 - end 
 
 - end
 
 - always @(posedge Clk0)
 
 - begin
 
 -    SEG_M[0] = SEC[3:0];
 
 -    SEG_M[1] = SEC[7:4];
 
 -    SEG_M[2] = 4'hA;  
 
 -    SEG_M[3] = MIN[3:0];
 
 -    SEG_M[4] = MIN[7:4];
 
 -    SEG_M[5] = 4'hA;
 
 -    SEG_M[6] = HOUR[3:0];
 
 -    SEG_M[7] = HOUR[7:4];
 
 - end
 
 - endmodule
 
 
  复制代码 |   
 
 
 
 |