新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 非同于MCU的獨立按鍵消抖動

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

        作者: 時間:2012-03-08 來源:網絡 收藏

        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

        系統最高時鐘

        rst_n

        系統復位信號

        Key_data

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

        Key_flag

        確認信號

        Key_vaule

        返回值

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

        (2)循環n次計數消

        同樣,此模塊也是Bingo無數次修改測試最后成型的代碼,利用了更少的資源,更適用于并行高速FPGA的性能要求。具體代碼實現過程請有需要的自行分析,本模塊通過相關時鐘的適配,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 :

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



        關鍵詞: 抖動 按鍵 獨立 MCU 同于

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 盐亭县| 始兴县| 巴马| 甘肃省| 苏州市| 东兰县| 犍为县| 囊谦县| 灵山县| 兴业县| 嘉定区| 巴彦县| 宜川县| 南城县| 健康| 弥渡县| 尉氏县| 台中县| 卢氏县| 杭锦后旗| 长宁区| 揭阳市| 武安市| 南丹县| 侯马市| 巴青县| 馆陶县| 新乡县| 阿合奇县| 巴彦县| 靖江市| 三门县| 巴南区| 清远市| 都江堰市| 米易县| 邵阳市| 大悟县| 濮阳县| 金乡县| 宁阳县|