矩阵键盘识别

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void Delay_nms(unsigned int n) //延时程序
{ unsigned int i,j;
for(i=n;i>0;i--)
for(j=112;j>0;j--);
}
void GetKey ( )//键盘扫描函数,用于识别哪一个键按下,并读取键值
{ unsigned char X,Y,Z;
以0键为例,初使化时P1输出0xF0,当0键按下时,我们读高四位的状态应为1110,即P1为0xE0,然后让P1输出0x0F,读低四位产状态应为0111,即P1为0x07,让两次读数相与得0xE7。
现在我们在P0口和P2口分别接一个共阳极的数码管,用来显示我们按下去的键的键值,P0口接的是个位,P2口接的是十位。如0键按下显示00,1键按下显示01,15键按下显示15……,实现的程序如下:
Z=X|Y; //取出键值
switch ( Z ) //判断键值(那一个键按下)
{
case 0xe7: k=0; break; //对键值赋值
case 0xd7: k=1; break;
case 0xb7: k=2; break;
case 0x77: k=3; break;
case 0xeb: k=4; break;
首先,我想谈谈这个毕业论文设计的目的及意义。……
其次,我想谈谈这篇论文的结构和主要内容。
本文分成……个部分.
第一部分是……。这部分主要论述……
第二部分是……。这部分分析……
第三部分是……
最后,我想谈谈这篇论文和系统存在的不足。
这篇论文的写作以及修改的过程,也是我越来越认识到自己知识与经验缺乏的过程。虽然,我尽可能地收集材料,竭尽所能运用自己所学的知识进行论文写作,但论文还是存在许多不足之处,有待改进。请各位评委老师多批评指正,让我在今后的学习中学到更多。
4 x 4矩阵键盘识别
发表日期:2008-6-5
在单片机应用系统中,键盘是人机对话不可缺少的组件之一。在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。
4 x 4矩阵键盘是运用得最多的键盘形式,也是单片机入门必需掌握的一种键盘识别技术,下面我们就以实例来说明一下4 x 4矩阵键盘的识别方法。如下图所示,我们把按键接成矩阵的形式,这样用8个I/O口就可以对16个按键进行识别了,节省了I/O口资源。
谢谢!
我们的识别思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位输出高电平,即让P1口输出0xF0。扫描键盘的时候,我们读P1口,看P1是否还为0xF0,如果仍为0xF0,则表示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确认是否为0xF0,这是为了防止是抖动干扰造成错误识别,如果不是那就说明是真的有按键按下了,我们就可以读键码来识别到底是哪一个键按下了。
识别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出0x0F,即让P1口的低四位输出高电平,高四位输出低电平,然后读P1口的低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的键码。就可以知道是哪个键按下了。
case 0xee: k=12;break;
case 0xde: k=13;break;
case 0xbe: k=14;break;
case 0x7Байду номын сангаас: k=15;break;
}
}
}
}
void main(void)
{
unsigned char m=0;
unsigned char n=0;
while(1)
{
GetKey();//得到键值
m=k/10;//求出键值的十位
n=k&10;//求出键值的个位
P2=num[m];//P2口上的数码管显示键值的十位
P0=num[n];//P0口上的数码管显示键值的个位
}
}
各位老师,上午好!我叫……,是……级……班的学生,我的论文题目是……。论文是在……导师的悉心指点下完成的,在这里我向我的导师表示深深的谢意,向各位老师不辞辛苦参加我的论文答辩表示衷心的感谢,并对三年来我有机会聆听教诲的各位老师表示由衷的敬意。下面我将本论文设计的目的和主要内容向各位老师作一汇报,恳请各位老师批评指导。
P1=0x0f; //先对P3置数行扫描
if(P1!=0x0f) //判断是否有键按下
{
Delay_nms(10); //延时,软件去干扰
if(P1!=0x0f) //确认按键按下X = P3;
{
X=P1&0x0f; //保存行扫描时有键按下时状态
P1=0xf0; //列扫描
Y=P1&0xf0; //保存列扫描时有键按下时状态
case 0xdb: k=5; break;
case 0xbb: k=6; break;
case 0x7b: k=7; break;
case 0xed: k=8; break;
case 0xdd: k=9; break;
case 0xbd: k=10;break;
case 0x7d: k=11;break;
#include <reg52.h>
unsigned char num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极LED段码0~9
unsigned char k;
/*************延时Xms*****************/
相关文档
最新文档