LED作业全集:(1)全亮全灭 (2)左右向流水灯 (3)左右向跑马灯 (4)中间、两边流水。
视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_AD132EF5DA99333D_false_EEA982EE6B20F4D1_1/player.swf
代码如下:
module led1(clk,rst,led);
input clk;
input rst;
output led;
reg [7:0] led;
reg [31:0] count;
reg [2:0] state;
reg [2:0] cnt;
reg [3:0] led_h,led_l;
always @(posedge clk or negedge rst)
begin
if(!rst)
count<=32'd0;
else
begin
if(count==32'd29999999)
count<=32'd0;
else
count<=count+1'b1;
end
end
always @ (posedge clk or negedge rst)
begin
if(!rst)
begin
led<=8'b11111111;
state<=3'd0;
led_h=4'd1111;
led_l=4'd1111;
cnt<=3'd0;
end
else
begin
if(count==32'd29999999)
begin
case(state)
3'd0:
begin
if(cnt<3'd4)
begin
led<=~led; // 亮灭间断
cnt<= cnt + 1'b1;
end
else
begin
cnt<=3'd0;
led<=8'b11111111;
state<= state + 1'b1;
end
end
3'd1:
begin
led <= led>>1; //led left move
if(led == 8'b00000000)
begin
state<= state + 1'b1;
led<=8'b11111111;
end
end
3'd2:
begin
led<= led << 1; //led right move
if(led == 8'b0000000)
begin
state<= state + 1'b1;
led<=8'b11111110;
end
end
3'd3:
begin
led<={led[6:0],led[7]}; // right pao
if(led == 8'b01111111)
begin
state<= state + 1'b1;
led <= 8'b01111111;
end
end
3'd4:
begin
led<={led[0],led[7:1]}; // left pao
if(led == 8'b11111110)
begin
state<= state + 1'b1;
led_h<=4'b1111;
led_l<=4'b1111;
led<=8'b11111111;
end
end
3'd5:
begin
led_h<=led_h<<1;
led_l<=led_l>>1;
led<={led_h,led_l};
if(led == 8'b00000000)
begin
state<= state + 1'b1;
led_h<=4'b1111;
led_l<=4'b1111;
led<=8'b11111111;
end
end
3'd6:
begin
led_h<=led_h>>1;
led_l<=led_l<<1;
led<={led_h,led_l};
if(led == 8'b00000000)
begin
state<= state + 1'b1;
led<=8'b11111111;
end
end
default: state<= 3'd0;
endcase
end
end
end
endmodule