Mike_python小 发表于 2023-1-18 08:06:46

51单片机 独立按键与矩阵键盘

51单片机 独立按键与矩阵键盘


独立按键
独立按键位于普中开发版的右下角,有四个按键,为什么说他是独立按键呢?看原理图

每一个按键都有单门一个IO口(引脚),所以就叫他独立按键

接下来就是写代码判断按键是否被按下了~

从图中可以看到按钮K1的引脚为P31,所以我们只需要判断P31是否为0
if (P3_1 == 0)
然后总要表现点啥吧!,就把led点亮把!

#include <8052.h>


void main() {

    P2_0 = 0;
    while(1) {

      if (P3_1 == 0) {
            P2_0 = 0;
      }
      else {
            P2_0 = 1;
      }
      
    }

}

看效果:

按下的时候亮,松开的时候灭

这里有一个很重要的点
按钮他在按下的一瞬间回回弹几次,大概是20ms,所以在这按下去一瞬间后的20ms是不准确的,我们需要把这20ms过滤掉

接下来就是按下点亮,再按下熄灭!

#include <8052.h>

void Sleep(unsigned int xms)
{
    unsigned char i, j;

    while (xms)
    {
      i = 2;
      j = 199;

      do {
            while (--j);
      } while(--i);
      xms--;
    }

    // _nop_();


}


void main() {

    P2_0 = 0;
    while(1) {

      if (P3_1 == 0) {
            Sleep(30);
            while (P3_1==0);
            Sleep(30);

            if (P2_0 == 1) {
                P2_0 = 0;
            }
            else {
                P2_0 = 1;
            }
      }

    }

}

也就是这个玩意

矩阵键盘
遇事不要慌,先看原理图

由图可知,图中8个引脚控制16个按键,怎么实现监听一个按键呢?
有两种方法:纵向遍历和横向遍历
由于横向遍历可能受到舵机的干扰,在这里暂且不提

比如我们要判断S1是否被按下,与S1相关联的引脚有P17和P13
先给P17一个0,然后检测P13是否为0(因为两个都为0就是接通了)

#include <8052.h>


void main() {
    P1_3 = 0;
   while (1) {
      if (P1_7 == 0) {
         P2_0 = 0;
      }
    }


}


想要遍历所有的就留给你们了&#128523;

最后,如果有错误欢迎大佬们指出!

也可以在我的博客看哦~https://cxwindlight.online/

MIke_python小小 发表于 2023-1-18 08:20:59

支持,学习!

Python_tkinter 发表于 2023-1-18 08:21:15

Mike_python小 发表于 2023-1-18 08:21:32

Python_tkinter 发表于 2023-1-18 08:21
我爱51

{:5_109:}

tomok 发表于 2023-1-18 08:45:17

谢谢分享,学习

高山 发表于 2023-1-18 08:58:53

楼主学习速度好快

Python_tkinter 发表于 2023-1-18 09:15:43

Mike_python小 发表于 2023-1-18 09:15:59

Python_tkinter 发表于 2023-1-18 09:15
草,哥们这我小号

{:5_101:}
页: [1]
查看完整版本: 51单片机 独立按键与矩阵键盘