📄 基于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 + -