矩阵键盘案例(完整版)实用资料.doc
上传人:天马****23 上传时间:2024-09-10 格式:DOC 页数:26 大小:2.1MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

矩阵键盘案例(完整版)实用资料.doc

矩阵键盘案例(完整版)实用资料.doc

预览

免费试读已结束,剩余 16 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

矩阵键盘案例(完整版)实用资料(可以直接使用,可编辑完整版实用资料,欢迎下载)矩阵式键盘案例89S51单片机的P1口用作键盘I/O口,P0口用作输出口,用于输出所按键的键号(0~F)。矩阵式键盘连接电路图键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0~P1.3设置为输入线,行线P1.4~P1.7设置为输出线。4根行线和4根列线形成16个相交点。(1)检测当前是否有键被按下:检测的方法是P1.4~P1.7输出全“0”,读取P1.0~P1.3的状态,若P1.0~P1.3为全“1”,则无键闭合,否则有键闭合。(2)去除键抖动:当检测到有键按下后,延时一段时间再做下一步的检测判断。(3)若有键被按下,应识别出是哪一个键闭合。对键盘的行线进行扫描。P1.4~P1.7按下述4种组合依次输出:P1.71110P1.61101P1.51011P1.40111在每组行输出时读取P1.0~P1.3,若全为“1”,则表示为这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。建立有效标志计算键值闭合键释放建立无效标志返回找到闭合键NYNY键盘扫描有键闭合延时去抖动扫描键盘NY为了保证键每闭合一次CPU仅作一次处理,必须除去键释放时的抖动。从以上分析得到键盘扫描程序的流程图如图9-8所示,键盘扫描程序如下:#include<reg51.h>unsignedcharseg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedchar);unsignedcharkey_scan();voidmain(){unsignedcharval_key;while(1){val_key=key_scan();if(val_key!=0xff)P0=seg[val_key];}}voiddelay(unsignedchart){unsignedchari,j;for(i=0;i<t;i++)for(j=0;j<200;j++);}unsignedcharkey_scan(){unsignedcharkdata,vkey,keyNo;图9-8键盘扫描程序流程图bitiskey=0;//标志,在确定具体哪一个键按下时,如果检测到有一个键按下则该标志置1P1=0x0f;//行线送“0”kdata=P1;//读取列线值kdata&=0x0f;if(kdata==0x0f)return0xff;//无键按下,建立无效标志(0xff为无键按下的无效标志)else//若列线均为“1”则无键按下,否则有键按下{delay(25);//有键按下,去除抖动kdata=0xef;while(!iskey)//扫描键盘{vkey=P1=kdata;//送扫描码至P1口行线,并将扫描码保存到vkey中kdata=P1;//读取列线值kdata&=0x0f;if(kdata==0x0f){kdata=vkey;//若没有键盘按下,则取出行扫描码kdata<<=1;//换扫描下一行的扫描码(循环向左移一位kdata|=1;}else//若有键按下则键处理{kdata^=0x0f;//为计算列值的方便,将列线P1.3~P1.0分别与1异或即按位取反switch(kdata)//计算列值{case1:keyNo=0;break;case2:keyNo=1;break;case4:keyNo=2;break;case8:keyNo=3;break;}iskey=1;}}vkey=vkey>>4;//取行扫描码vkey^=0x0f;//将行扫描码取反switch(vkey){case1:keyNo+=0;break;//把行值加到列值中case2:keyNo+=4;break;case4:keyNo+=8;break;case8:keyNo+=12;break;}do{kdata=P1;kdata&=0x0f;}while(kdata!=0x0f);//判断键释放}returnkeyNo;}矩阵键盘是单片机编程中所使用的键盘.0b|;}7[1m9Mz1.矩阵式键盘的结构与工作原理0c;J-@/M"O)y"X/|6}7k在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直