初学者肯定要经历的一个实验就是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矩阵键盘的扫描原理相关推荐

  1. 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)

    说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.键盘的分类 二.独立键盘的识别 三.一个读取独立按键状态的程序 四.矩阵键盘的识别 五. ...

  2. 4x3矩阵键盘扫描法c语言,四种4*4矩阵键盘的扫描方法

    第一种:这种方法就是郭天祥书上教的扫描方法,很容易理解,但是程序比较长. P2=0xfe://给第一列送低电平 temp=P2: temp=temp&0xf0; while(temp!=0xf ...

  3. LINUX矩阵键盘简单介绍,介绍一种新型的矩阵键盘电路

    这款新型的矩阵键盘电路,把传统的矩阵键盘与单片机的中断结合起来,提高了按键输入的响应,同时利用数码管作为显示终端,显示输入的按键值. 原理简介 普通的4X4矩阵键盘接口原理图如下图所示,可以控制16按 ...

  4. 51单片机矩阵键盘的控制原理-扫描及使用方式

    矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...

  5. 51的矩阵键盘(4*4)的原理与实现

    个人感觉,这个矩阵键盘的出现,就是为了减少串行口的使用,像这个4*4的矩阵键盘,8个串行口就可以控制16键,而如果是普通的则需要16个串行口,同样的效果,串行口的使用减少了一般,对于串行口资源紧张的情 ...

  6. VHDL矩阵键盘扫描数码管显示

    VHDL矩阵键盘扫描数码管显示 一.新建一个工程 二.矩阵键盘 三.代码部分 四.仿真结果 一.新建一个工程 1.打开Quarteus,直接点击New Project izard. 2.选择存放路径和 ...

  7. 嵌入式开发—矩阵键盘原理及程序设计

    文章目录 一.前言 1.矩阵键盘是什么 2.矩阵键盘的应用场景 3.矩阵键盘的替代品 3.矩阵键盘的优缺点 二.矩阵键盘按键检测原理 1.逐行逐列扫描法 2.反线法 三.矩阵键盘按键检测程序实现 一. ...

  8. 51单片机按键扫描程序汇编程序(独立按键与矩阵按键)(使用定时器)(可移植的汇编程序)矩阵键盘控制两个led数码管(汇编语言)与UART通信总结(上)

    一,按键控制数码管 1四按键控制程序(汇编) (您的关注点赞是作者创作的最大动力哦) //******************************************************* ...

  9. 51单片机矩阵键盘——数码管显示

    1.前言 当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了. 1.1实验现象 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0:按下矩阵键盘S2并松开,数码管第一位显示 ...

  10. 单片机(二):3个IO扩展n*8个IO,基于74hc595与74hc165的8x8矩阵键盘

    3个IO通过一片74hc595扩展8个输出IO,3个IO通过一片74hc1655扩展8个输入IO,最终成为8X8的矩阵键盘.对于普通的矩阵键盘,再加入防止鬼键.消抖和按下与松开识别. 一.74hc59 ...

最新文章

  1. 在IIS上搭建WebSocket服务器(一)
  2. Storm具体的解释(二)、成为第一Storm申请书
  3. 两种方法可以达到背景图不缩放的效果
  4. shell脚本if参数太多_Shell脚本用for循环遍历参数的方法技巧
  5. gin redis 链接不上_php + redis 高并发商品秒杀 完整业务模拟流程 实现方案
  6. python logging模块的作用及应用场景_Python常用模块功能简介(三)logging
  7. 2010/9/12学习历程
  8. 温馨剪纸风三八妇女节PSD分层海报模板
  9. html语言考点,HTML知识点
  10. mysql数据上传apache_配置Apache服务器 数据库mySQL
  11. 训练集,测试集和验证集
  12. 变速齿轮Delphi实现
  13. Win10环境下完美卸载MySQL
  14. 基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料)
  15. 刚刚过去的六一,OPPO Find新机让一些“大孩子”忍不住落泪!
  16. python多元非线性回归_day-13 python库实现简单非线性回归应用
  17. webpack中文官网
  18. 射灯安装方法图解_射灯怎么安装?射灯安装离墙距离多少合适?射灯安装图解介绍!...
  19. JXTA学习!!JXTA P2P 2.4
  20. 小四轴——空心杯电机引起的电源干扰

热门文章

  1. Windows电脑云便签敬业签左边的分类怎么展开?
  2. 线性表的链式存储结构基本操作代码实现
  3. 干货! IT项目管理过程详解(资料下载)
  4. iOS 逆向 越狱 砸壳 获取
  5. 用3DMAX制作《滚动的小球》
  6. RCWL-0516微波雷达感应开关
  7. matlab 伽马校正曲线,【图像处理知识复习】02伽马校正matlab,C++实现
  8. Matlab实现图像识别(九)
  9. 测试用例设计——场景法
  10. python catia二次开发_CATIA VBA二次开发教程|使用零件的Body生成Product