一、實驗任務
使用開發(fā)板上的四個按鍵控制四個LED燈。按下不同的按鍵時,四個LED燈顯示不同效果。本實驗是在EP4CE6F17C8開發(fā)板上實現(xiàn),仿真請用modelsim Altera
二、系統(tǒng)框圖
三、代碼實現(xiàn)
module key_led (
input clk, //時鐘周期
input rst_n, //復位信號
input [3:0] key , //4個按鍵,提供4個位寬
output reg [3:0] key_led //4個led燈,提供4個位寬
);
reg [1:0] state; //兩位寬的狀態(tài)寄存器,存儲4個狀態(tài)
reg [25:0] cnt_1s; //存儲1s的寄存器
parameter MAX_1s = 26'd49_999_999;//1s的時鐘周期
//1s計數(shù)器
always @(negedge rst_n or posedge clk) begin
if (!rst_n) begin
cnt_1s <= 26'd0;
end
else if (cnt_1s == MAX_1s) begin
cnt_1s <= 26'd0;
end
else begin
cnt_1s <= cnt_1s + 26'd1;
end
end
//狀態(tài)每隔1s進行跳轉(zhuǎn)
always @(negedge rst_n or posedge clk) begin
if (!rst_n) begin
state <= 2'd0;
end
else if (cnt_1s == MAX_1s) begin //每隔1s進入下一個狀態(tài)
state <= state + 2'd1;
end
else begin
state <= state;
end
end
//不同按鍵不同led燈閃爍方式
always @(negedge rst_n or posedge clk) begin
if (!rst_n) begin
key_led <= 4'b0000;
end
else if (key[0] == 0) begin //key0鍵按下,從右往左流水燈
case (state)
2'd0: key_led <= 4'b0001;
2'd1: key_led <= 4'b0010;
2'd2: key_led <= 4'b0100;
2'd3: key_led <= 4'b1000;
default: key_led <= key_led ;
endcase
end
else if (key[1] == 0) begin //key1鍵按下,從左往右流水燈
case (state)
2'd0: key_led <= 4'b1000;
2'd1: key_led <= 4'b0100;
2'd2: key_led <= 4'b0010;
2'd3: key_led <= 4'b0001;
default: key_led <= key_led ;
endcase
end
else if (key[2] == 0) begin //key2鍵按下,led燈閃爍
case (state)
2'd0: key_led <= 4'b1111;
2'd1: key_led <= 4'b0000;
2'd2: key_led <= 4'b1111;
2'd3: key_led <= 4'b0000;
default: key_led <= key_led ;
endcase
end
else if (key[3] == 0) begin //key3鍵按下,燈常亮
case (state)
2'd0: key_led <= 4'b1111;
2'd1: key_led <= 4'b1111;
2'd2: key_led <= 4'b1111;
2'd3: key_led <= 4'b1111;
default: key_led <= key_led ;
endcase
end
else begin
state <= state;
end
end
endmodule
仿真代碼:
`timescale 1ns/1ns
module key_led_tb (
);
reg clk;
reg rst_n;
reg [3:0] key;
wire [3:0] key_led;
parameter MAX_1s = 9;
parameter CYCLE = 20;
always #(CYCLE/2) clk <= ~clk;
initial begin
clk = 1'b0;
rst_n = 1'b0;
#(CYCLE);
rst_n = 1'b1;
key = 4'b1111;
#(4*(MAX_1s + 1)*CYCLE); //4個state的時間
key = 4'b1110;
#(4*(MAX_1s + 1)*CYCLE);
key = 4'b1101;
#(4*(MAX_1s + 1)*CYCLE);
key = 4'b1011;
#(4*(MAX_1s + 1)*CYCLE);
key = 4'b0111;
$stop;
end
key_led #(.MAX_1s(MAX_1s))u_key_led(
.clk(clk),
.rst_n(rst_n),
.key(key),
.key_led(key_led)
);
endmodule
四、引腳分配
文章來源:http://www.zghlxwxcb.cn/news/detail-737855.html
五、總結(jié)
注意:該實驗并未進行按鍵消抖,需一直按著按鍵才能讓該按鍵所操控的led變化功能實現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-737855.html
到了這里,關(guān)于四個按鍵控制led的四種變化(按鍵控制led)(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!