色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何設(shè)計(jì)一個(gè)實(shí)用的按鍵模塊

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-09-05 09:19 ? 次閱讀

一.簡(jiǎn)介

這是FPGA之旅的第二個(gè)設(shè)計(jì)實(shí)例了,按鍵在項(xiàng)目中的作用是非常大的,使用的很頻繁,本例將帶大家設(shè)計(jì)一個(gè)實(shí)用的按鍵模塊。

二. 按鍵電路

按鍵為輸入設(shè)備,通過電路圖可以知道,當(dāng)按鍵按下的時(shí)候,F(xiàn)PGA會(huì)檢測(cè)到低電平,按鍵沒有按下的時(shí)候,F(xiàn)PGA檢測(cè)到的是高電平。

e32b1824-2cad-11ed-ba43-dac502259ad0.png

三. Verilog代碼編寫

直接來一段最簡(jiǎn)單的按鍵檢測(cè)的代碼編寫,都不用仿真。

按鍵按下,LED燈狀態(tài)取反。

module KEY(  input    clk,    input    rst_n,    input    key,    output  reg  led);    always@(posedge clk or negedge rst_n)    begin        if(rst_n == 1'b0)             led <= 1'b0;        else if(key == 1'b0)            led <= ~led;        else            led <= led;    endendmodule 

當(dāng)按鍵按下后,LED的狀態(tài)取反,這個(gè)在仿真的時(shí)候是可以看到變化的,但是實(shí)際上板測(cè)試的話,是沒有效果的,因?yàn)閏lk的時(shí)鐘周期一般為20ns,每次按鍵按下的持續(xù)時(shí)間可以達(dá)到ms以上,所以LED會(huì)多次取反,所以這么簡(jiǎn)單粗暴是不可以的,需要我們做一些額外處理。此外在按鍵按下的瞬間,電平會(huì)出現(xiàn)不穩(wěn)定的情況,也需要進(jìn)行處理。解決這些問題,正是這個(gè)例程的重點(diǎn)。

四. 解決方案設(shè)計(jì)

按鍵按下的時(shí)候,一共有兩個(gè)問題

電平不穩(wěn)定

短時(shí)間內(nèi)重復(fù)檢測(cè)

第一個(gè)問題可以通過按鍵消抖來解決,第二個(gè)問題,可以在按鍵消抖的基礎(chǔ)上,增加一些判斷來解決,于是就有了以下三種模式

模式一,按下生效,釋放,算一次

模式二,按下,釋放生效,算一次

模式三,按下,一段時(shí)間算一次

這里通過狀態(tài)機(jī)的方式來實(shí)現(xiàn),第一步就是要分析一共有幾個(gè)狀態(tài)。

空閑態(tài):按鍵沒有按下時(shí),所處的狀態(tài)。

消抖態(tài): 按鍵按下后,進(jìn)入消抖態(tài),在此期間,如果按鍵釋放了的話,回到空閑態(tài),否則進(jìn)入延時(shí)態(tài)。

延時(shí)態(tài):延時(shí),直到按鍵釋放。

釋放態(tài):按鍵釋放,回歸到空閑態(tài)。

模式一,可以在消抖態(tài)完成后,生效。

模式二,可以在釋放態(tài),生效。

模式三,可以在延時(shí)態(tài),生效。

完美,這不就全部都解決了嘛! 代碼如下。

//按鍵消抖module btn_dis_shake(        input      clk,  input      rst_n,    input      ikey,        //按鍵輸入outputokey//按鍵輸出);//模式//0   按下生效,抬起,算一次//1   按下抬起,算一次//2  按下后,一段時(shí)間算一次parameter      mode = 2;
localparam      S_IDLE    =    'd0;localparam      S_DIS_SHAKE =       'd1;localparam      S_DEALY    =    'd2;localparam      S_UP    =    'd3;
localparam      DIS_SHAKE  =  'd6000;    //消抖延時(shí)localparam      DELAY    =  'd50000;  //模式2中,一段時(shí)間
reg[3:0] state  ,  next_state;
wire neg_key,pos_key;  //按鍵下降沿上升沿reg   key0,key1;      //按鍵狀態(tài)儲(chǔ)存
reg[30:0]  delay_cnt;
assign    neg_key =  key1 & (~key0);    //判斷按鍵信號(hào)的下降沿assignpos_key=(~key1)&key0;//判斷按鍵信號(hào)的上升沿//根據(jù)模式來判斷按鍵輸出assignokey=(mode==0&&state==S_DIS_SHAKE&&delay_cnt==DIS_SHAKE)?1'b1:(mode==1&&state==S_UP)?1'b1:(mode==2&&state==S_DEALY&&delay_cnt==DELAY)?1'b1:1'b0;always@(posedge clk or negedge rst_n)begin  if(rst_n  == 1'b0)  begin      key0 <= 1'b1;      key1 <= 1'b1;  end  else  begin    key0 <= ikey;    key1 <= key0;  endendalways@(posedge clk or negedge rst_n)begin  if(rst_n == 1'b0)    state <= S_IDLE;  else    state <= next_state;end
always@(*)begin  case(state)    S_IDLE:      if(neg_key  ==  1'b1)        next_state <= S_DIS_SHAKE;      else        next_state <= S_IDLE;    S_DIS_SHAKE:      //按下消抖        if(delay_cnt == DIS_SHAKE)          next_state <= S_DEALY;        else if(pos_key == 1'b1)          next_state <= S_IDLE;        else          next_state <= S_DIS_SHAKE;    S_DEALY:      //延時(shí)      if(delay_cnt == DELAY  && pos_key == 1'b1)        next_state <= S_UP;      else if( pos_key == 1'b1)        next_state <= S_UP;      else        next_state <= S_DEALY;    S_UP:      next_state <= S_IDLE;    default:  next_state <= S_IDLE;  endcaseend
//延時(shí)計(jì)數(shù)always@(posedge clk or negedge rst_n)begin  if(rst_n == 1'b0)    delay_cnt <= 'd0;  else if(state != next_state)    delay_cnt  <= 'd0;  else if(state == S_DIS_SHAKE)    delay_cnt <= delay_cnt + 1'b1;  else if(state == S_DEALY && delay_cnt == DELAY)    delay_cnt <= 'd0;  else if(state == S_DEALY)    delay_cnt <= delay_cnt + 1'b1;  else    delay_cnt <= 'd0;end
endmodule 

代碼是寫完了,對(duì)不對(duì)呢 ? 上仿真?。?!仿真的時(shí)候別忘記了將DIS_SHAKE這個(gè)參數(shù)調(diào)小一點(diǎn)了,可以設(shè)置為2就可以了,否則,你可以試試哦,就只對(duì)模式一進(jìn)行仿真,其他的模式,也可以自行嘗試喔!

`timescale  1ns/1psmodule testbeach();
    reg clk;    reg rst_n;    reg ikey;    wire okey;      always#50clk<=?~clk;?????initial?begin       clk = 1'b0;       rst_n = 1'b1;       ikey = 1'b1;                #100        rst_n = 1'b0;        #100        rst_n = 1'b1;                ikey = 1'b0;  //按下        #400        ikey = 1'b1;  //釋放        #200        ikey = 1'b0;  //按下        #600????????ikey?=?1'b1;??//釋放    end
btn_dis_shake #(.mode(0))btn_dis_shakeHP(          .clk    (clk),    .rst_n  (rst_n),      .ikey    (ikey),        //按鍵輸入    .okey  (okey)      //按鍵輸出);    endmodule

當(dāng)當(dāng)當(dāng)當(dāng)?。。⊥昝缹?duì)應(yīng)起來,測(cè)試通過!

e335a618-2cad-11ed-ba43-dac502259ad0.png 

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21759

    瀏覽量

    604291
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2721

    瀏覽量

    47566
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

    108112
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4802

    瀏覽量

    68743

原文標(biāo)題:FPGA實(shí)現(xiàn)按鍵模塊

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何設(shè)計(jì)個(gè)對(duì)按鍵信號(hào)進(jìn)行計(jì)數(shù)的計(jì)數(shù)器?

    detect_module模塊用于檢測(cè)按鍵信號(hào)的下降沿,當(dāng)檢測(cè)到下降沿后,輸出個(gè)時(shí)鐘周期的高電平。
    的頭像 發(fā)表于 10-10 14:27 ?1781次閱讀
    如何設(shè)計(jì)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>對(duì)<b class='flag-5'>按鍵</b>信號(hào)進(jìn)行計(jì)數(shù)的計(jì)數(shù)器?

    個(gè)按鍵控制另一個(gè)按鍵

    大家好,我想問個(gè)問題,我想用個(gè)按鍵和另一個(gè)按鍵結(jié)
    發(fā)表于 03-04 00:58

    介紹個(gè)事件驅(qū)動(dòng)型按鍵驅(qū)動(dòng)模塊MultiButton

    MultiButton MultiButton,個(gè)小巧簡(jiǎn)單易用的事件驅(qū)動(dòng)型按鍵驅(qū)動(dòng)模塊,作者 0x1abin,目前收獲 222 個(gè)star
    發(fā)表于 01-10 07:28

    如何制作個(gè)單片機(jī)獨(dú)立按鍵掃描的模塊

    如何制作個(gè)單片機(jī)獨(dú)立按鍵掃描的模塊
    發(fā)表于 02-17 06:38

    【BPI-Pico-RP2040 開發(fā)板】+GPIO口的使用

    觀察效果,這里為引腳13接上一個(gè)外掛的LED模塊,并通過導(dǎo)線將引腳2接地來模擬按鍵按下的效果。經(jīng)程序的下載,其運(yùn)行效果如圖2所示,若斷開引腳2的連線,則LED燈熄滅,說明程序設(shè)計(jì)正確。圖2 點(diǎn)亮LED
    發(fā)表于 03-20 11:00

    標(biāo)記的用法,用個(gè)按鍵控制1個(gè)LED燈的亮滅,按鍵去抖

    標(biāo)記的用法,用個(gè)按鍵控制1個(gè)LED燈的亮滅,按鍵去抖 這課,我們學(xué)習(xí)怎么用
    發(fā)表于 08-09 10:39 ?2.4w次閱讀
    標(biāo)記的用法,用<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>按鍵</b>控制1<b class='flag-5'>個(gè)</b>LED燈的亮滅,<b class='flag-5'>按鍵</b>去抖

    使用51單片機(jī)和nRF24L01無線模塊用4個(gè)不同的按鍵控制點(diǎn)亮4個(gè)不同的燈

    哈哈,窮吊死個(gè),自己做的個(gè)超簡(jiǎn)單的板還沒有電源提供,只得借助我的大開發(fā)板啦。其實(shí)這2個(gè)模塊
    發(fā)表于 06-06 17:51 ?5次下載
    使用51單片機(jī)和nRF24L01無線<b class='flag-5'>模塊</b>用4<b class='flag-5'>個(gè)</b>不同的<b class='flag-5'>按鍵</b>控制點(diǎn)亮4<b class='flag-5'>個(gè)</b>不同的燈

    微雪電子8個(gè)獨(dú)立按鍵模塊按鈕簡(jiǎn)介

    8個(gè)獨(dú)立按鍵模塊 8位按鍵 可用作輸入 或進(jìn)行I/O測(cè)試 提供測(cè)試程序(AVR、STM8、STM32) 型號(hào) 8 Push Buttons
    的頭像 發(fā)表于 12-30 09:13 ?2470次閱讀
    微雪電子8<b class='flag-5'>個(gè)</b>獨(dú)立<b class='flag-5'>按鍵</b><b class='flag-5'>模塊</b>按鈕簡(jiǎn)介

    微雪電子5 IO 按鍵模塊 小鍵盤介紹

    5 IO 按鍵模塊 - 10個(gè)按鍵 1個(gè)搖桿 10個(gè)按鍵
    的頭像 發(fā)表于 12-30 09:12 ?1316次閱讀
    微雪電子5 IO <b class='flag-5'>按鍵</b><b class='flag-5'>模塊</b> 小鍵盤介紹

    微雪電子AD按鍵模塊簡(jiǎn)介

    AD按鍵模塊 16個(gè)按鍵 僅占用1個(gè)AD口 檢測(cè)接口(被接入方需具備AD檢測(cè)功能)提供測(cè)試程序(STM32) 型號(hào) AD Key
    的頭像 發(fā)表于 12-30 09:28 ?1876次閱讀
    微雪電子AD<b class='flag-5'>按鍵</b><b class='flag-5'>模塊</b>簡(jiǎn)介

    微雪電子電容觸摸 按鍵模塊簡(jiǎn)介

    電容按鍵模塊 I2C 或 I/O接口 8個(gè)按鍵 1個(gè)滑條 取代傳統(tǒng)按鈕 電容式觸摸按鍵
    的頭像 發(fā)表于 12-30 09:36 ?2285次閱讀
    微雪電子電容觸摸 <b class='flag-5'>按鍵</b><b class='flag-5'>模塊</b>簡(jiǎn)介

    dfrobotADkey 按鍵模塊介紹

    ADKey 鍵盤模塊讓你使用1路模擬口即可讀取5個(gè)按鍵的狀態(tài),為Arduino節(jié)約IO口。
    的頭像 發(fā)表于 11-29 16:40 ?3476次閱讀
    dfrobotADkey <b class='flag-5'>按鍵</b><b class='flag-5'>模塊</b>介紹

    單片機(jī)獨(dú)立按鍵模塊(含短按,長按,連發(fā)功能)

    最近看了很多按鍵掃描的文章,發(fā)現(xiàn)各有長處,后來自己花了點(diǎn)時(shí)間做了個(gè)單片機(jī)獨(dú)立按鍵掃描的模塊,
    發(fā)表于 12-22 19:46 ?23次下載
    單片機(jī)獨(dú)立<b class='flag-5'>按鍵</b><b class='flag-5'>模塊</b>(含短按,長按,連發(fā)功能)

    stm32單片機(jī)如何實(shí)現(xiàn)個(gè)按鍵切換兩個(gè)程序?

    ,非常實(shí)用。下面,我們將詳細(xì)介紹如何在STM32單片機(jī)上實(shí)現(xiàn)個(gè)按鍵切換兩個(gè)程序。 、 STM32單片機(jī)
    的頭像 發(fā)表于 09-14 14:22 ?6212次閱讀

    個(gè)應(yīng)用于單片機(jī)的按鍵處理模塊!

    個(gè)應(yīng)用于單片機(jī)的按鍵處理模塊!
    的頭像 發(fā)表于 10-24 16:28 ?751次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>應(yīng)用于單片機(jī)的<b class='flag-5'>按鍵</b>處理<b class='flag-5'>模塊</b>!
    主站蜘蛛池模板: 日本免费xxx| 亚洲成人欧美| 午夜dj免费中文字幕| 长泽梓黑人初解禁bdd07| 芳草地在线观看免费观看| 精品国产在线观看福利| 日韩 国产 中文 无码| 再插深点嗯好大好爽| 国产精品三级在线观看 | 果冻传媒2021一二三在线观看| 免费在线视频成人| 亚洲精品一线二线三线无人区| 成人毛片免费在线观看| 鲁一鲁亚洲无线码| 亚洲精品久久久久AV无码林星阑 | 国产午夜精品一区理论片飘花 | 麻豆高清区在线| 男生插女生下体| 人人超碰97caoporen国产| 一手揉着乳头一手模仿抽插视频| 国产 浪潮AV性色四虎| 男人免费网站| 优优色影院| 国产亚洲精品久久久久| 色噜噜视频影院| av色天堂2018在线观看| 国产精品久久久久久免费字体| 欧美白人战黑吊| 中文字AV字幕在线观看| 国产一卡2卡3卡4卡孕妇网站| 日本亚洲电影| A片毛片免费视频在线看| 久久婷婷五月综合色精品首页| 亚洲高清毛片一区二区| 国产精品97久久AV色婷婷| 日本久久久| YELLOW视频在线观看最新| 嫩草影院一区| 最近中文字幕高清中文字幕MV| 久久大香萑太香蕉av| 色婷婷狠狠97成为人免费|