集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1355|回复: 0

键盘控制LED的代码 双键 附状态机

[复制链接]
gonnavis 发表于 2011-10-22 01:15:26 | 显示全部楼层 |阅读模式
本帖最后由 gonnavis 于 2011-10-22 01:19 编辑

<verilog那些事儿>没看完,PS/2部分只看了开头一点点,但是分析的很到位,一句顶百句,那张表格也很不错,
又在别的书里学了下状态机.
用仅有的这点知识,硬是编了个键盘控制LED的代码,竟然成功了,自己都感觉意外,
而且试下来,和window中按键反应一模一样.(当然,这本来就是我的目的所在)
按一次键LED变换一次,长按就不停变换,切换按键就接受新按键的输入,释放按键时不产生任何变换.
暂时只支持2个按键,不过想扩展支持按键数也不难,就是多画几个状态而已,当然代码数量肯定要成倍的上去了.

总的思路是:

只用键盘时钟,没用系统时钟.

每一批数据(11位)存入data11中,然后取其中的8个有效数据位存入data中, 这个data 就决定了用户按了什么键.
然后在每批数据结尾,产生一个脉冲,这个脉冲就用来触发状态机.

由于只有键盘时钟,所以这个结尾脉冲必须搭载在键盘时钟上来产生,
也就是说,我必须在每批11个时钟里干三件事:  取data11, 取data,产生一个结尾脉冲,
所以我不得不在data11还没取完的中途就取出data,
这里是我花了较大心思的地方了,自己感觉很微妙,
具体怎么做的大家可以看一下我的代码,
老实说,虽然这代码完全是我自己写出来的,
但我自己也没有完全把思路理清楚,只是试着按照想法大概写了一下,
能成功简直是个奇迹.

好了,data和触发信号有了,
接下来就是状态机了,
这部分怎么弄的,大家可以看一下我画的状态图.
同样,我自己也没完全理清楚,
能成功依然是个奇迹.

第一次做完后发现个bug,
所以后来还不得不加了一个感觉很累赘的unpress2状态.

哦对了,代码中默认用的两个按键是 A 和 S .

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-24 15:05 , Processed in 0.063139 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表