<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 非同于MCU的獨立按鍵消抖動

          非同于MCU的獨立按鍵消抖動

          作者: 時間:2012-03-08 來源:網(wǎng)絡(luò) 收藏

          reg key_flag_r;

          reg [KEY_WIDTH-1:0] key_data_r;

          always@(posedge clk or negedge rst_n)

          begin

          if(!rst_n)

          begin

          key_flag_r = 1'b0;

          key_value = {KEY_WIDTH{1'b0}};

          end

          else if(cnt == 20'd249999) //Delay_5ms

          begin

          case(state)

          0:

          begin

          if(key_data != {KEY_WIDTH{1'b1}})

          state = 1;

          else

          state = 0;

          end

          1:

          begin

          if(key_data != {KEY_WIDTH{1'b1}})

          state = 2;

          else

          state = 0;

          end

          2:

          begin

          key_flag_r = 1'b1;

          key_value = key_data; //lock the key_value

          state = 3;

          end

          3:

          begin

          key_flag_r = 1'b0; //read the key_value

          if(key_data == {KEY_WIDTH{1'b1}})

          state = 4;

          else

          state = 3;

          end

          4:

          begin

          if(key_data == {KEY_WIDTH{1'b1}})

          state = 0;

          else

          state = 4;

          end

          endcase

          end

          end

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

          //Capture the falling endge of the key_flag

          reg key_flag_r0,key_flag_r1;

          always@(posedge clk or negedge rst_n)

          begin

          if(!rst_n)

          begin

          key_flag_r0 = 0;

          key_flag_r1 = 0;

          end

          else

          begin

          key_flag_r0 = key_flag_r;

          key_flag_r1 = key_flag_r0;

          end

          end

          assign key_flag = key_flag_r1 ~key_flag_r0;

          endmodule

          信號線說明如下:

          clk

          系統(tǒng)最高時鐘

          rst_n

          系統(tǒng)復(fù)位信號

          Key_data

          信號(可根據(jù)需要配置為n位)

          Key_flag

          確認(rèn)信號

          Key_vaule

          返回值

          雷同上述按鍵消的狀態(tài),此模塊可以模擬成一下5個狀態(tài),見state machine:

          (2)循環(huán)n次計數(shù)消

          同樣,此模塊也是Bingo無數(shù)次修改測試最后成型的代碼,利用了更少的資源,更適用于并行高速FPGA的性能要求。具體代碼實現(xiàn)過程請有需要的自行分析,本模塊通過相關(guān)時鐘的適配,n次計數(shù)來確認(rèn)按鍵信號,Verilog代碼如下所示:

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

          * Module Name : key_scan.v

          * Engineer : Crazy Bingo

          * Target Device : EP2C8Q208C8

          * Tool versions : Quartus II 11.0

          * Create Date : 2011-6-25

          * Revision : v1.0

          * Description :

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



          關(guān)鍵詞: 抖動 按鍵 獨立 MCU 同于

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();