完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
本帖最后由 y990441 于 2015-10-25 21:19 编辑 keys模块 现在我们来实现下图中的keys模块。
矩阵键盘的原理图:
工作原理: 首先,置col0~3为全0,一直读row0~3的值,直到row0~3的值的值稳定不为4’b1111,则说明有按键按下。这里要做消抖处理,类似于独立按键的做法。此时根据哪个值不为可判断出按键的col值。 接着,顺次让col0~3为4’b0111, 4’b1011,4’b1101, 4’b1110,并延时16个clk,读row[col]的值是否为0,为0,就判断出按键的row值。这里,延时16个clk是为了让rowx的电平稳定下(50MHZ速度很快部延时可能电平不稳)。 再次,让col0~3为4’b0000,延时16个clk(为了稳定) 最后,等待row0~3的值为4’b1111(等按键释放) 上面的描述,步骤鲜明,显然可以使用状态机来做。
上图中,WAIT_PRESS类似于独立按键消抖,结束条件为flag&~flag_ff0,即使flag的上升沿。JUDGE_COL,依次取col=0~3肯定是用计数器,并且每个计数值之间延时16个clk,所以用delay_cnt来延时。因此该状态结束条件为col==3&&delay_cnt==DELAY_TOP.接着,DELAY状态是让col0~3为4’b0000后延时16个clk,所以结束条件也为delay_cnt==DELAY_TOP。WAIT_UP等待按键释放,只要key_row_ff1== 4’b1111就可以了。这里有两个问题,第一,我们不直接读key_row的值,因为它是一部输入信号,我们读key_row打两拍后的信号key_row_ff1。第二,此处不需要消抖,因为跳到状态WAIT_PRESS会消抖。 所以这个状态机对应的代码为:
接着处理状态机跳转涉及的各个信号: Flag和flag_ff0,这其实就是按键消抖
Col信号
Delay_cnt信号
接着是输出相关的信号,按下的行信号row
|
|
相关推荐
4 个讨论
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
NVMe高速传输之摆脱XDMA设计51:主要功能测试结果与分析3 nvmePCIe高速存储 PCIe高速存储
230 浏览 0 评论
NVMe高速传输之摆脱XDMA设计50:主要功能测试结果与分析2 nvmePCIe高速存储
378 浏览 0 评论
NVMe高速传输之摆脱XDMA设计49:主要功能测试结果与分析1
1509 浏览 0 评论
935 浏览 0 评论
876 浏览 0 评论
4430 浏览 63 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 07:05 , Processed in 0.801791 second(s), Total 64, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3072