预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共26页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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.71110 P1.61101 P1.51011 P1.40111 在每组行输出时读取P1.0~P1.3,若全为“1”,则表示为这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。 建立有效标志 计算键值 闭合键释放 建立无效标志 返回 找到闭合键 N Y N Y 键盘扫描 有键闭合 延时去抖动 扫描键盘 N Y 为了保证键每闭合一次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;//标志,在确定具体哪一个键按下时,如果检测到有一个键按下则该标志置1 P1=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所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直