矩阵键盘电路设计Word下载.doc
- 文档编号:15520904
- 上传时间:2022-11-03
- 格式:DOC
- 页数:16
- 大小:905KB
矩阵键盘电路设计Word下载.doc
《矩阵键盘电路设计Word下载.doc》由会员分享,可在线阅读,更多相关《矩阵键盘电路设计Word下载.doc(16页珍藏版)》请在冰豆网上搜索。
年
01
月
12
日
目录
前言....................................................................
第一章需求分析.........................................................
功能描述.........................................................
功能分析.........................................................
第二章系统的原理及分析.................................................
用到的知识点的介绍,知识点使用的总体思路
第三章详细设计.........................................................
硬件设计
系统结构图,元器件的选择等
软件设计
所设计的软件关键模块的程序流程
第四章测试............................................................
运行结果分析等
第五章总结.............................................................
参考文献................................................................
附录
关键程序代码........................................................
前言
矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4*4个。
一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×
4行列式键盘”区域中的M1-M4,N1-N4端口上。
在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;
要求:
P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
面板是微机仪器的重要组成部分。
面板主要包括显示器和键盘,通过面板对系统进行操作。
一般的单片机控制仪表的面板均含有数码管、发光管和按键,本文的仪器面板就是针对这个领域而开发的。
在仪器面板的设计中,键盘显示电路的设计一般采用三种方式,第一种为并行口动态扫描方式,该方式硬件简单、软件编程方便,与主板的信号连线多;
第二种为串行口静态扫描方式,此方式使用串行芯片多,与主板的信号连线少;
第三种为串行口动态扫描方式,此方式具有硬件简单、与主板信号连线少的优点,一般采用专用的串行口键盘显示芯片设计。
考虑到专用芯片成本较高,我们用普通芯片设计了串行口动态扫描方式的仪器面板。
每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么?
还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;
另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
用单片机的并行口P3连接4×
4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。
实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。
第一章需求分析
功能描述:
行线P1.0~P1.3为输出线,列线P1.4~P1.7为输入线。
一开始单片机将行线(P1.0~P1.3)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。
延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。
最后一步确定键值。
现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?
当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。
首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;
其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。
转到S5键功能处理子程序就可以达到目的。
功能分析:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗,两个数据指针,两个16计时器,一个5向量两级中断结构,一个全双工串行通讯口,片内振荡器及时时钟电路,同时A789S51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式,空闲方式停止工作并紧张其他所有部分工作直到下一个硬件复位。
如果给P3一个扫描初值的话:
如0x0F,则没有键按下时为:
P3.1~P3.3为1,P3.4~P3.7为0。
如果有键按下,则情况发生变化:
高电平接入低电平:
如P3.3与P3.7连接的键按下,则P3.3与P3.7为0,即接地了。
则P3此时为:
00000111,这时如果用P3&
0x0F,则高四位为0,低四位保留,可以得到低四位的内容了。
通过去抖操作,即一个delay,可以得到低四位内容。
这里设为:
h=P3&
0x0F;
如果再得到高四位内容,则可以组成一个数,来定位哪个键了。
当赋值后,如果有键按下的话,P3高四位不会全为1111,被拉到0了。
即:
01110111,&
F0之后,得到01110000,这样的话,我们得到高四位的值了,用高四位+低四位,就可以得到一个数值,确定一个键。
其扫描输出端口Pm.x不是直接与输入端口Pn.y交叉的,而是经过用于数码显示位驱动的反相组件后再与入端口Pn.y交叉的。
为此,其扫描输出有效端口不是低电平了,而是输出高电平经反相组件后再成为低电平,通过按键同样将与之交叉的输入端口线拉低。
所以,在查询输入端口时与图2所示的是相同的,而在查询扫描输出有效端口时与图2的就有所不同了。
为保证键每闭合一次MCU只作一次处理,每一次键解读后都将置键解读标志位为逻辑对于键解读标志位的置位,可以在每一个键解释处理完毕后进行,也可在消抖动延时后就进行一次总置。
不管键有多少个,键解读标志位用的却是同一个。
其实,引入了键解读标志位,不只是控制键每闭合一次MCU只作一次处理,还可对那些持久按着的键有控地进行多次处理(如用于对一些数据递进、或递减的连续设置等)。
需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
具体的识别及编程方法如下所述。
矩阵式键盘的按键识别方法:
确定矩阵式键盘上何键被按下介绍一种“行扫描法”。
行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
第二章系统的原理及分析
用单片机的并行口P3连接4×
4矩阵键盘,并以单片机的P1.0-P1.3各管脚作输入线,以单片机的P1.4-P1.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是4×
4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。
数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。
若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。
所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。
矩阵键盘驱动的主要作用就是实时监测外部按键中断,一旦发现外部有键按下就向内核发送键盘消息实现键盘输入功能。
键盘驱动创建了中断服务线程和4个键盘中断事件,每行按键对应一个键盘中断事件。
有键被按下时,中断服务例程得到对应的中断标识符并报告给系统任务调度进程,同时产生键盘中断事件,键盘中断服务线程响应键盘中断事件,开始扫描矩阵键盘。
根据产生的中断事件类型不同,可以首先确定被按下键的行位置。
由于键盘被按下后,该键对应的行和列被连通,因此根据判断各列对应的I/O口的电平,可以得到被按下键的列位置;
得到按键的准确位置后,通过向操作系统发送键盘消息KEYBD_EVENT,实现一次键盘输入。
循环扫描键盘,直到按键被弹起则发送KEYEVENTF_KEYUP事件。
总体思路
键盘扫描方法:
行线p1.0^p1.3为输入线,列线p1.4^p1.7为输出线。
一开始单片机将行线(p1.0^p1.3)全部输出低电平,此时读入线数据,若列线全部为高电平则没有键按下,当列线有出线低电平时调用延时程序以此来去除键抖动,延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。
现在我们以第二行的s5键为例,若按下s5后我们应该怎么得到这个键值呢?
当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 键盘 电路设计