51单片机实现矩阵键盘行扫描

————————————————————————————————————————————

分类:

  • 按结构原理分:

    • 触点式开关按键
    • 无触点开关按键
  • 接入方式
    • 独立式按键
    • 矩阵式键盘

————————————————————————————————————————————

矩阵式键盘识别方法(行扫描法)

  • 检测列线的状态:

    列线Y4~Y7置高电平,行线Y0~Y3置低电平。只要有一列的电平为低,则表示键盘该列有一个或多个按键被按下。若所有列线全为高电平,则键盘中无按键按下。

  • 判断闭合按键所在的位置:

    行线置高电平,列线置低电平。检测行线的状态。

  • 举例:当按下第一行第一列的按键时
    • 行扫描,行线为低电平,列线为高电平,得到 1110 0000
    • 列扫描,行线为高电平,列线为低电平,得到 0000 1110
    • 将得到的结果进行或运算,得到 1110 1110,对应第一行第一列,十六进制为0xEE
  • 按键表



bin


hex


1


1


1110 1110


0xEE


1


2


1101 1110


0xDE


1


3


1011 1110


0xBE


1


4


0111 1110


0x7E


2


1


1110 1101


0xED


2


2


1101 1101


0xDD


2


3


1011 1101


0xBD


2


4


0111 1101


0x7D


3


1


1110 1011


0xEB


3


2


1101 1011


0xDB


3


3


1011 1011


0xBB


3


4


0111 1011


0x7B


4


1


1110 0111


0xE7


4


2


1101 0111


0xD7


4


3


1011 0111


0xB7


4


4


0111 0111


0x77

————————————————————————————————————————————

矩阵式键盘应用实例

实现结果:

通过4*4矩阵键盘对应数码管显示0~F

设计思路:

  • 当检测到按键被按下时,将此时行扫描的结果存入临时变量,再进行列扫描,得到的结果和临时变量进行或运算。
  • 通过数组存放按键和数码管编码,行列扫描得到结果后遍历数组,找到对应的编码位置并显示数码管编码

实现代码:

 1 #include <reg52.h>
 2 typedef unsigned char uchar;
 3 typedef unsigned int uint;
 4 uchar code KEY_TABLE[] =
 5 {
 6     0xEE, 0xDE, 0xBE, 0x7E,
 7     0xED, 0xDD, 0xBD, 0x7D,
 8     0xEB, 0xDB, 0xBB, 0x7B,
 9     0xE7, 0xD7, 0xB7, 0x77
10 };
11 uchar code TABLE[] =
12 {
13     0x3F, 0x06, 0x5B, 0x4F,
14     0x66, 0x6D, 0x7D, 0x07,
15     0x7F, 0x6F, 0x77, 0x7C,
16     0x39, 0x5E, 0x79, 0x71,
17 };
18 void Delay(uchar m)
19 {
20     --m;
21 }
22 void main()
23 {
24     uchar temp, key, i;
25     while(1)
26     {
27         P3 = 0xF0;
28         if (P3 != 0xF0)
29         {
30             Delay(2000);
31             if (P3 != 0xF0)
32             {
33                 temp = P3;
34                 P3 = 0x0F;
35                 key = temp | P3;
36                 for (i = 0; i < 16; ++i)
37                     if (key == KEY_TABLE[i])
38                         break;
39                 P2 = TABLE[i];
40             }
41         }
42     }
43 }
时间: 2024-10-14 13:14:53

51单片机实现矩阵键盘行扫描的相关文章

51、52单片机使用矩阵键盘

为了学习矩阵键盘,先做个小小的实验目标 : 按下矩阵键盘后 ,数码管显示按下的是第几键. 我的矩阵键盘是4X4的,操作原理是先检测按下的键是哪行.再确定是哪列.这样就能识别是按的哪个键了. 首先看电路图,确定键盘是连CPU的哪个针.我的开发板上是连接的P1,具体是P10~P17,八个针对应逻辑的8位. (此处省略,直接贴代码) #include<reg52.h>void delay(int n);void juzhen(void); char duanxuan[16]={0x3f,0x06,0

单片机入门-矩阵键盘控制数码管显示

任务简述:通过按下4X4矩阵键盘实现数码管对应显示数字 实现方式:通过行列分接法,可以节省使用单片机的I/O口,扫描矩阵键盘是否有按下,判断P2端口得到的值. protues 硬件系统 单片机晶振复位电路: 锁存器.上拉电阻: 4x4矩阵键盘: 代码实现: void key44scan(void)//键盘扫描函数 { uint t; P2=0xfe; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xee:keynum

AVR单片机教程——矩阵键盘

本文隶属于AVR单片机教程系列. ? 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称

单片机 &amp; 4&#215;4矩阵键盘 &amp; 4位串行595数码管显示

1 #include ? <reg52.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 //Led数码管数 5 sbit DIO = P2^0;//串行数据输入 6 sbit LRCLK = P2^1;//时钟脉冲信号——上升沿有效 7 sbit LSCLK = P2^2;//打入信号————上升沿有效 8 unsigned char code LED_0F[] = 9 {// 0 1 2 34 5 6 78 9 A

51单片机第四弹---矩阵键盘

原理图: 原理: 和独立键盘相似 /******************************************************************************* * 实 验 名 : 矩阵键盘实验 * 使用的IO : 数码管使用P0 矩阵键盘使用P3 * 实验效果 : 显示独立键盘的按键值 * 注 意 : *******************************************************************************/

51单片机的数码管和矩阵键盘

使用4*4的矩阵键盘和一个数码管 在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符. //4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include<reg51.h> typedef unsigned char UINT8; UINT8 i=100; UINT8 j,k,temp,key; void delay(unsigned char i) { for(j=i;j>0;j--) for(k=125;k>0;k--); } UINT8 cod

十天学会单片机Day2键盘检测(独立键盘、矩阵键盘)

1.键盘的分类 编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘 非编码键盘:靠软件编程来识别的称为非编码键盘.独立键盘.矩阵键盘 2.按键消抖              如图,理想波形与实现波形之间是有区别的.实际波形在按下和释放的瞬间都有抖动现象,抖动事件的长短与按键的机械特性有关,一般为5~10ms.通常我们手动按下键然后立即释放,这个动作中稳定闭合时间超过20ms.因此检测键盘是否按下时,需加上去抖动操作. 一般有两种消抖方式: 硬件消

疑问----单片机矩阵键盘行列反转扫描法

学到矩阵键盘这一块对网上别人写的C代码有些疑问,希望有能看到的大牛帮助解答. 矩阵键盘和独立键盘原理图: 原理:对于图右侧的矩阵键盘,把P3口的低四位(P3.0 ~ P3.3)和高四位(P3.4 ~ P3.7)分别置1,只要有按键被按下,那么与之对应的P3口某一位将由高电平被拉低,两次分别测得了行值和列值即确定了哪一个按键被按下了. 比如:先把低四位赋高电平即 P3 = 0000_1111 假如 S15 被按下了,那么 P3.2 就被拉成低电平即 P3 = 0000_1011 ,此时再把高四位赋

单片机第8课:矩阵键盘扫描

JP3接P0,VCC接+5V,矩阵键盘的左边八个引脚接在P1上面.想要的结果是按第0个按键,数码管显示0,以此类推.注意,这里的数码管是共阳极的. #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa