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

📄 led.v

📁 一个电子中的verilog实验源代码。适合verilog初学者学习参考
💻 V
字号:
// **********************************************************************************
// FileName		:led.v
//
// Discription	:显示模块
//
// Date			:
//
// Author		: dandan
// **********************************************************************************
		

module	led(glbclk,clk_1000,clk_100,clk_1,reset,mode,screen_mode,mode_time,mode_date,mode_clock,
			year_count,month_count,day_count,hour_count,minute_count,sec_count,
			clock_h_count,clock_m_count,sec_m_count,sec_s_count,sec_ms_count,
			alm_light_on,o_light_on,led_scan,led_out);
					
input glbclk,clk_1000,clk_100,clk_1;
input reset;
input alm_light_on,o_light_on;
input [5:0] mode;
input [2:0] mode_time,mode_date,mode_clock;
input [1:0] screen_mode;
input [7:0] year_count,month_count,day_count,hour_count,minute_count,sec_count;
input [7:0]	clock_h_count,clock_m_count,sec_m_count,sec_s_count,sec_ms_count;
inout [5:0] led_scan;	
output [7:0] led_out; 	// led_out [7] : dp
						//       [6] : a
						//		 [5] : b
						//		 [4] : c
						//		 [3] : d
						//		 [2] : e
						//		 [1] : f 
						//		 [0] : g
parameter   led_out_0=7'b1111110,
            led_out_1=7'b0110000,
            led_out_2=7'b1101101,
            led_out_3=7'b1111001,
            led_out_4=7'b0110011,
            led_out_5=7'b1011011,
            led_out_6=7'b1011111,
            led_out_7=7'b1110000,
            led_out_8=7'b1111111,
            led_out_9=7'b1111011;
//主状态机
parameter	Time_screen=6'b000_001,	//时间正常显示
			Time_set=6'b000_010,	//设置时间
			Date_set=6'b000_100,	//设置日期
			Clock_set=6'b001_000,	//设置闹钟
			Sec_clock=6'b010_000, 	//秒表
			O_light_set=6'b100_000;	//设置整点报时
//显示状态机
parameter	Screen_clock=2'b01,		//显示闹钟
			Screen_date=2'b10;		//显示日期	

//设置时间状态机
parameter	Hour_set=3'b100,		//设置小时
			Minute_set=3'b010,		//设置分钟
			Sec_set=3'b001;			//设置秒
//设置日期状态机
parameter	Day_set=3'b001,			//设置日子
			Month_set=3'b010,		//设置月
			Year_set=3'b100;		//设置年
//设置闹钟状态机
parameter	Clock_on=3'b100,		//设置闹钟开关
			Clock_hour=3'b010,		//设置闹钟的小时
			Clock_minute=3'b001;	//设置闹钟的分钟
           
//调用bcd码转换器
wire  [3:0] input1,input2,input3,input4,input5,input6;
reg [7:0] led1,led2,led3;

//调用scan
wire [5:0] led_scan;				
wire [3:0] led_bcd;

wire led1_shine,led2_shine,led3_shine;
reg [7:0] led_out;

//显示的内容
always @(posedge clk_1000)										 
	begin
		if(reset)
			 begin
			 	led1<=0;
			 	led2<=0;
			 	led3<=0;
			 end
		else
			begin
				if(((mode==Time_screen)&&(!screen_mode))||(mode==Time_set))	
					begin
	           			led1<=hour_count;						 //当显示时间和设置时间时
	           			led2<=minute_count;
	           			led3<=sec_count;
           			end
           		else if((screen_mode==Screen_date)&&(mode==Time_screen)||(mode==Date_set))
        	   		begin
           				led1<=year_count;						 //当显示日期和设置日期时
           				led2<=month_count;
           				led3<=day_count;
           			end
	           	else if((mode==Clock_set)||((mode==Time_screen)&&(screen_mode==Screen_clock))||(mode==O_light_set))
					begin										 //当显示闹钟和设置闹钟,设置整点报时时
						if(alm_light_on&&o_light_on)	led1<=11;//闹钟和整点报时都开启
						else if(alm_light_on)			led1<=10;//只有闹钟开启
						else if(o_light_on)				led1<=01;//只有整点报时开启
						else							led1<=0; //都未开启
						led2<=clock_h_count;					 
						led3<=clock_m_count;
					end
				else if(mode==Sec_clock)		
					begin										
						led1<=sec_m_count;						 //当显示秒表时
						led2<=sec_s_count;
						led3<=sec_ms_count;
					end
         	end  
    end	          	

//小数点的显示
always@(led_scan)
	begin
		if(reset)
			led_out[7]=1'b0;
		else
			begin
				if(!led_scan[2]||!led_scan[4])					 //当显示第2位和第4位时,显示小数点
						led_out[7]=1'b1;
				else 	led_out[7]=1'b0;						 //否则不显示
			end
	end
//led的显示

//当设置时间小时,设置日期年,设置闹钟开关,设置整点报时开关时,高2位闪烁
assign led1_shine=((mode==Time_set&&mode_time==Hour_set)||(mode==Date_set&&mode_date==Year_set)||(mode==Clock_set&&mode_clock==Clock_on)||(mode==O_light_set))&&(!led_scan[4]||!led_scan[3]);
//当设置时间分钟,设置日期月,设置闹钟小时时,中间2位闪烁
assign led2_shine=((mode==Time_set&&mode_time==Minute_set)||(mode==Date_set&&mode_date==Month_set)||(mode==Clock_set&&mode_clock==Clock_hour))&&(!led_scan[2]||!led_scan[1]);
//当设置时间秒,设置日期天,设置闹钟分钟时,低2位闪烁
assign led3_shine=((mode==Time_set&&mode_time==Sec_set)||(mode==Date_set&&mode_date==Day_set)||(mode==Clock_set&&mode_clock==Clock_minute))&&(!led_scan[5]||!led_scan[0]);

always @ (led_scan)
	begin
		if (reset)	led_out[6:0] = 7'b0000_000;
		else
			begin
				if(led1_shine||led2_shine||led3_shine)			 //当闪烁时
					begin
						if(clk_1)								 //半秒显示
							begin
								case(led_bcd)
								4'd0:	led_out[6:0]=led_out_0;	
								4'd1:	led_out[6:0]=led_out_1;
								4'd2:	led_out[6:0]=led_out_2;
								4'd3:	led_out[6:0]=led_out_3;
								4'd4:	led_out[6:0]=led_out_4;
								4'd5:	led_out[6:0]=led_out_5;
								4'd6:	led_out[6:0]=led_out_6;
								4'd7:	led_out[6:0]=led_out_7;
								4'd8:	led_out[6:0]=led_out_8;
								4'd9:	led_out[6:0]=led_out_9;
								endcase
							end
						else 	led_out[6:0]=0;					 //半秒显示"none"
					end
				else
					begin
						case(led_bcd)							 //否则正常显示
						4'd0:	led_out[6:0]=led_out_0;	
						4'd1:	led_out[6:0]=led_out_1;
						4'd2:	led_out[6:0]=led_out_2;
						4'd3:	led_out[6:0]=led_out_3;
						4'd4:	led_out[6:0]=led_out_4;
						4'd5:	led_out[6:0]=led_out_5;
						4'd6:	led_out[6:0]=led_out_6;
						4'd7:	led_out[6:0]=led_out_7;
						4'd8:	led_out[6:0]=led_out_8;
						4'd9:	led_out[6:0]=led_out_9;
						endcase
					end
			end
	end	
////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	
	binary_to_BCD b2b1(.clk_i(glbclk),.rst_i(reset),.A(led3),.ONES(input1),.TENS(input2));
	
	binary_to_BCD b2b2(.clk_i(glbclk),.rst_i(reset),.A(led2),.ONES(input3),.TENS(input4));
	
	binary_to_BCD b2b3(.clk_i(glbclk),.rst_i(reset),.A(led1),.ONES(input5),.TENS(input6));
	
	scan s(.clk_1000(clk_1000),.reset(reset),.input1(input1),.input2(input2),.input3(input3),.input4(input4),
	.input5(input5),.input6(input6),.led_scan(led_scan),.led_bcd(led_bcd)); 
	
////////////////////////////////////////////////////////////////////////////////////////////////////////////
	endmodule			

⌨️ 快捷键说明

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