4*4矩阵键盘的扫描原理
初学者肯定要经历的一个实验就是4*4矩阵键盘的代码编写,大部分都是在学校里面,有现成的实验箱,基本不需要自己动脑子。上次遇到一个哥们,他说他用的是8031的实验箱,我当时就晕了。8031是8051的前身,那个芯片连ROM都没有,可以想象我们的学校都在拿什么教育祖国的花朵。废话少说,先上图:
对初学者来说这篇文章会有点难,可以先研究一下如何用51单片机点亮一个发光二极管和基于CPLD-EPF10K10LC84-4(84)的交通灯设计。首先要说明的一点,矩阵键盘的动态扫描确实略显复杂,不可能就是读一个端口数据,然后马上就出来结果。这需要对依次每一行的按键进行扫描、判断,然后得出结果。如上图所示,先扫描第一行,也就是S1,S2,S3,S4四个按键的状态。在PA口输入0XFE。
0XFE变成二进制是1111 1110,为了方便使用,记得每四个数之间加一个空格。1111 1110这个数据放到PA口上,假设这个时候S1被按下了,会出现什么情况?因为PA0是低电平,S1被按下之后S1导通,导致PA4的电平从1降到0,于是PA端口的数据就变成了1110 1110,换算成16进制就是0XEE。于是我们知道S1被按下了。
假设是S3被按下,会出现什么情况?没错,PA6的电平被拉低,PA的端口数据变成了1011 1110,也就是0XBE。这样,我们就知道了,每一行的每一个按键被按下的时候,都会有一个对应的独一无二的值。这就是矩阵键盘的扫描原理!送上一段源码,大家看着玩吧:
void matrixkeyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
转自:http://www.51hei.com/mcu/3815.html
4*4矩阵键盘的扫描原理相关推荐
- 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)
说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.键盘的分类 二.独立键盘的识别 三.一个读取独立按键状态的程序 四.矩阵键盘的识别 五. ...
- 4x3矩阵键盘扫描法c语言,四种4*4矩阵键盘的扫描方法
第一种:这种方法就是郭天祥书上教的扫描方法,很容易理解,但是程序比较长. P2=0xfe://给第一列送低电平 temp=P2: temp=temp&0xf0; while(temp!=0xf ...
- LINUX矩阵键盘简单介绍,介绍一种新型的矩阵键盘电路
这款新型的矩阵键盘电路,把传统的矩阵键盘与单片机的中断结合起来,提高了按键输入的响应,同时利用数码管作为显示终端,显示输入的按键值. 原理简介 普通的4X4矩阵键盘接口原理图如下图所示,可以控制16按 ...
- 51单片机矩阵键盘的控制原理-扫描及使用方式
矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...
- 51的矩阵键盘(4*4)的原理与实现
个人感觉,这个矩阵键盘的出现,就是为了减少串行口的使用,像这个4*4的矩阵键盘,8个串行口就可以控制16键,而如果是普通的则需要16个串行口,同样的效果,串行口的使用减少了一般,对于串行口资源紧张的情 ...
- VHDL矩阵键盘扫描数码管显示
VHDL矩阵键盘扫描数码管显示 一.新建一个工程 二.矩阵键盘 三.代码部分 四.仿真结果 一.新建一个工程 1.打开Quarteus,直接点击New Project izard. 2.选择存放路径和 ...
- 嵌入式开发—矩阵键盘原理及程序设计
文章目录 一.前言 1.矩阵键盘是什么 2.矩阵键盘的应用场景 3.矩阵键盘的替代品 3.矩阵键盘的优缺点 二.矩阵键盘按键检测原理 1.逐行逐列扫描法 2.反线法 三.矩阵键盘按键检测程序实现 一. ...
- 51单片机按键扫描程序汇编程序(独立按键与矩阵按键)(使用定时器)(可移植的汇编程序)矩阵键盘控制两个led数码管(汇编语言)与UART通信总结(上)
一,按键控制数码管 1四按键控制程序(汇编) (您的关注点赞是作者创作的最大动力哦) //******************************************************* ...
- 51单片机矩阵键盘——数码管显示
1.前言 当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了. 1.1实验现象 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0:按下矩阵键盘S2并松开,数码管第一位显示 ...
- 单片机(二):3个IO扩展n*8个IO,基于74hc595与74hc165的8x8矩阵键盘
3个IO通过一片74hc595扩展8个输出IO,3个IO通过一片74hc1655扩展8个输入IO,最终成为8X8的矩阵键盘.对于普通的矩阵键盘,再加入防止鬼键.消抖和按下与松开识别. 一.74hc59 ...
最新文章
- 在IIS上搭建WebSocket服务器(一)
- Storm具体的解释(二)、成为第一Storm申请书
- 两种方法可以达到背景图不缩放的效果
- shell脚本if参数太多_Shell脚本用for循环遍历参数的方法技巧
- gin redis 链接不上_php + redis 高并发商品秒杀 完整业务模拟流程 实现方案
- python logging模块的作用及应用场景_Python常用模块功能简介(三)logging
- 2010/9/12学习历程
- 温馨剪纸风三八妇女节PSD分层海报模板
- html语言考点,HTML知识点
- mysql数据上传apache_配置Apache服务器 数据库mySQL
- 训练集,测试集和验证集
- 变速齿轮Delphi实现
- Win10环境下完美卸载MySQL
- 基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料)
- 刚刚过去的六一,OPPO Find新机让一些“大孩子”忍不住落泪!
- python多元非线性回归_day-13 python库实现简单非线性回归应用
- webpack中文官网
- 射灯安装方法图解_射灯怎么安装?射灯安装离墙距离多少合适?射灯安装图解介绍!...
- JXTA学习!!JXTA P2P 2.4
- 小四轴——空心杯电机引起的电源干扰