基于FPGA和VHDL语言的多按键状态识别系统
2.2 按键电路
图3为一路按键电路,共60个按键(i=1~60)。由于外界环境复杂,按键引线长达6 m,保护二极管VDi:在外界干扰信号大于VCC时导通起到保护FPGA的作用。电阻Ri上拉限流,按键未闭合状态下FPGA输入引脚始终处于高电平。
3 FPGA内部逻辑设计
FPGA内部功能分为扫描模块、编码模块、控制模块以及同步FIFO RAM模块,如图4所示。
图4中,K1~K60为60个按键的输入端,Scan为工作模式选择信号,Ready为读准备好信号,RdClk为读时钟信号,Data[7:0]为数据输出,ModCtr为编码模式控制信号,FIFOWEn为FIFO RAM写使能信号,FIFOIn为FIFO RAM数据输入,State为按键状态扫描信号。其工作原理为:扫描模块周期扫描按键状态,其结果送入编码模块;编码模块根据模式控制信号ModCtr选择编码方式编码,将其结果送入FIFO RAM;控制模块产生对FIFO RAM的读取控制信号;MCU可通过Readv、RdClk控制信号读取Data[7:0]数据线上的按键编号和状态数据。
3.1 扫描模块
扫描模块主要完成扫描按键状态输入和按键的软件去抖动。扫描按键状态输入是以5 m8为周期扫描60个输入引脚,将其结果存入60个两位状态移位寄存器。其代码为:

按键去抖有硬件和软件2种实现方式。为了节省成本,充分发挥FPGA器件的功能,该系统设计采用软件去抖。图5为软件去抖动流程。图中State为2位状态移位寄存器,初始值为0,TimeDelay为延时计数器。

评论