基于FPGA的按键控制LED的循环左移一位

来源:互联网 发布:复杂网络 newman 编辑:程序博客网 时间:2024/05/21 18:37

一:背景介绍

今天早上开工,将按键控制LED的循环左移一位,这一功能实现了一把,这是一个基础功能,我想要的最终实现方式是:状态机FSM;

进阶版本是:状态机通过按键控制其条件的转变,实现多个功能的轮流展示

说到按键电路,大家脑海里首先反应出的就是:按键消抖;



二:知识问答

我想问几个问题:

1)按键消抖有几种方法呢?

两种

2)哪两种呢?

硬件方法 + 软件方法;

3)软件方法如何实现呢?

避过按键的抖动时间

4)按键的抖动期是多长?

5ms~~10ms(网络给出的,其实也差不多了,10ms的抖动期,一般课题,都可以正确实现)


三:思路解析

说到消抖,单片机里已经给出了方法,也就是:如果监测到按键按下(按键出现低电平),跳过10ms的抖动期,然后再检测,是否仍然为低电平,如果是,那就是真的按下了;

那么FPGA呢,是不是也是这种方法?

也可以这样做的,没有问题的,但是使用FPGA延时,需要注意的是:当按键按下后,会不会多次操作某一功能;这是关键,切记;

我推荐的是另一种方法;计数停止法。

核心思想:

如果监测到按键按下(按键出现低电平),那么就开始计数,如果计数到10ms时,仍然为0,则确定为:按键按下,计数停止

如果监测到按键未按下,或者,按键松开,计数值清零,然后一直计数,知道计满10ms为止。


四:框图

在此简略,稍后附上


五:小结

循环左移是一个简单地 实验,添加了按键消抖,在简单里加点料。

我现在还没有尝试使用状态机,写出描述语句,我的打算是:等所有课题或者项目的语句,描述了清楚后再用状态机;

简单铸就雄伟

我先将目前学习过的知识进行一个汇总,然后再逐个提升,简单心思,如此而已;

什么都想做,什么都想一步到位,那是牛人干的事情,作为一个普通人士,我选择逐层提升;

不要瞧不上,LED灯循环左移之类的,举3个例子:串口DB9,使用串行数据传输;SPI,使用串行数据传输;IIC,使用串行数据传输,数据需要移动,左移和右移是不是就用上 了。

大项目也是是由诸多的小项目汇总而成,小项目都还没用搞定,大项目也只能望海兴叹.。

就写这么多的,没法口吐莲花,简单的东西都能讲出花,就此搁笔,与诸君分享。


六:程序



0 0
原创粉丝点击