module ledshowinput 50key input 30led_control output reg 150led; always key or led_control begin ifkey0==1 caseled_control 4h0led=16h1; 4h1led=16h3; 4h2led=16h7;
module ledshow( input [5:0]key, //6位按键输入 input [3:0]led_control, //4位LED控制输入 output reg [15:0]led); //16位LED输出 always @(key or led_control) //按键和LED控制输入变化时执行以下操作 begin if(key[0]==1) //如果按键0被按下 case(led_control) //根据LED控制输入值进行不同操作 4'h0:led=16'h1; 4'h1:led=16'h3; 4'h2:led=16'h7; 4'h3:led=16'hf; 4'h4:led=16'h1f; 4'h5:led=16'h3f; 4'h6:led=16'h7f; 4'h7:led=16'hff; 4'h8:led=16'h1ff; 4'h9:led=16'h3ff; 4'ha:led=16'h7ff; 4'hb:led=16'hfff; 4'hc:led=16'h1fff; 4'hd:led=16'h3fff; 4'he:led=16'h7fff; 4'hf:led=16'hffff; endcase else if(key[1]==1) //如果按键1被按下 case(led_control) 4'h0:led=16'h8000; 4'h1:led=16'hc000; 4'h2:led=16'he000; 4'h3:led=16'hf000; 4'h4:led=16'hf800; 4'h5:led=16'hfc00; 4'h6:led=16'hfe00; 4'h7:led=16'hff00; 4'h8:led=16'hff80; 4'h9:led=16'hffc0; 4'ha:led=16'hffe0; 4'hb:led=16'hfff0; 4'hc:led=16'hfff8; 4'hd:led=16'hfffc; 4'he:led=16'hfffe; 4'hf:led=16'hffff; endcase else if(key[2]==1) //如果按键2被按下 case(led_control) 4'h0:led=16'haaaa; 4'h1:led=16'h5555; 4'h2:led=16'haaaa; 4'h3:led=16'h5555; 4'h4:led=16'haaaa; 4'h5:led=16'h5555; 4'h6:led=16'haaaa; 4'h7:led=16'h5555; 4'h8:led=16'haaaa; 4'h9:led=16'h5555; 4'ha:led=16'haaaa; 4'hb:led=16'h5555; 4'hc:led=16'haaaa; 4'hd:led=16'h5555; 4'he:led=16'haaaa; 4'hf:led=16'h5555; endcase else if(key[3]==1) //如果按键3被按下 case(led_control) 4'h0:led=16'hffff; 4'h1:led=16'h0000; 4'h2:led=16'hffff; 4'h3:led=16'h0000; 4'h4:led=16'hffff; 4'h5:led=16'h0000; 4'h6:led=16'hffff; 4'h7:led=16'h0000; 4'h8:led=16'hffff; 4'h9:led=16'h0000; 4'ha:led=16'hffff; 4'hb:led=16'h0000; 4'hc:led=16'hffff; 4'hd:led=16'h0000; 4'he:led=16'hffff; 4'hf:led=16'h0000; endcase else if(key[4]==1) //如果按键4被按下 case(led_control) 4'h0:led=16'h8181; 4'h1:led=16'h4242; 4'h2:led=16'h2424; 4'h3:led=16'h1818; 4'h4:led=16'h3c3c; 4'h5:led=16'h7e7e; 4'h6:led=16'hffff; 4'h7:led=16'hffff; 4'h8:led=16'h7e7e; 4'h9:led=16'h3c3c; 4'ha:led=16'h1818; 4'hb:led=16'h2424; 4'hc:led=16'h4242; 4'hd:led=16'h8181; 4'he:led=16'h0000; 4'hf:led=16'h8181; endcase else if(key[5]==1) //如果按键5被按下 case(led_control) 4'h0:led=16'he007; 4'h1:led=16'h700e; 4'h2:led=16'h381c; 4'h3:led=16'h1c38; 4'h4:led=16'h0e70; 4'h5:led=16'h07e0; 4'h6:led=16'h07e0; 4'h7:led=16'h0e70; 4'h8:led=16'h1c38; 4'h9:led=16'h381c; 4'ha:led=16'h700e; 4'hb:led=16'he007; 4'hc:led=16'hc003; 4'hd:led=16'h8001; 4'he:led=16'h8001; 4'hf:led=16'hc003; endcase else led=16'h0000; //如果没有按键被按下,则LED输出为0 end endmodule
module flowlight_1(
input clk, //时钟输入
input rst, //复位输入
input [5:0] key, //6位按键输入
output [15:0] led); //16位LED输出
reg [25:0] counter; //计数器,用于控制流水灯速度
reg [3:0] led_control; //LED控制输入
always @(posedge clk)
begin
if(rst==0) counter<=26'd0; //复位时计数器清零
else if(counter<26'd499_9999) counter<=counter+1'd1; //计数器小于4999999时加1
else counter<=26'd0; //计数器大于等于4999999时清零
end
always @(posedge clk)
begin
if(rst==0) led_control<=4'b0000; //复位时LED控制输入清零
else if(counter==26'd499_9999) led_control<=led_control+1'b1; //计数器等于4999999时LED控制输入加1
else led_control<=led_control; //否则LED控制输入不变
end
ledshow u1 (.key(key),.led_control(led_control),.led(led)); //调用ledshow模块进行LED输出控制
endmodul
原文地址: http://www.cveoy.top/t/topic/hplP 著作权归作者所有。请勿转载和采集!