矩阵法来做键盘是最合理的。
矩阵式键盘的按钮识别办法确定矩阵式键盘上何键被按下简绍一种“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的,按钮识别办法,如下图示键盘,介绍过程如下。
判断键盘中有无键盘按下将全部行线置低电平,然后检测列的电平为低,则表示键盘中有键被按下,而且闭合的键位位于低电平线与4根行线相交叉的4个按钮之中。若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置:在确认有键按下后,即可置某根行线为低电平时,其他线为高电平。在确定某根位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列与置为低电平的行线交叉处的按钮就是闭合的按钮。将程序通过串口下载到单片机中,在键盘上按任意键时,将会在数码管上显示对应的字符。
为了驱动键盘,同上以8255_PC第四位作为输入,8255PC高四位作为列扫描输出,以此来实现动态扫描显示法。如图8所示:
图8 键盘动态扫描电路设计
9
3.控制系统的软件设计
3.1主程序流程图
本设计中主程序主要实现显示的初始化和调用各子程序工作的功能,读取时间的子程序主要实现初始化,时间信息的采集和显示段码的码的存取。分别对各个器件的功能进行编程设计,根据主程序流程图(如下)进行全面的分析。设计中计时主要以定时器T0中断完成,定点闹铃使用峰鸣器来完成。当端口有开关按下时,转入相应的功能程序。其主程序执行流程图如下图9:
开始初始化显示N是否到闹钟时间N是否按键YNNY蜂鸣器响4是否整点秒Y蜂鸣器响1分钟是否为开启闹钟Y设置闹钟时间调节显示时间
图9 主程序流程图
10
3.2显示子程序
时间显示子程序显示时钟芯片3个内存单元(小时、分钟、秒钟)的BCD码数据,8255的PA口送数码管的位选编码。8255的PB口送段选编码,位选段选编码存放在ROM表中。
显示时,先取出位选编码数据,然后送至PA口输出,接着取出段选编码数据送至PB口输出,剩下的数码管以同样地方法送数据直到将3个内存单元的数据分成6个位全部送去数码管显示。数码管显示子程序流程图如图9所示:
开始初始化显示数值从RAM中取键码计算存入缓冲区显示延时六位显示完成?Y 结束N
图 10 数码管显示子程序流程图
3.3闹钟时间设定功能程序
在时钟状态下,触发外中断1时,进入闹钟时间设定模式,且不影响T0计时器的功能状态,在键盘上输入对应的数字进行时间设定。当分别按下调节时钟、分钟和秒钟的个位时,时间自动确定,闹钟时间只精确到分钟。闹钟时间设定流程图如图11所示:
11
开始达到预设时间?Y闹铃N返回
图11 闹钟时间设定流程图
3.4键盘扫描程序
本设计采用动态扫描法,动态扫描法不仅扫描键阵,也可以实现显示,是目前应用十分广泛的一种方法。动态扫描法是采用输出“移动”信号,轮流对各行按键进行检测来实现的。设置行线为输出,列线为输入,当无按键按下时,列输入全为“1”.设计时,将某一行输出为“0”,读取列线值,若其中某一位为“0”,则表明行、列交叉处的按键按下,否则,无按键按下;继续扫描下一行(将下一行输出为“0”),直至全扫描完为止。键盘扫描程序流程图如12图所示:
开始初始化地址参数输出列扫描信号读入行信号该列有键入NN四列扫描完YY按照行列计算键值查表得键码等待键释放返回
图12 键盘扫描程序流程图
12