fpga与mcu按键去抖动
te 3; end 3 begin key_flag_r 1b0; /;key_value key_data; //lock the key_value sta/read the key_value ifkey_data KEY_WIDTH1bstate 0; end 2 begin key_flag_r 1b11 state 4; else state 3; end 4 begin ifkey_data KEY_WIDTH1b1 state _data KEY_WIDTH1b1 state 2; else 0; else state 4; end endcase end ; else state 0; end 1 begin ifkeyend //--------------------------------------- in ifkey_data KEY_WIDTH1b1 state 1//Capture the falling endge of the key_flag reg k20d249999//Delay_5ms begin casestate 0 begey_flag_r0,key_flag_r1; alwaysposedge clk or negedge rst_n begin 119 ifrst_n begin value KEY_WIDTH1b0; end else ifcnt key_flag_r0 0; key_flag_r1 0; end else n ifrst_n begin key_flag_r 1b0; key_begin key_flag_r0 key_flag_r; key_flag_r1118 alwaysposedge clk or negedge rst_n begi key_flag_r0; end end assign key_flag k- reg key_flag_r; reg KEY_WIDTH-10 key_data_r; ey_flag_r1 endmodule 信号线说明如下 clk 系统最高时钟 rst_n 系统复位信号 位 Key_data 按键信号可根据end end //----------------------------------需要配置为nKey_flag 按键确认信号 Key_vaule 按键返回值 雷同上述MC cnt 1b1; ifcnt 20d249999 cnt 20d0; U按键消抖动的状态,此模块可以模拟成一下5个状态,见state machine n 次计数消ifrst_n cnt 20d0; else begin cnt 抖动 2循环同样,此模块也是Bingo 无数次修改测试最后成型的代码,利用了更少的资 源,更适用于并行高速 FPGA的性能要求。具体代码实现过程请有需要的自行 次计数来确认按键信号,Veri------------------------------ arst_n begin log 代码如分析,本模块通过相关时钟的适配,n 下 所示 /************0 state; lways posedge clk or negedge //-----************************************* * Module Nlue ; reg 190 cnt; //delay_5ms249999 reg 2ame key_scan.v * Engineer Crazy Bingo * Tatput key_flag, output reg KEY_WIDTH-10 key_varget Device EP2C8Q208C8 * Tool versions Quartus II 11.0 * Create Date 2011-6-25 * Revision rst_n KEY_WIDTH-10 key_data, ou v1.0 * Description ************************ parameter KEY_WIDTH 2 clk, ,**************************/ module key_scan par**********************/ module key_scan_jitter ameter KEY_WIDTH 2 clk, //50MHz in0 * Description ****************************put rst_n, KEY_WIDTH-10 key_data, output key_flag, output reg KEY_WIDTH-10 key_val 11.0 * Create Date 2011-6-26 * Revision v1.ue ; //--------------------------------- //esca Device EP2C8Q208C8 * Tool versions Quartus IIpe the jitters reg 190 key_cnt; //scan counter _scan_jitter.v * Engineer Crazy Bingo * Targetreg KEY_WIDTH-10 key_data_r; always posedge clk or negedge rst_n begin ifrst_n begi**************************** * Module Name keyn key_data_r KEY_WIDTH1b1; key_cnt 0; 析,本模块移植方便,Verilog 代码如下所示 /*********************end else begin key_data_r key_data; //l上可适配n 个按键, 在思想上利用单片机采用了单片机消抖动的思想。具体代码实现过程请有需要的 自行分ock the key value ifkey_data key_data_r end else key_cnt 0;end end,则返回0,退出 4延时5ms,消抖动 5确认,返回按下信号,退出 当然在单片机 wire cnt_flag key_cnt 20hffffe 1b1 1时5ms,消抖动 3继续检测信号,确认是否被按下 a 是,则开始等待释放 b 否b0;// //----------------------------------- ; //没信号 针对以上代码,消抖动的顺序如下所示 1检测到信号 2延//sure the key is pressed reg key_flag_r; alwaysposedge clk or negedge rst_n begin ifrst_n key1; //确认被释放 return 1; //返回按下信号 return 0begin key_flag_r 0; 121 key_value 0; 1; // 确认被按下,等下释放 ; //延时5ms,消抖 delay5whileend else ifcnt_flag begin key_flag_r ifkey 0 retrurn 0; //是抖动,返回退出 whilekey1; key_value key_data; //locked the data end else //let go your hand key_flag_r 0; //lock thifkey 0 //检测到被按下 delay5; //延时5ms,消抖 e key_value end //--------------------------------代码来讲解,代码如下所示 unsigned char key_scanvoid ------- //Capture the rising endge of the key_fl单片机去抖动 根据自己当年写过的单片机其中的 对于单片机中的按键消抖动,本节Bingo 一个ag reg key_flag_r0,key_flag_r1; alwaysposedge 原理。一般可分为以下几种 1延时 2N 次低电平计数 3低通滤波 一clk or negedge rst_n begin ifrst_n begin key_flag_r0 0; key_flag_r1 0; end els制,信号的释放等。因此在这里,FPGA 上应用的按键 消抖动,也不得不讲 对此一般产用消抖动的e begin key_flag_r0 key_flag_r; key_flag_等 处理器,或者是我们的FPGA,一般没有不用到按键的地方。按键人机交互控 制,主要用于对系统的控r1 key_flag_r0; end end assign key_flag fpga与mcu的按键去抖动简单的说,进入了电子,不管是学纯模拟,还是学单片机,DSP、ARM key_flag_r1