《智能仪器设计》大作业——基于单片机和FPGA的矩阵键盘控制系统设计
VccKEYI[0]123KEYI[1]456KEYI[2]789[0][1]OYEKOYEKOYEK
[2]
图4-3 矩阵键盘的原理图
4.3.2 时钟分频模块
时钟电路主要产生系统所需要的时钟信号,由 FPGA 时钟分频得到系统工作时钟,然后采用计数器分频方法得到所需要的键盘扫描信号。
本次设计中循环的发送3种数值,即011,101,110。具体的分频过程是将原来的f=50Mhz分频到现在的f=50hz。本程序中采用了计数器分频的思路,把一个计数周期内的约定个数定为1000000,在每次计数到约定个数的一半时,实现1、0之间的跃变。这样,就实现了对原频率1/1000000的分频。分频模块视图如图4-4所示。
图4-4 分频模块视图
- 5 -
《智能仪器设计》大作业——基于单片机和FPGA的矩阵键盘控制系统设计
4.3.3 键盘扫描模块
键盘扫描电路用来产生键盘扫描信号,根据矩阵键盘工作原理,需要产生从第一列到第四列的周期性扫描信号。采用 Verilog 硬件语言设计扫描模块。
键盘扫描模块可以周期性的得到行扫描信号Keydry0~Keydry2: 011→101→110→011…..周而复始的扫描。触发信号的周期是20ms,就是上一分频模块的的输出周期。键盘扫描模块如图4-5所示。
图4-5 键盘扫描模块
4.3.4 译码转换及三态门输出模块
矩阵键盘所产生的扫描回复信号( 按键输入给 FPGA 的信号) ,是无法直接在 FPGA 内部作为信号进行使用,在使用前需要根据定义的不同功能将扫描回复信号译码为可供 FPGA 识别的 BCD 编码,完成矩阵键盘输入的译码,同时区分不同按键的功能。译码电路的主要功能是: 判断是否有键按下,然后根据扫描的信号确认所按下的键是数字键还是功能键,将所按下的键编写成 BCD 码。BCD码的编码表4-1如下所示:
表4-1 BCD码编码表
键盘输出 011_011 011_101 011_110 101_011 101_101 按键 1 2 3 4 5 译码 0001 0010 0011 0100 0101 键盘输出 101_110 110_011 110_101 110_110 000_000 按键 6 7 8 9 无按键 译码 0110 0111 1000 1001 0000 在完成BCD码转换后,要进一步通过中断控制,发送信号给单片机。并在三态门的控制作用下,实现不同状态的输出。具体即在无键盘按下时,输出为高阻状态;有键盘按下时,按相应的键码输出8位数据给单片机。在三态门的控制实现过程中,要注意,RD信号的0和1状态转换的条件,从0到1和从1到0是依据不同的变量来进行判断的。从1到0,是判断Y发生变化,且当前状态不是全为1;从0到1是根据列向量KEYO的状态进行判断的,一旦KEYO为全1,
- 6 -
《智能仪器设计》大作业——基于单片机和FPGA的矩阵键盘控制系统设计
则进行中断信号从0到1的转换。这样能够实现三态门有效的对数据输出的控制。译码输出模块如图4-6所示。
图4-6 译码输出模块
4.3.5 单片机及液晶显示模块部分
点阵LCD的显示原理:在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。对于中文,将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。
字模是用数字的各位信息来记载英文或汉字的形状,通过字模将汉字在屏幕上显示出来。12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。12864LCD的引脚说明如表4-2所示。
表4-2 液晶模块12864的管脚说明 管脚号 1 2 3 4 5 6 7 8 9 10 11 12
管脚名称 VSS VDD V0 D/I(RS) R/W E DB0 DB1 DB2 DB3 DB4 DB5 LEVER 0 +5.0V - H/L H/L H/L H/L H/L H/L H/L H/L H/L - 7 -
管脚功能描述 电源地 电源电压 液晶显示器驱动电压 D/I=“H”,表示DB7∽DB0为显示数据 D/I=“L”,表示DB7∽DB0为显示指令数据 R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 数据线 数据线 数据线 数据线 数据线 数据线 《智能仪器设计》大作业——基于单片机和FPGA的矩阵键盘控制系统设计 13 14 15 16 17 18 19 20 DB6 DB7 CS1 CS2 RET H/L H/L H/L H/L 数据线 数据线 H:选择芯片(右半屏)信号 H:选择芯片(左半屏)信号 H/L 复位信号,低电平复位 VOUT -10V LCD驱动负电压 LED背光板电源 LED背光板电源 LED+ - LED- - 显示模块电路如图4-7所示,液晶模块的1管脚接电源地,15管脚用于接电
源地,19管脚用于接电源地。2管脚接电源给液晶显示器供电,3管脚接电源用
于提供液晶显示器显示驱动电压,17管脚接电源,20管脚接电源用与提供背景
光。4管脚接单片机的P1.3用于接收数据或者指令,5管脚接单片机的P1.4选
择数据被读写到什么位置,6管脚接单片机的P1.5用于提供锁存信号。
图4-7 显示模块电路
当FPGA模块周期性地对键盘进行扫描的时候,也会周期性地给单片机发送中断信号,在单片机程序中加入中断信号比较简单,代码如下:
EA=1;//打开总中断 EX0=1;//打开外部中断0 IT0=0;//将中断0设置为电平触发
然后单片机对输入管脚进行扫描,如果输入信号是0x01,单片机就驱动液晶显示器显示数字1,如果输入信号是0x02,单片机驱动液晶显示器显示数字2。
- 8 -
《智能仪器设计》大作业——基于单片机和FPGA的矩阵键盘控制系统设计
5. 仿真及结果分析
5.1 分频模块时序仿真
分频模块时序仿真结果如图5-1所示:
图5-1 分频模块时序仿真结果
结果分析:如图所示,CLK频率是50Mhz,分频以后CLK_OUT的周期是20ms(图中的140ms和120ms之间即为一个周期,20ms)。
5.2 键盘扫描模块
键盘扫描模块仿真结果如图5-2所示:
图5-2 键盘扫描模块仿真结果
结果分析:如图所示,每过一个周期,键盘行扫描信号就变化一次,并且按照Keydrv[2:0]:011→101→110→011…的顺序周而复始的扫描。
5.3 译码输出模块
译码输出结果如图5-3所示:
- 9 -