两个独立按钮控制流水灯的左移右移,此程序下载以后,必须得用手一直按着按钮才能完成左移右移,改成肿么样才能使它维持按下去那个状态不变呢
时间:10-02
整理:3721RD
点击:
module LIUSHUIDENG
( input CLK50M,
output reg [7:0] LED,
input [1:0] KEY
);
integer cnt;
reg CLK1HZ;
reg [7:0]cnt_led;
always@ (posedge CLK50M)
begin
if(cnt==25000000)
begin
CLK1HZ=~CLK1HZ;
cnt<=0;
end
else
cnt<=cnt+1;
end
always@ (posedge CLK1HZ)
begin
if(cnt_led==7)
cnt_led<=0;
else
cnt_led=cnt_led+1;
end
always@(posedge CLK1HZ)
case(KEY)
2'b10:
begin
case(cnt_led)
0:LED=8'b00000001;
1:LED=8'b00000010;
2:LED=8'b00000100;
3:LED=8'b00001000;
4:LED=8'b00010000;
5:LED=8'b00100000;
6:LED=8'b01000000;
7:LED=8'b10000000;
default:LED=8'b00000000;
endcase
end
2'b01:
begin
case(cnt_led)
0:LED=8'b10000000;
1:LED=8'b01000000;
2:LED=8'b00100000;
3:LED=8'b00010000;
4:LED=8'b00001000;
5:LED=8'b00000100;
6:LED=8'b00000010;
7:LED=8'b00000001;
default:LED=8'b00000000;
endcase
end
endcase
endmodule
( input CLK50M,
output reg [7:0] LED,
input [1:0] KEY
);
integer cnt;
reg CLK1HZ;
reg [7:0]cnt_led;
always@ (posedge CLK50M)
begin
if(cnt==25000000)
begin
CLK1HZ=~CLK1HZ;
cnt<=0;
end
else
cnt<=cnt+1;
end
always@ (posedge CLK1HZ)
begin
if(cnt_led==7)
cnt_led<=0;
else
cnt_led=cnt_led+1;
end
always@(posedge CLK1HZ)
case(KEY)
2'b10:
begin
case(cnt_led)
0:LED=8'b00000001;
1:LED=8'b00000010;
2:LED=8'b00000100;
3:LED=8'b00001000;
4:LED=8'b00010000;
5:LED=8'b00100000;
6:LED=8'b01000000;
7:LED=8'b10000000;
default:LED=8'b00000000;
endcase
end
2'b01:
begin
case(cnt_led)
0:LED=8'b10000000;
1:LED=8'b01000000;
2:LED=8'b00100000;
3:LED=8'b00010000;
4:LED=8'b00001000;
5:LED=8'b00000100;
6:LED=8'b00000010;
7:LED=8'b00000001;
default:LED=8'b00000000;
endcase
end
endcase
endmodule
你应该再设一个中间变量,用一个按键改变这个变量的值,再用case根据这个变量的值来实现这个功能即可,我大致看了一下你的代码,发现如果按键没有被按下,默认全为0,如果按键状态为10,则流水灯右移,如果状态为01,则灯左移,而且按键必须一直按着才行。
已经改了好几天了,一点头绪都没有,最主要的事,老师教的时候根本没有提过开关~
学习一下 经验 期待小编搞好后能够分享一下
沙发说的对!我再补充那个一点:按钮检测里要加一行检测按钮释放后再执行亮灯。
老师上课没有讲过开关这方面如何写,能告诉我格式吗?
请问,该如何填改?我刚学,老师没有讲过开关这方面的处理,谢谢啦~我改了好几遍怎么改都不行
怎么说呢,是你的程序架构的问题。你在这个架构上改是不可能的。需要你另外写程序架构的。