zoukankan      html  css  js  c++  java
  • 关于按键、矩阵键盘的相关知识

    1  普通按键

    第一种接线方法(带电源)

    当不触碰按键时,单片机的I/O口通过电阻接至正电源,此时线路无电流通过,I/O口为高电平。

    当触碰按键时,正电源通过电阻接至地,此时有电流通过,电压全部压在电阻上,电阻下端电压为0,即I/O口为低电平。

    1 if(!K)
    2 {
    3     delay(50);
    4     if(!K)
    5     {
    6         run();
    7     }
    8 }

    第二种接线方法(无电源)

    当不触碰按键时,单片机的I/O口悬空,但不为0(也有可能不为1),即非低电平状态。

    当触碰按键时,单片机的I/O口与地接通,此时I/O口为低电平。

    1 if(!K)
    2 {
    3     delay(50);
    4     if(!K)
    5     {
    6         run();
    7     }
    8 }

    2  矩阵键盘

    第一种接线方法(带电源)

    先进行键盘列扫描,如P2循环输出{0xef,0xdf,0xbf,0x7f},利用(P2 & 0x0f)判断有无按键压下,然后确定键值。

     1 char key_scan[]={0xef,0xdf,0xbf,0x7f};
     2 char key_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
     3 char getKey()
     4 {
     5     char i=0,j=0;
     6     for(i=0;i<4;i++)
     7     {
     8         P2=key_scan[i];//进行列扫描
     9         if((P2&0x0f)!=0x0f)//如果低四位不全为高电平,说明有键按下
    10         {
    11             for(j=0;j<16;j++)//依次循环,寻找键值
    12             {
    13                 if(key_buf[j]==P2)//将P2值与数组中的值做对比,若相等
    14                     return j;//则返回键值0~15
    15             }
    16         }
    17     }
    18     return -1;
    19 }

    第二种接线方法(无电源)

    与上述相似,只不过没有电源。原理相似,依然是循环进行列扫描,判断有键按下后,在寻找键值。

    用上述程序依然可以,下面用另一种方法实现。

     1 char key_scan[]={0xef,0xdf,0xbf,0x7f};
     2 char key_buf[]={0x0e,0x0d,0x0b,0x07};
     3 char getKey()
     4 {
     5     char i=0,j=0;
     6     for(i=0;i<4;i++)
     7     {
     8         P2=key_scan[i];//进行列扫描
     9         if((P2&0x0f)!=0x0f)//如果低四位不全为高电平,说明有键按下
    10         {
    11             for(j=0;j<4;j++)//依次循环,寻找键值
    12             {
    13                 if(key_buf[j]==(P2&0x0f))//将P2值与数组中的值做对比,若相等
    14                     retuen i+j*4;
    15             }
    16         }
    17     }
    18     return -1;
    19 }

    根据实践证明,不管矩阵键盘是否接电源,程序可以通用。

    程序及仿真:https://pan.baidu.com/s/1o9oBFvW

  • 相关阅读:
    ZOJ 3769 Diablo III(分组背包)
    HDU 1712 ACboy needs your help(分组背包入门题)
    POJ 1170 Shopping Offers(完全背包+哈希)
    HDU 4489 The King’s Ups and Downs
    [转] LINUX 三种网络连接模式
    [转] 软件架构
    [转] 支付宝系统架构内部剖析
    [转] pip镜像升级报警 -trust-host问题解决方案
    [转] Linux 查找文件内容
    [转] CentOS系统目录学习
  • 原文地址:https://www.cnblogs.com/qijunhui/p/8284001.html
Copyright © 2011-2022 走看看