- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于FPGA和VHDL语言的多按键状态识别系统
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为延时计数器。
软件去抖动过程说明:对状态寄存器的2位数值做异或运算,即m=State_1 Xor State_2。若m=l,说明按键有动作,则令TimeDelay=1,启动延时计数;若m=O,表明按键处于去抖延时或者平稳状态。这时判断TimeDelay,若TimeDelay=0,则按键处于平稳状态;若0MaxDelay时说明按键已经平稳,将结果送入编码器模块。软件去抖关键代码如下:
来源:21IC电子网
上一篇:数字无线实时视频通信和拍摄系统
下一篇:针对融合的多媒体电话业务MMTel