CPLD实现小键盘扫描如何实现按键弹起的判断和去抖动?

[复制链接]
4269|6
 楼主| 风中De舞者 发表于 2008-3-8 09:40 | 显示全部楼层 |阅读模式
CPLD实现小键盘扫描如何实现按键弹起的判断和去抖动?  没想出来好办法  大家是怎么做的呢?
zgl7903 发表于 2008-3-10 17:46 | 显示全部楼层

随便说说

module&nbsp;Scan_key(pReset,scan_clk,scan_port,key_status);<br />&nbsp;&nbsp;parameter&nbsp;Buff_WIDTH&nbsp;=&nbsp;8;&nbsp;//缓冲区深度<br />&nbsp;&nbsp;input&nbsp;pReset;&nbsp;//复位信号<br />&nbsp;&nbsp;input&nbsp;scan_clk;&nbsp;//扫描时钟<br />&nbsp;&nbsp;input&nbsp;scan_port;&nbsp;//扫描端口<br />&nbsp;&nbsp;output&nbsp;key_status;&nbsp;//消抖后的键状态<br /><br />&nbsp;&nbsp;reg&nbsp;key_status;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;reg&nbsp;[Buff_WIDTH-1:0]key_buff;&nbsp;//消抖缓冲区<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;always&nbsp;@(posedge&nbsp;pReset&nbsp;or&nbsp;posedge&nbsp;scan_clk)<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pReset)&nbsp;//复位状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;key_buff&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;//扫描状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;key_buff&nbsp;=&nbsp;{key_buff[Buff_WIDTH-1:1],scan_port};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//填入新扫描数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;always&nbsp;@(key_buff)<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(key_buff&nbsp;==&nbsp;{Buff_WIDTH{0}})&nbsp;//全部为0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key_status&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_buff&nbsp;==&nbsp;{Buff_WIDTH{1}})&nbsp;//全部为1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key_status&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key_status&nbsp;=&nbsp;key_status;<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />endmodule&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />
wwh 发表于 2008-3-12 22:54 | 显示全部楼层

硬件去抖好

软件去抖有时候起不到作用,因为CPLD有时候太快了
jiang456 发表于 2008-4-8 20:40 | 显示全部楼层

很简单的问题

用个555做个1k的时钟,然后用分频,用分频的频率去采集不就可以去抖动。这个最简单。没有你写的那么复杂。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
21班猪 发表于 2008-4-9 15:58 | 显示全部楼层

数字滤波。

  
lsqdesign 发表于 2008-4-10 10:11 | 显示全部楼层

去抖的硬件电路

没有这么复杂大家可以看一下以前没有软件去抖的硬件电路,好像是一个RS触发器。4,6年前用FPGA实现过。不会象前面几位说得那么复杂
alickers 发表于 2008-4-12 22:48 | 显示全部楼层

低速多次采样比较就可以了吧

应该没啥难度
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

286

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部