关于矩阵键盘行列扫描的测试实验

作者: Deng_Wei | 来源:发表于2016-06-30 17:35 被阅读1420次

我会时常分享一些51的程序编写方法,有一定基础的可以来看看。如有不当之处,欢迎大家指正,一同进步。
矩阵键盘无非就是两种扫描方式,一为逐行扫描,二为行列一起扫描读取键值。先确定行后确定列的读取方法没有什么可讲的,我针对行列一起扫描来总结一下我常用的一些方法。
学习嵌入式或者说硬件一定是从硬件原理开始,因为矩阵键盘电路原理简单,网上讲解较多,我只附上原理图,重点跟大家交流一下程序部分。
下图就是矩阵键盘 由P1口控制,P10~P13为列 P14~P17为行。

矩阵键盘电路原理图

高四位输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。

/*******************************************************************************
* 函数名        : KeyDown
* 函数功能    : 检测有按键按下并读取键值
* 输入          : 无
* 输出        : 无
* 作者    : INK
* 日期地点    : NANKING
*******************************************************************************/
void KeyDown(void)
{
  char a=0;
  GPIO_KEY=0x0f;      // 位定义的引脚
  if(GPIO_KEY!=0x0f)  //读取按键是否按下
  {
    Delay10ms();      //延时10ms进行消抖
        if(GPIO_KEY!=0x0f) //再次检测键盘是否按下
          {
          //测试列
            GPIO_KEY=0X0F;
switch(GPIO_KEY)
        {  //此段程序只是为了确定列的值 方便在后面进行测试行的时候加减运算 获得具体案件的行列值 从而转换为按键值
case(0X07): KeyValue=0;break;//扫描第一列
case(0X0b): KeyValue=1;break;//按键第二列 是keyValue=1
case(0X0d): KeyValue=2;break;//按键第三列
case(0X0e): KeyValue=3;break;//按键第四列
         }
              //测试行 确定了列以后需要翻转 确定行 交叉确定键值
          GPIO_KEY=0XF0; //屏蔽高四位
switch(GPIO_KEY)
        {                      //已经进行过
case(0X70): KeyValue=KeyValue;break;//自己去看为什么是 0X70 列的时候又为什么是0X07 硬件相结合
case(0Xb0): KeyValue=KeyValue+4;break;  //键值是5  扫描第二行
case(0Xd0): KeyValue=KeyValue+8;break;  //键值是9  扫描第三行
case(0Xe0): KeyValue=KeyValue+12;break; //键值13  扫描第四行
        }   //其实最终返回的键值就是进行过加法运算的
while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测 松手 按键就是 f0
        {
          Delay10ms();
          a++;//防止程序死在 while循环里 利用a的值跳出循环,比较不错的双重保险办法 
        }
    }
  }
}

相关文章

  • 关于矩阵键盘行列扫描的测试实验

    我会时常分享一些51的程序编写方法,有一定基础的可以来看看。如有不当之处,欢迎大家指正,一同进步。矩阵键盘无非就是...

  • JAVA数组与异常处理

    1.实验内容 (1) 设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols...

  • 3D数学基础及图形开发(七)矩阵的行列式和逆

    矩阵的行列式 矩阵的行列式为一个标量。(只有方阵才存在行列式) 3x3的矩阵行列式计算: 为什么需要引入矩阵的行列...

  • P8矩阵

    矩阵 行列式 行列式可以计算方程组 用矩阵表示的便利性 数表形式 矩阵 行列式矩阵对比 行列式是一个数,矩阵是...

  • STM32 4*4矩阵按键

    本文章讲述了如何用STM32编写4*4矩阵按键程序,先简单介绍一下扫描的基本方法:1.反转法 2.行列扫描。本文主...

  • 高等代数理论基础28:矩阵乘积的行列式与秩

    矩阵乘积的行列式与秩 乘积的行列式 定理:设A,B是数域P上的两个矩阵,则 即矩阵乘积的行列式等于它的因子的行列式...

  • 矩阵2

    如何求解逆矩阵 2×2矩阵的逆矩阵一般形式 当行相加时矩阵行列式的规律 有相同行的行列式 有两行相同则行列式为0,...

  • 奇异矩阵

    没有逆矩阵的矩阵。行列式为0.

  • 线性代数笔记18

    行列式 与 特征值 行列式 行列式为零 矩阵是奇异的行列式不为零 矩阵是可逆的但是行列式的意义不止这点 交换行 会...

  • 3.矩阵和列表

    ①变换向量在数据库或矩阵中的顺序 将第四列gene向量变成第一列 矩阵创建,查看矩阵行列数,矩阵取子集,矩阵行列置...

网友评论

    本文标题:关于矩阵键盘行列扫描的测试实验

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