赞
踩
名称:基于FPGA的多功能数字钟设计Verilog代码ISE开发板(文末获取)
软件:Quartus
语言:Verilog
代码功能:
1.能显示时分秒,最大可显示23:59:59,时间可调,可以复位
2.可以定时闹钟,闹钟有铃声
3.数字钟能实现整点报时功能
本代码已在开发板验证,开发板如下,其他开发板可以修改管脚适配:
部分代码展示:
module display( input clk, input [3:0] state_mode,当前模式,4'd0:计时,4'd1设置时间 ,4'd2显示闹钟时间,4'd3设置闹钟时间 input [7:0] alarm_hour_time,//闹钟时 input [7:0] alarm_minute_time,//闹钟分 input [7:0] alarm_second_time,//闹钟秒 input [7:0] hour_time,//时 input [7:0] minute_time,//分 input [7:0] second_time,//秒 output reg [7:0] bit_select,//数码管位选 output reg [7:0] seg_select//数码管段选 ); reg [3:0]display = 4'b0000; reg [31:0]select_num =32'd0; reg [2:0]geshu = 3'd0; reg [7:0] display_hour_time;//显示时 reg [7:0] display_minute_time;//显示分 reg [7:0] display_second_time;//显示秒 always@(posedge clk) case(state_mode) 4'd0,4'd1: begin//4'd0:计时,4'd1设置时间 display_hour_time<=hour_time;//显示时 display_minute_time<=minute_time;//显示分 display_second_time<=second_time;//显示秒 end 4'd2,4'd3: begin//4'd2显示闹钟时间,4'd3设置闹钟时间 display_hour_time<=alarm_hour_time;//显示时 display_minute_time<=alarm_minute_time;//显示分 display_second_time<=alarm_second_time;//显示秒 end default:; endcase 位选 always @(posedge clk ) //扫描频率 begin if(select_num == 32'd99_999) begin select_num <= 32'd0; end else begin select_num <=select_num +1'd1; //扫描频率计时数字 end end always @(posedge clk ) begin if(select_num == 32'd99_999) begin if(geshu == 3'd7) begin geshu <= 3'd0; end else begin geshu <= geshu + 1'd1; //扫描那个管子的指示位 end end end always @(posedge clk ) //位选切换 begin case (geshu) 3'd0: begin bit_select<=~8'b01111111; display<= display_second_time %8'd10;//秒个位 end 3'd1: begin bit_select<=~8'b10111111; display <= display_second_time /8'd10;//秒十位 end 3'd2: begin //显示- bit_select<=~8'b11011111; display <= 4'd10; end 3'd3: begin bit_select<=~8'b11101111; display <= display_minute_time %8'd10;//分个位 end 3'd4: begin bit_select<=~8'b11110111; display <= display_minute_time /8'd10;//分十位 end 3'd5: begin //显示- bit_select<=~8'b11111011; display <= 4'd10; end 3'd6: begin bit_select<=~8'b11111101; display <= display_hour_time %8'd10;//时个位 end 3'd7: begin bit_select<=~8'b11111110; display <= display_hour_time /8'd10;//时十位 end default:; endcase end 段选输出/// always @(posedge clk) begin case (display) //数字显示码 4'd0: seg_select<= ~8'b1100_0000; 4'd1: seg_select<= ~8'b1111_1001; 4'd2: seg_select<= ~8'b1010_0100; 4'd3: seg_select<= ~8'b1011_0000; 4'd4: seg_select<= ~8'b1001_1001; 4'd5: seg_select<= ~8'b1001_0010; 4'd6: seg_select<= ~8'b1000_0010; 4'd7: seg_select<= ~8'b1111_1000; 4'd8: seg_select<= ~8'b1000_0000; 4'd9: seg_select<= ~8'b1001_0000; 4'd10: seg_select<=~8'b1011_1111; default:; endcase end endmodule
扫描文章末尾的公众号二维码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。