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

📄 基于verilog 的数码管扫描.txt

📁 基于Verilog的数码管模拟扫描程序
💻 TXT
字号:
/*信号说明:
GW48 SOPC系统(GW48-PK2)选用模式5;
clk:标准时钟信号,本例取4HZ;接179引脚;
clk1:标准时钟信号,本例取2HZ;接178引脚
   为使数码管逐个移动,要使clk<clk1,相等也不行;
reset:复位键;
start:开始按键;
mode:模式选择按键;
dataout:数据输出,BCD码显示;
LD1~LD8:发光二极管显示
*/
module shuma(clk,clk1,reset,start,mode,dataout1,dataout2,dataout3,dataout4,
			 dataout5,dataout6,dataout7,dataout8,LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8);
	input clk,clk1,start,reset,mode;
	output[3:0] dataout1,dataout2,dataout3,dataout4,dataout5,
				dataout6,dataout7,dataout8;
	output LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8;
	reg[7:0] state;
	reg[3:0] out,dataout1,dataout2,dataout3,dataout4,
			 dataout5,dataout6,dataout7,dataout8;
	reg m,LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8;
	parameter K0=8'B00000000,//数码管全为0状态
			  K1=8'B00000001,//数码管1显示out状态
			  K2=8'B00000010,//数码管2显示out状态
			  K3=8'B00000100,//数码管3显示out状态
			  K4=8'B00001000,//数码管4显示out状态
			  K5=8'B00010000,//数码管5显示out状态
			  K6=8'B00100000,//数码管6显示out状态
			  K7=8'B01000000,//数码管7显示out状态
			  K8=8'B10000000,//数码管8显示out状态
			  KA=8'B11111111;//数码管全显示out状态
	
	always@(posedge clk1)
	 	m<=~m;
			
	always@(posedge clk)
		if(reset) begin {LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8}<=0;
			{dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,
						dataout7,dataout8}<=0;
						state<=K0;end//复位状态
		else
		if(start)		//开始键按下,数码管开始运行;
			begin 
			case(state)
			K0:begin if(!mode)	//模式0,为K0与KA状态间转换显示
				begin if(m) state<=KA;
				else begin state<=K0;
						{dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,
						dataout7,dataout8}<=0;
						{LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8}<=0;
					end
				end
				else			//模式1,为K1~K8循环显示;
				if(!m)
					state<=K1;
				else 
					state<=K0;
				end
			K1:begin if(!mode)	
				state<=K0;
				else
				if(m)
					state<=K2;
				else begin			//模式1显示方式
					state<=K1;
					dataout1<=out;	//数码管1显示out,其它为0;
					{dataout2,dataout3,dataout4,dataout5,dataout6,
					dataout7,dataout8}<=0;
					LD1<=1;	//二极管1亮
					{LD2,LD3,LD4,LD5,LD6,LD7,LD8}<=0;
					end	
			   end
			K2:begin if(!mode)
				state<=K0;
				else
				if(!m)
					state<=K3;
				else begin			//模式1显示方式
					state<=K2;
					dataout2<=out;	//数码管2显示out,其它为0;
					{dataout1,dataout3,dataout4,dataout5,dataout6,
					dataout7,dataout8}<=0;
					LD2<=1;//二极管2亮
					{LD1,LD3,LD4,LD5,LD6,LD7,LD8}<=0;
					end
				end
			K3:begin if(!mode)
				state<=K0;
				else
				if(m)
					state<=K4;
				else begin			//模式1显示方式
					state<=K3;
					dataout3<=out;	//数码管3显示out,其它为0;
					{dataout1,dataout2,dataout4,dataout5,dataout6,
					dataout7,dataout8}<=0;
					LD3<=1;		//二极管3亮
					{LD1,LD2,LD4,LD5,LD6,LD7,LD8}<=0;
					end
				end
			K4:begin if(!mode)
				state<=K0;
				else
				if(!m)
					state<=K5;
				else begin			//模式1显示方式
					state<=K4;
					dataout4<=out;	//数码管4显示out,其它为0;
					{dataout1,dataout2,dataout3,dataout5,dataout6,
					dataout7,dataout8}<=0;
					LD4<=1;	//二极管4亮
					{LD1,LD2,LD3,LD5,LD6,LD7,LD8}<=0;
					end
				end
			K5:begin if(!mode)
				state<=K0;
				else
				if(m)
					state<=K6;
				else begin			//模式1显示方式
					state<=K5;
					dataout5<=out;	//数码管5显示out,其它为0;
					{dataout1,dataout2,dataout3,dataout4,dataout6,dataout7,
					dataout8}<=0;
					LD5<=1;	//二极管5亮
					{LD1,LD2,LD3,LD4,LD6,LD7,LD8}<=0;
					end
				end

			K6:begin if(!mode)
				state<=K0;
				else
				if(!m)
					state<=K7;
				else begin			//模式1显示方式
					state<=K6;
					dataout6<=out;	//数码管6显示out,其它为0;
					{dataout1,dataout2,dataout3,dataout4,dataout5,dataout7,
					dataout8}<=0;
					LD6<=1;	//二极管6亮
					{LD1,LD2,LD3,LD4,LD5,LD7,LD8}<=0;
					end
				end
			K7:begin if(!mode)
				state<=K0;
				else
				if(m)
					state<=K8;
				else begin			//模式1显示方式
					state<=K7;
					dataout7<=out;	//数码管7显示out,其它为0;
					{dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,
					dataout8}<=0;
					LD7<=1;		//二极管7亮
					{LD1,LD2,LD3,LD4,LD5,LD6,LD8}<=0;
					end
				end
			K8:begin if(!mode)
				state<=K0;
				else
				if(!m)
					state<=K1;
				else begin			//模式1显示方式
					state<=K8;
					dataout8<=out;	//数码管8显示out,其它为0;
					{dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,
					dataout7}<=0;
					LD8<=1;//二极管8亮
					{LD1,LD2,LD3,LD4,LD5,LD6,LD7}<=0;
					end
				end
			KA:begin if(!mode)		//模式0显示方式
				begin state<=KA;
				{dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,dataout7,
				dataout8}<={out,out,out,out,out,out,out,out};
				//八个数码管一起显示数字;
				if(m){LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8}<=8'hf0;//低4个二极管亮
				else {LD1,LD2,LD3,LD4,LD5,LD6,LD7,LD8}<=8'h0f;//高4个二极管亮
				end 
				else state<=K0;
				end
			endcase
			end	

	always@(negedge clk1)				//数字0~9生成;
		if(reset)
			out<=0;
		else if(start)
			begin
				if(out==4'b1001)
					out<=0;
				else
					out<=out+1;
			end	
endmodule

⌨️ 快捷键说明

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