新闻中心

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 :

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



评论


相关推荐

技术专区

关闭