日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA按键防抖

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA按键防抖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • basys3按鍵電路
      • 按鍵消抖
      • 軟件消抖原理
      • 軟件消抖代碼
      • 仿真結果

basys3按鍵電路

按鍵消抖

按鍵消抖通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產生這種現象而作的措施就是按鍵消抖。在處理按鍵抖動的程序中,必須同時考慮消除閉合和斷開兩種情況下的抖動。所以,對于按鍵消抖的處理,必須按最差的情況來考慮。機械式按鍵的抖動次數、抖動時間、抖動波形都是隨機的。不同類型的按鍵其最長抖動時間也有差別,抖動時間的長短和按鍵的機械特性有關,按鍵輸出的信號的跳變時間(上升沿和下降沿)最大是在20ms左右。在代碼中,設置的也是20ms抖動時間。也即在20ms后才判斷為跳變時間點。----百度百科

軟件消抖原理

一句話只有持續時間夠長的按鍵信號才有效

軟件消抖代碼

/*******按鍵消抖*******/ module key_vibration(input Clk,input rst_n,input [3:0] key,output reg [3:0] key_en);parameter DURATION = 500000; //延時10ms reg [19:0] cnt; //按下計數器reg [19:0] cnto;//未按計數器wire ken_enable;assign ken_enable = (key[3] | key[2] | key[1] | key[0]); //任意按鍵被按下assign key_float = ~(key[3] & key[2] & key[1] & key[0]);//按鍵沒被按下always @(posedge Clk or posedge rst_n)beginif(rst_n)beginkey_en <= 4'b0;cnt <= 20'd0;cnto <= 20'd0;endelse if(ken_enable) begin//計數開始cnto <= 20'd0;//抬起計數器清零if(cnt == DURATION-1)begin cnt <= cnt;if (key[3] | key[2] | key[1] | key[0]) beginkey_en<=key;cnt<=20'd0;endendelse cnt <= cnt + 1'b1;endelse if(key_float) begin//計數開始cnt <= 20'd0;//按下計數器清零if(cnto == DURATION-1)begincnto <= cnto;if(~(key[3] & key[2] & key[1] & key[0]))begin key_en <= key;cnto<=20'd0;endendelse cnto <= cnto + 1'b1;endelsebegincnt <= 20'd0;cnto <= 20'd0;endend endmodule

仿真結果

總結

以上是生活随笔為你收集整理的FPGA按键防抖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。