4*4矩阵键盘的扫描原理
来源:互联网 发布:unity3d 自发光 编辑:程序博客网 时间:2024/05/21 06:52
初学者肯定要经历的一个实验就是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矩阵键盘的扫描原理
- 利用中断实现的4*4矩阵键盘扫描
- 51单片机的4x4矩阵键盘扫描例程(C51)
- 矩阵键盘的工作原理和扫描确认方式
- 4X4矩阵键盘扫描程序
- 4X4矩阵键盘扫描程序
- 单片机4×4矩阵键盘的工作原理与编程
- 4×4矩阵键盘的工作原理与编程
- 4乘4矩阵键盘扫描物理键值
- 基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!
- 再发一种基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数! .
- 矩阵键盘的扫描接口函数
- FPGA矩阵键盘的扫描方法
- 关于矩阵键盘扫描的理解
- 矩阵键盘扫描
- 矩阵键盘扫描程序
- 矩阵键盘扫描程序
- 矩阵键盘中断扫描
- MyBatis配置文件属性解析
- bzoj 2741: 【FOTILE模拟赛】L 分块+可持久化trie
- javascript语法
- aapt 工具的用法总结
- 数据库中minus的用法
- 4*4矩阵键盘的扫描原理
- websocket slb tcp 方式示例,解决slb无法使用平常http握手链接的问题
- 空间换时间小例子(1)
- 简单的JDBC连接数据库实现
- gcc和g++的区别__C++中的extern C""
- 一个完整的HTTP请求的七个步骤
- Spring Aop
- case 测试
- react flux的坑之(一) 页面调试报错webpackJsonp is not defined