FPGA學習記錄 按鍵控制流水燈實驗

2021-09-07 19:20:20 字數 2829 閱讀 8184

今天繼續昨天的流水燈實驗,不過今天嘗試加入按鍵來進行控制,通過按鍵來控制led的顯示效果。

此次實驗中我將使用芯路恆ac620開發板進行實驗,通過開發板上的兩個按鍵來控制4個led燈。不同按鍵按下時,led燈顯示不同的效果。

圖 2.1  按鍵電路原理圖

如圖所示,當按鍵未按下時,輸出高電平,按鍵按下時,輸出低電平。本次實驗用到的管腳分配如下表所示:

埠名稱i/0功能描述

對應管腳

clk50m

input

模組的工作時鐘,頻率為50mhz

pin_e1

rst_n

input

模組復位,低電平復位

pin_e16

led[0]

output

低電平時led亮

pin_a2

led[1]

output

低電平時led亮

pin_b3

led[2]

output

低電平時led亮

pin_a4

led[3]

output

低電平時led亮

pin_a3

key[0]

input

按鍵輸入

pin_m16

key[1]

input

按鍵輸入

pin_e15

圖2.2 按鍵控制led實驗管腳分配圖

在本次實驗中,最終的實驗結果是:1、當無按鍵按下時,4個led燈全部點亮;2、按鍵key0按下時,led燈顯示從左至右的流水效果;3、按鍵key1按下時,led燈顯示從右至左的流水效果。led燈流水效果時間間隔均為0.5s,因此同上乙個實驗一樣,需要先定義乙個0.5s的計數器,也要定義乙個狀態計數器。根據當前按鍵的狀態來選擇不同的led燈顯示效果,不同顯示模式下led燈的亮滅隨狀態計數器的改變而改變。下圖為本次實驗的系統框圖:

圖3.1 系統框圖

按鍵控制led燈模組**如下:

module counter(

input clk50m, //系統時鐘

input rst_n, //全域性復位 低電平復位

input [1:0] key, //按鍵輸入訊號

output reg [3:0] led //led 輸出

); reg [24:0]cnt;//定義25位暫存器

reg [1:0]led_control;//定義led控制狀態方式

//計數器計數程序

always@(posedge clk50m or negedge rst_n)//對一組反覆執行的活動進行建模

if(rst_n == 1'b0)

cnt <= 25'b0;

else if(cnt == 25'd24_999_999)

cnt <= 25'b0;

else

cnt <= cnt + 1'b1;

//led燈狀態的選擇

always@(posedge clk50m or negedge rst_n) begin

if(!rst_n)

led_control <= 2'b00;

else if(cnt == 25'd24_999_999)

led_control = led_control + 1'b1;

else

led_control <= led_control;

end//識別按鍵,切換顯示模式

always@(posedge clk50m or negedge rst_n) begin

if(!rst_n) begin

led <= 4'b0000;

endelse if(key[0] == 0) //從左至右流水顯示

case (led_control)

2'b00 :led <= 4'b0111;

2'b01 :led <= 4'b1011;

2'b10 :led <= 4'b1101;

2'b11 :led <= 4'b1110;

default:led <= 4'b1111;

endcase

else if(key[1] == 0) //從右至左流水顯示

case (led_control)

2'b00 :led <= 4'b1110;

2'b01 :led <= 4'b1101;

2'b10 :led <= 4'b1011;

2'b11 :led <= 4'b0111;

default:led <= 4'b1111;

endcase

else //無按鍵按下時,led燈全亮

led <= 4'b0000;

end

endmodule

**分析:**主要分為三大部分,首先採用計數器對系統時鐘計數,當計數時間達0.5s時,計數器清零,同時使led_control在四個狀態(00,01,10,11)內依次變化。接著利用case語句實現對按鍵狀態的檢測,當不同的按鍵按下時,led隨著led_control的變化,被賦予不同的值。 啦啦啦。。。又完成了乙個小實驗,我將一直將fpga這個系列的部落格更新下去,讓它成為我學習fpga的乙個記錄。

單個按鍵控制多種流水燈狀態

更新乙個單個按鍵控制多種流水燈狀態的教程,希望能幫助到大家 所需元器件如下 stc89c52rc晶元 1 10k電阻 2 100 電阻 8 10uf 電解電容 1 22pf 瓷片電容 2 12mhz晶振 1 按鍵 2 led燈 8 include reg52.h define uchar unsig...

STM32F103 按鍵控制流水燈方向

stm32庫標頭檔案 include stm32f10x gpio.h include stm32f10x rcc.h include stm32f10x.h include core cm3.h include misc.h gpio口的設定,還有巨集的定義 define led0 gpio pi...

按鍵控制LED流水燈模式 定時器時鐘

include void timer0 init void main unsigned int t0count void timer0 routinr interrupt 1 鬧鐘響之後跳轉到該子函式,執行中斷任務段 中斷子程式 中斷服務程式 中斷初始化之後進入主函式,之後先執行最下邊子函式,然後再...