|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字计算器基于 FPGA设计源码和电路全部分享 + r" `' }2 l R$ q
% E8 G( }* w% ]3 ~+ }4 f2 g
$ t1 c5 U! R8 n) N! k本实验,我们使用我们开发板上的矩阵键盘来设计一个简单的计算器,最终要实现多达任意六位数的“加、减、乘、除”运算(不考虑负数)。通过本项目的学习,大家可以掌握矩阵键盘的原理和驱动方式,同时也可以进一步体会模块化的设计方法和技巧。+ s0 u7 Q, }, N% W$ v' J9 ~
那么,在开始项目之前,我们首先应该明白矩阵键盘的基本原理,代码体现的是思路,只有在对外设原理足够清楚的前提下才可能建立起来正确的思路。矩阵键盘电路3 V# ~0 q6 c: K2 q0 T7 x& R
- a% T! `( y0 N7 ^
! b0 o8 \/ m& x& I n4 _- y3 n由上图可以看出,矩阵键盘的行row(行)与col(列)的交点,都是通过一个按键相连接。如果采用传统的“一个按键一个端口”的方法,要想实现16个按键,就需要16个端口;如果采用现在这个矩阵键盘的设计,要想实现16个按键,仅仅需要8个端口;如果使用16个端口来做矩阵键盘的话,则可以识别64个按键。相对于传统的键盘设计而言,矩阵键盘的设计大大提高了端口的利用率。& t+ z3 w' N3 |
因此如果需要的按键少,可以选择传统的按键设计,但如果需要的按键比较多,则建议采用这种矩阵键盘的设计。接下来我们就以扫描法为例来带领大家了解矩3 n7 a# K4 ^: ?7 g+ j
阵键盘的工作原理。
/ Q- D3 S) H9 t6 Q+ y# x首先col(列)是FPGA给矩阵键盘输出的扫描信号,而row(行)是矩阵键盘反馈给 FPGA 的输入信号,用于检测哪一个按键被按下。FPGA&nBSP; 给出扫描信号COL[3:0]:COL = 4’b0111,等下一个时钟周期COL = 4’b1011,再等下一个时钟周期COL = 4’b1101,再等下一个时钟周期COL = 4’b1110,再等下一个时钟周期COL = 4’b0111,COL就是这样不断循环,给矩阵键盘一个低电平有效的扫描信号。当FPGA给矩阵键盘COL扫描信号的同时,FPGA也要在检测矩阵键盘给FPGA的的反馈信号ROW。举个例子,假若矩阵键盘中的9号按键被按下了:" n6 }$ Y* V8 n9 b( z4 R `
当COL = 4’b0111,ROW = 4’b1111;6 q* o t0 e) t% G# M& N
当COL = 4’b1011,ROW = 4’b1111;
. E& L5 j) A. m3 u/ a) \) X当COL = 4’b1011,ROW = 4’b1111;
( t8 G- G* O. m1 l" v当COL = 4’b1011,ROW = 4’b1111;
$ l( j9 Z6 y* L @# C( b/ w有人问,为什么当COL = 4’b1101的时候,ROW = 4’b1011呢?我们现在观察如图8-20所示的矩阵键盘的电路图,分析如下:% ?5 Q6 ~) v* e" R, C5 A
当9号按键被按下的时候,9号按键的电路就会被导通,扫描电路COL开始扫描,当扫描到 COL[1]的时候,由于 9 号按键的电路被导通了,COL[1]的电压等于ROW[2]的电压,所以会出现当COL = 4’b1101的时候ROW = 4’b1011(扫描信号的频率大概1K左右)。4 k0 U! W4 k% f% _% `! K6 T: D/ Y5 i/ T
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种- r( J% a/ L5 V5 y3 A# H. O" b
现象而作的措施就是按键消抖。
& T0 O) x3 Z8 W1 E1 }抖动时间的长短由按键的机械特性决定,一般为 5ms~10ms。这是一个很重要的时间参数,在很多场合都会用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒(按键按下的时间一般都会大于20ms)。按键抖动会引起一次按键被误读多次,为确保 CPU对按键的一次闭合仅作一次处理,必须去除按键抖动。在按键闭合稳定时读取按键的电平状态,并且必须判别到按键释放稳定后再作处理。& Z4 j5 F7 H) `& _
然后我们就可以利用这些现象,来设计一个识别按键的电路。
# F2 M/ l' H6 \ O% @9 h3 ?, o# }8 p |
|