新聞中心

        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 同于

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄浦区| 东莞市| 云林县| 邳州市| 阿坝县| 丘北县| 盱眙县| 宁安市| 昭觉县| 乌拉特前旗| 德化县| 南充市| 龙州县| 双柏县| 樟树市| 渝北区| 离岛区| 中超| 西峡县| 林芝县| 花莲市| 托克逊县| 上饶市| 五原县| 乌海市| 尼玛县| 汝南县| 安徽省| 灵丘县| 天等县| 房山区| 定边县| 肥东县| 美姑县| 金山区| 孝感市| 郁南县| 涿鹿县| 正阳县| 理塘县| 洛浦县|