万年历资料 文档
- 格式: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;