|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字计算器基于 FPGA设计源码和电路全部分享
$ c" _5 y" `% x
9 u0 l6 `8 O. B; }7 v6 R; E
% u( d$ [* g n, u4 @本实验,我们使用我们开发板上的矩阵键盘来设计一个简单的计算器,最终要实现多达任意六位数的“加、减、乘、除”运算(不考虑负数)。通过本项目的学习,大家可以掌握矩阵键盘的原理和驱动方式,同时也可以进一步体会模块化的设计方法和技巧。
7 W; C H: k2 d, f4 h, C那么,在开始项目之前,我们首先应该明白矩阵键盘的基本原理,代码体现的是思路,只有在对外设原理足够清楚的前提下才可能建立起来正确的思路。矩阵键盘电路
O/ b: o' v- \( Z% i; h8 ]; U % F/ _ |5 E8 z* b8 C- h
3 a/ e M2 h/ }" t
由上图可以看出,矩阵键盘的行row(行)与col(列)的交点,都是通过一个按键相连接。如果采用传统的“一个按键一个端口”的方法,要想实现16个按键,就需要16个端口;如果采用现在这个矩阵键盘的设计,要想实现16个按键,仅仅需要8个端口;如果使用16个端口来做矩阵键盘的话,则可以识别64个按键。相对于传统的键盘设计而言,矩阵键盘的设计大大提高了端口的利用率。# w- [7 }' C. F$ J( I3 `3 M- v6 d
因此如果需要的按键少,可以选择传统的按键设计,但如果需要的按键比较多,则建议采用这种矩阵键盘的设计。接下来我们就以扫描法为例来带领大家了解矩
9 e, x6 O- |! K0 R+ q2 N6 @5 u阵键盘的工作原理。
5 F+ i1 |; {0 j3 A1 m6 Y9 _首先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号按键被按下了:6 ~* H2 p& {& r/ j
当COL = 4’b0111,ROW = 4’b1111;
* P; n5 |+ n1 w当COL = 4’b1011,ROW = 4’b1111;
( Q* T# ]" S; P! W) v1 L当COL = 4’b1011,ROW = 4’b1111;) E4 x; D& ~( N4 B
当COL = 4’b1011,ROW = 4’b1111;
) i, _3 f. { Q2 ]# h有人问,为什么当COL = 4’b1101的时候,ROW = 4’b1011呢?我们现在观察如图8-20所示的矩阵键盘的电路图,分析如下:
4 W0 ~: C8 }5 `/ `0 I+ Z r3 M4 b, [当9号按键被按下的时候,9号按键的电路就会被导通,扫描电路COL开始扫描,当扫描到 COL[1]的时候,由于 9 号按键的电路被导通了,COL[1]的电压等于ROW[2]的电压,所以会出现当COL = 4’b1101的时候ROW = 4’b1011(扫描信号的频率大概1K左右)。
! t& x+ R9 n1 s* X! G5 c通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种 l2 N: a8 y- R
现象而作的措施就是按键消抖。6 D; v. J5 M ]' w
抖动时间的长短由按键的机械特性决定,一般为 5ms~10ms。这是一个很重要的时间参数,在很多场合都会用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒(按键按下的时间一般都会大于20ms)。按键抖动会引起一次按键被误读多次,为确保 CPU对按键的一次闭合仅作一次处理,必须去除按键抖动。在按键闭合稳定时读取按键的电平状态,并且必须判别到按键释放稳定后再作处理。- Q" L) t7 K) X4 o, O1 i2 j( H
然后我们就可以利用这些现象,来设计一个识别按键的电路。. [, d2 V6 w+ N6 E
|
|