美文网首页
13 矩阵按键

13 矩阵按键

作者: aaa小菜鸡 | 来源:发表于2018-03-25 23:12 被阅读0次

单片机STC89C52学习——13 矩阵按键

汇总:00 单片机STC89C52学习
参考教程:普中科技

1 工作原理

1.1 矩阵按键的由来

使用较少IO口,控制较多按键 原理图

1.2 矩阵按键扫描原理

  1. 逐行扫描
    通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。
  2. 行列扫描(通常采用)
    通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,则通过接收的数据值,判断是哪一列有按键按下;然后反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是哪一行有按键按下。这样就能够确定是哪一个按键按下了。

1.3 将矩阵按键变为独立按键

如将S1、S5、S9、S13变为独立按键:
P13输出低电平,相当于独立按键的GND;控制P14~P17

2 程序:矩阵按键——LED后四位显示按下的矩阵按键

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;

#define GPIO_KEY P1// 矩阵键盘
// #define GPIO_DIG P0// 数码管
#define GPIO_LED P2// LED灯

u8 keyValue = 0x00;// 全局变量
// u8 code LEDSeg[] = {0x3f , 0x06 , 0x5b , 0x4f , 
//                  0x66 , 0x6d , 0x7d , 0x07 , 
//                  0x7f , 0x6f , 0x77 , 0x7c ,
//                  0x39 , 0x5e , 0x79 , 0x71};

void delay (u16 i)
{
    while (i --);
}

void keyMat()// 行列扫描
{
    u8 a = 0;// keil默认就是0
    GPIO_KEY = 0x0f;// 高四位低电平,低四位高电平
    if (GPIO_KEY != 0x0f)// 通过低四位判断是否按下
    {
        delay (1000);// 消抖
        if (GPIO_KEY != 0x0f)// 再次判断
        {
            GPIO_KEY = 0x0f;// 保险起见,可以再赋一次值
            // keyValue = keyValue | GPIO_KEY;// 记录低四位...不能这样记录
            switch (GPIO_KEY)
            {
                case 0x07:
                    keyValue = 0; break;
                case 0x0b:
                    keyValue = 1; break;
                case 0x0d:
                    keyValue = 2; break;
                case 0x0e:
                    keyValue = 3; break;
            }
            GPIO_KEY = 0xf0;
            // keyValue = keyValue | GPIO_KEY;// 记录高四位...不能这样记录
            switch (GPIO_KEY)
            {
                case 0x70:
                    keyValue = keyValue; break;
                case 0xb0:
                    keyValue += 4; break;
                case 0xd0:
                    keyValue += 8; break;
                case 0xe0:
                    keyValue += 12; break;
            }
            while ((a < 50) && (GPIO_KEY != 0xf0))// 松开才继续,或者超时
            {
                delay(1000);
                a ++;
            }   
        }
    }   
}

void main()
{
    // LSA = 0; LSB = 0; LSC = 0;
    while (1)
    {
        keyMat();
        GPIO_LED = ~keyValue;// 在LED上显示     
    }
}

效果:按下矩阵按键后,相应的LED灯亮

相关文章

  • 13 矩阵按键

    单片机STC89C52学习——13 矩阵按键 汇总:00 单片机STC89C52学习参考教程:普中科技 1 工作原...

  • A3. MTK矩阵按键

    首先查看原理图用的是gpio还是矩阵按键。 1. 矩阵按键 1.1 kernel更改 ① 先查看原理图,看下按键位...

  • 18.1.4

    讲了矩阵按键 中断的方式

  • 按键

    独立按键 复杂的按键程序 按键复用 矩阵键盘 应用编码器74ls148

  • 51单片机按键的使用

    一,按键的分类 1.1 我们常用的按键电路有独立按键和矩阵按键俩种形式,独立按键比较简单,他们各自与独立...

  • DIY 智能门控设备—入门篇01:矩阵键盘

    矩阵键盘简介 当设备所需按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。矩阵式结构的键盘,结构和...

  • 按键扫描-独立按键与矩阵按键

    按键介绍 我们通常提到按键,一般是指按键开关,也称为轻触开关。轻触开关是最常用的几种电子元器件之一,被各种电子产品...

  • 按键扫描-矩阵按键多按键扫描

    前言 上一章我们介绍了经典矩阵键盘的实现方法,但是示例程序中仅实现了单按键检测功能。虽说单按键已经基本可以覆盖矩阵...

  • 命题-第十一章-填空

    如图所示为4×4的矩阵式按键,其中绿色表示按键被按下,黑色表示按键未被按下。它的键值是______。 【答案】5【...

  • 2017-11-27

    今天我们学习了矩阵按键,矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复...

网友评论

      本文标题:13 矩阵按键

      本文链接:https://www.haomeiwen.com/subject/heikcftx.html