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

📄 dispcontrol.v

📁 数字钟可以说明的具体功能都在文件家中,请仔细参阅,希望大家可以相互学习,共同进步
💻 V
字号:
//模块:数码管显示控制模块
//功能:不同模式下控制数码管的显示输出,需要时加上数字的闪烁
//输入:Mode,SetSel加上所有要显示的数字
//输出:8个数码显示,两个一组:[7:0]D87,D65,D43,D21,D87,D65,D43的三个点号[4:2]Dots

`timescale 1ns / 100ps

module DispControl 
	(Clk2Hz,Clk512Hz,Reset,Mode,SetSel,SetSelKey,SetKey,IsFastAdjust,
	IsHour12,AM,Hour12,Hour,Min,Sec,
	YMD,Weekday,
	AAM,AHour12,AHour,AMin,
	StopWatch,//Stop watch
	Digital,LightOn) ;

// ------------ Port declarations --------- //
input Clk2Hz,Clk512Hz,Reset,IsHour12,AM,AAM,SetSelKey,SetKey,IsFastAdjust;
input [1:0]Mode;
input [2:0]SetSel;
input [4:0]Hour12,AHour12;
input [5:0]Hour,AHour;
input [6:0]Min,Sec,AMin;

input [23:0]YMD;
input [2:0]Weekday;
input [31:0]StopWatch;
output [3:0]Digital;
reg   [3:0]Digital;
output [7:0] LightOn;
reg   [7:0]T21,T43,T65,T87;//temp	digital to display
parameter DANGLE4=4'h0;
parameter DANGLE8=8'h00;

wire [3:0] AMDisp =IsHour12? (AM ? 4'ha:4'hb) : 0;	//AM:A PM:B
wire [3:0]AAMDisp =IsHour12?(AAM ? 4'ha:4'hb) : 0;
wire [7:0]  HourDisp =IsHour12? {3'h0,  Hour12} : {2'h0,  Hour};
wire [7:0] AHourDisp =IsHour12? {3'h0, AHour12} : {2'h0, AHour};
wire [15:0]MinSecDisp={1'b0,Min ,1'b0,Sec};
wire [31:0]TimeDisp ={HourDisp ,MinSecDisp,DANGLE4,AMDisp};
wire [31:0]AlarmDisp={AHourDisp,1'b0,AMin,DANGLE8,DANGLE4,AAMDisp};
wire [31:0]CalendarDisp={YMD,5'b0,Weekday};


wire [7:0] ScanCode;
reg [7:0] LEDEnable;
reg [7:0] Blink;

RingCounter #(8) U_RingCounter8(.Reset(Reset),.Clk(Clk512Hz),.CE(1'b1),.Count(ScanCode));

always @(LightOn ,T87,T65,T43,T21)
	case (LightOn)
		8'h01: Digital<= T21[3:0];
		8'h02: Digital<= T21[7:4];
		8'h04: Digital<= T43[3:0];
		8'h08: Digital<= T43[7:4];
		8'h10: Digital<= T65[3:0];
		8'h20: Digital<= T65[7:4];
		8'h40: Digital<= T87[3:0];
		8'h80: Digital<= T87[7:4];
		default:Digital<= 4'hF;
	endcase
	
assign LightOn=(ScanCode & LEDEnable &(Blink |{8{Clk2Hz}}));

always @(Mode,SetSel,SetSelKey,SetKey,TimeDisp,CalendarDisp,AlarmDisp,StopWatch,IsHour12,IsFastAdjust)
	if(Mode==2'b01)
		begin //Stop Watch
			{T87,T65,T43,T21}<=StopWatch;
			LEDEnable<=8'b1111_1111;
			Blink<=8'b1111_1111;
		end	
	else if(Mode==2'b10)
		begin //Time and calendar Set 
			if(SetSel[2]) {T87,T65,T43,T21}<=CalendarDisp;
			else {T87,T65,T43,T21}<=TimeDisp;
			case (SetSel[2:0])
				0: begin //hour
					Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b0011_1111;
					LEDEnable<={7'b111_1110,((IsHour12)?1'b1:1'b0)};
					end
				1: begin //minute
					Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b1100_1111;
					LEDEnable<={7'b111_1110,((IsHour12)?1'b1:1'b0)};
					end
				2: begin //second
					Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b1111_0011;
					LEDEnable<={7'b111_1110,((IsHour12)?1'b1:1'b0)};
					end
				3: begin Blink<=8'b1111_1110;LEDEnable<=8'b1111_1101;end//24-12
				4: begin //year
					Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b1011_1111;
					LEDEnable<=8'b1111_1101;
					end
				5: begin //month
					Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b1100_1111;
					LEDEnable<=8'b1111_1101;
					end
				6: begin //day
					Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b1111_0011;
					LEDEnable<=8'b1111_1101;
					end
				default: begin Blink<=8'b1111_1111;	LEDEnable<=8'b1111_1101;end

			endcase
		end	
	else if(Mode==2'b11)
		begin //Alarm Set
			{T87,T65,T43,T21}<=AlarmDisp;
			LEDEnable<={7'b111_1000,((IsHour12)?1'b1:1'b0)};
			case (SetSel[1:0])
				0: Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b0011_1111;
				1: Blink<=IsFastAdjust ? 8'b1111_1111 : 8'b1100_1111;
				default:Blink<=8'b1111_1111;
			endcase
		end	
	else	  //default
		begin //display only
			if(SetSelKey) 	 //show Calendar
				begin 
					{T87,T65,T43,T21}<=CalendarDisp; 
					LEDEnable<=8'b1111_1101;
				end
			else if(SetKey)	//show alarm time
				begin 
					{T87,T65,T43,T21}<=AlarmDisp;
					LEDEnable<={7'b111_1000,((IsHour12)?1'b1:1'b0)};
				end
			else 
				begin 
					{T87,T65,T43,T21}<=TimeDisp;
					LEDEnable<={7'b111_1110,((IsHour12)?1'b1:1'b0)}; 
				end
			Blink<=8'b1111_1111;
		end
endmodule 

⌨️ 快捷键说明

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