万年历资料 文档

  • 格式:doc
  • 大小:280.50 KB
  • 文档页数:12

程序:

`timescale 1ns/1ns

module yjc(

clk,

rst_n,

key_set,

key_clock,

key_work,

sw3,

sw2,

sw1,

sw0,

sw5,

sw4,

seg7,

seg8,

seg5,

seg6,

seg3,

seg4,

seg1,

seg2,

led ,

led_mode,

);

input clk; //主时钟信号,48MHz

input rst_n; //复位信号,低有效

input key_set; //复位信号,低有效

input key_clock; //复位信号,低有效

input key_work; //复位信号,低有效

input sw3; //复位信号,低有效

input sw2; //复位信号,低有效

input sw1; //复位信号,低有效

input sw0; //复位信号,低有效

input sw5; //复位信号,低有效

input sw4; //复位信号,低有效

output [7:0]seg7; //发光二极管,分别由按键控制

reg [7:0]seg7 ;

output [7:0]seg8 ; //发光二极管,分别由按键控制

reg [7:0]seg8;

output [7:0]seg6 ; //发光二极管,分别由按键控制

reg [7:0]seg6;

output [7:0]seg5 ; //发光二极管,分别由按键控制

reg [7:0]seg5; output [7:0]seg4 ; //发光二极管,分别由按键控制

reg [7:0]seg4;

output [7:0]seg3 ; //发光二极管,分别由按键控制

reg [7:0]seg3;

output [7:0]seg2 ; //发光二极管,分别由按键控制

reg [7:0]seg2;

output [7:0]seg1 ; //发光二极管,分别由按键控制

reg [7:0]seg1;

reg [25:0] cnt=26'd0;

reg [5:0] second=6'd0;//秒

reg [5:0] min_memory=6'd0;//分

reg [5:0] min=6'd0;//分

reg [5:0] hour_memory=6'd0;//分

reg [5:0] hour=6'd0;//时

reg [5:0] day=6'd0;//日

reg [5:0] month=6'd0;//月

reg [25:0] o_clk=26'd0;

output [7:0]led; //发光二极管,分别由按键控制

reg [7:0]led ;

output [2:0]led_mode; //发光二极管,分别由按键控制

reg [2:0]led_mode ;

always @(posedge clk or negedge

rst_n)//计数

begin

if(rst_n==1'b0)

cnt <=26'b0;

else if(cnt==26

'd52428799)

cnt <=0;

else

cnt<=cnt+1;

end

always @(posedge clk or negedge

rst_n)//分频

begin

if(rst_n==1'b0)

o_clk <=1'b0;

else if(cnt<26

'd26214400)

o_clk <=0;

else

o_clk<=1; end

always @(posedge o_clk or negedge

rst_n)

begin

if (!rst_n)

begin

second= 6'd55;

min= 6'd30;

hour= 6'd09;

day= 6'd09;

month= 6'd12;

led = 8'h00;

led_mode= 8'h04;

end

else

begin

if((!sw5)&&(!sw4))//如果设置时间键按下

begin

led_mode= 8'h02;

second= 6'd0;

if(!sw3)//月份调节

begin

month=month+4'b1;

if(month==6'd13)

begin

month=6'd1;

end

end

if(!sw2)//天数调节

begin

day=day+4'b1;

if(day==6'd31)

begin

day=6'd1;

end

end

if(!sw1)//小时调节

begin

hour=hour+4'b1;

if(hour==6'd24)

begin

hour=6'd0;

end

end if(!sw0)//分钟调节

begin

min=min+4'b1;

if(min==6'd60)

begin

min=6'd0;

end

end

end

else if((sw5)&&(sw4))//闹钟模式

begin

led_mode= 8'h01;

second= 6'd0;

if(!sw1)//闹钟小时设定

begin

hour=hour+4'b1;

if(hour==6'd24)

begin

hour=6'd0;

end

end

if(!sw0)//闹钟分钟设定

begin

min=min+4'b1;

if(min==6'd60)

begin

min=6'd0;

end

end

end

else

begin

led_mode= 8'h04;

led = ~led;

second=second+4'b1;

if(second==6'd60)

begin

second=6'd0;

min=min+4'b1;

if(min==6'd60)

begin

min=6'd0;

hour=hour+4'b1;

if(hour==6'd24) begin

hour=6'd0;

day=day+4'b1;

if(day==6'd31)

begin

day=6'd1;

month=month+4'b1;

if(month==6'd13)

begin

month=6'd1;

end

end

end

end

end

end

end

case(min%10)

4'd0: seg7 = 8'hc0;

4'd1: seg7 = 8'hf9;

4'd2: seg7 = 8'ha4;

4'd3: seg7 = 8'hb0;

4'd4: seg7 = 8'h99;

4'd5: seg7 = 8'h92;

4'd6: seg7 = 8'h82;

4'd7: seg7 = 8'hf8;

4'd8: seg7 = 8'h80;

4'd9: seg7 = 8'h90;

default:seg7 = 'bx;

endcase

case(min/10)

4'd0: seg8 = 8'hc0;

4'd1: seg8 = 8'hf9;

4'd2: seg8 = 8'ha4;

4'd3: seg8 = 8'hb0;

4'd4: seg8 = 8'h99;

4'd5: seg8 = 8'h92;

4'd6: seg8 = 8'h82;

4'd7: seg8 = 8'hf8;

4'd8: seg8 = 8'h80;

4'd9: seg8 = 8'h90;

default:seg8 = 'bx;

endcase

case(hour%10) 4'd0: seg5 = 8'hc0;

4'd1: seg5 = 8'hf9;

4'd2: seg5 = 8'ha4;

4'd3: seg5 = 8'hb0;

4'd4: seg5 = 8'h99;

4'd5: seg5 = 8'h92;

4'd6: seg5 = 8'h82;

4'd7: seg5 = 8'hf8;

4'd8: seg5 = 8'h80;

4'd9: seg5 = 8'h90;

default:seg5 = 'bx;

endcase

case(hour/10)

4'd0: seg6 = 8'hc0;

4'd1: seg6 = 8'hf9;

4'd2: seg6 = 8'ha4;

4'd3: seg6 = 8'hb0;

4'd4: seg6 = 8'h99;

4'd5: seg6 = 8'h92;

4'd6: seg6 = 8'h82;

4'd7: seg6 = 8'hf8;

4'd8: seg6 = 8'h80;

4'd9: seg6 = 8'h90;

default:seg6 = 'bx;

endcase

case(day%10)

4'd0: seg3 = 8'hc0;

4'd1: seg3 = 8'hf9;

4'd2: seg3 = 8'ha4;

4'd3: seg3 = 8'hb0;

4'd4: seg3 = 8'h99;

4'd5: seg3 = 8'h92;

4'd6: seg3 = 8'h82;

4'd7: seg3 = 8'hf8;

4'd8: seg3 = 8'h80;

4'd9: seg3 = 8'h90;

default:seg3 = 'bx;

endcase

case(day/10)

4'd0: seg4 = 8'hc0;

4'd1: seg4 = 8'hf9;