FPGA學習筆記(二) 按鍵LED

2021-10-07 00:16:39 字數 2718 閱讀 999

無按鍵按下時, 全滅;

按鍵1按下時, 自右向左的流水效果;

按鍵2按下時, 自左向右的流水效果;

按鍵3按下時,閃爍;

按鍵4按下時, 全亮;

//-------------------------------------

// file name: my_key_led

// last modified date: 2020/6/10 22:30

// last version: v1.1

// descriptions: 按鍵控制led

// 無按鍵 全滅

// key0 右-左流水燈

// key1 左-右流水燈

// key2 全閃爍

// key3 全亮

//-------------------------------------

// led流水燈引腳分配,高電平點亮

// led0 d11

// led1 c11

// led2 e10

// led3 f9

// sys_clk e1

// sys_rst_n m1

// key0 e16

// key1 e15

// key2 m2

// key3 m16

//-------------------------------------

//*************************************//

module my_key_led

(input sys_clk, //系統時鐘50mhz

input sys_rst_n, //復位,低電平有效

input [3:0] key, //4個key

output reg [3:0] led //4個led燈

);//reg define

reg [23:0] counter ; //定時200ms,需要24位。

reg [1:0] led_ctrl ; //led_ctrl led控制

//計數器對系統時鐘計數,計時0.2秒。0.2s/20ns=1000_0000(d)

always @(posedge sys_clk or negedge sys_rst_n) //時鐘上公升沿,復位下降沿

begin

if (!sys_rst_n) //如果復位

counter <=24'd0; //計數器清0,重新開始計時

else //if巢狀

if (counter<24'd1000_0000) //沒有計時到0.2s

counter<=counter+1'b1; //計數器加1

else

counter<=24'd0; //到0.2s,計數器清0

end//狀態計數器[1;0] 兩位二進位制,用於選擇led燈四個狀態

always @(posedge sys_clk or negedge sys_rst_n)

begin

if(!sys_rst_n)

led_ctrl<=2'd0;

else

if(counter==24'd1000_0000)

led_ctrl<=led_ctrl+1'b1;

else

led_ctrl<=led_ctrl;

end//按鍵改變led狀態

always @(posedge sys_clk or negedge sys_rst_n)

begin

if(!sys_rst_n)

led<=4'b0000;

else

if(key[0]==1'b0) //右-左流水燈

case(led_ctrl)

2'd0: led<=4'b1000;

2'd1: led<=4'b0100;

2'd2: led<=4'b0010;

2'd3: led<=4'b0001;

endcase

else if(key[1]==1'b0) //左-右流水燈

case(led_ctrl)

2'd0: led<=4'b0001;

2'd1: led<=4'b0010;

2'd2: led<=4'b0100;

2'd3: led<=4'b1000;

endcase

else if(key[2]==1'b0) //全閃爍

case(led_ctrl)

2'd0: led<=4'b0000;

2'd1: led<=4'b1111;

2'd2: led<=4'b0000;

2'd3: led<=4'b1111;

endcase

else if(key[3]==1'b0) //全亮

led<=4'b1111;

else

led<=4'b0000; //無按鍵按下時, led熄滅

endendmodule

FPGA學習筆記 正點原子FPGA按鍵消抖筆記

出自正點原子 開拓者fpga開發指南v1.3 第九章按鍵控制蜂鳴器實驗 暫存器 key flag 按鍵資料有效訊號 暫存器 key value 按鍵消抖後的資料 暫存器 delay cnt 延時計數 系統時鐘 50mhz 思路 一直檢測按鍵狀態,一旦按鍵狀態發現變化,給delay cnt計數器賦初值...

stm32學習筆記之按鍵驅動Led

由於實驗與按鍵有關,既然有按鍵,那就必須要解釋下按鍵消抖。原理 讀取按鍵電平 按下為1,鬆開為0 當讀到1的時候 按鍵好像被按下了 那麼我們延時10ms再讀 若按鍵讀到為1 說明按鍵真的被按下了 執行操作 若按鍵讀到為0 說明這只是一次機械抖動,咱們不用理他!基於按鍵消抖原理編的按鍵掃瞄函式 int...

基於FPGA的按鍵控制LED的迴圈左移一位

今天早上開工,將按鍵控制led的迴圈左移一位,這一功能實現了一把,這是乙個基礎功能,我想要的最終實現方式是 狀態機fsm 高階版本是 狀態機通過按鍵控制其條件的轉變,實現多個功能的輪流展示 1 按鍵消抖有幾種方法呢?兩種2 哪兩種呢?硬體方法 軟體方法 3 軟體方法如何實現呢?避過按鍵的抖動時間 4...