C51

04-01 阅读 0评论

按键检测原理

  • 当按键未摁下时,输入芯片引脚的电平为高电平;按键摁下时,输入芯片引脚的电平为低电平
  • 因此,通过使用以下代码首先对KEY1进行位定义,检测对应P3.2引脚电平是否为低电平,即可判断摁键是否被摁下
    sbit KEY1 = P3.2; // 定义按键KEY1
    if (0 == KEY1) // 判断按键是否被摁下
    {
    	......按键摁下处理
    }
    

    按键去抖处理

    • 在开关切换的瞬间,在接触点会出现来回弹跳的现象,这种现象被称为抖动
    • 当单片机连接到按键的引脚上第一次检测到低电平时,先等待50ms,若低电平持续时间小于50ms,则将该输入信号视为抖动。若50ms后检测该引脚的电平仍为低电平,则判断为按键有效摁下
    • 对应的去抖代码如下
      if (0 == KEY1) // 第一次检测到KEY1按键被摁下
      {
      	DelayNms(50); // 等待约50ms后再次检测按键是否被摁下,消除按键抖动带来的影响
      	if (0 == KEY1)
      	{
      		...... // 确定按键被摁下,执行按键被摁下时的响应代码
      	}
      	else if (1 == KEY1)
      	{
      		...... // 按键没有被摁下
      	}
      }
      

      实例与代码解析

      1. 包含头文件
      #include 
      
      1. 位定义按键和LED
      sbit KEY1 = P3 ^ 2; // 定义按键KEY1
      sbit KEY2 = P3 ^ 3;
      sbit KEY3 = P3 ^ 4;
      sbit LED1 = P2 ^ 4; // 定义LED1
      sbit LED2 = P2 ^ 5;
      sbit LED3 = P2 ^ 6;
      
      1. 编写延时函数
      static void DelayNms(int nms); // 内部函数声明
      static void DelayNms(int nms)
      {
          unsigned int i, j;
          
          for (i = 0; i  
      
      1. 编写主函数
      void main()
      {
          LED1 = 0; // 打开LED1
          LED2 = 0;
          LED3 = 0;
          while (1)
          {
              if (0 == KEY1) // 第一次检测到KEY1按键被摁下
              {
                  DelayNms(50); // 等待约50ms后再次检测按键是否被摁下,消除按键抖动带来的影响
                  if (0 == KEY1)
                  {
                      LED1 = ~LED1; // 对LED1状态取反,改变LED1的亮灭状态
                      while (0 == KEY1); // 等待按键被弹起
                  }
              }
              
              if (0 == KEY2)
              {
                  DelayNms(50);
                  if (0 == KEY2)
                  {
                      LED2 = ~LED2;
                      while (0 == KEY2);
                  }
              }
              
              if (0 == KEY3)
              {
                  DelayNms(50);
                  if (0 == KEY3)
                  {
                      LED3 = ~LED3; 
                      while (0 == KEY3);
                  }
              }
          }
      }
      
      C51,C51,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,影响,状态,第1张
      (图片来源网络,侵删)
      C51,C51,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,影响,状态,第2张
      (图片来源网络,侵删)
      C51,C51,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,影响,状态,第3张
      (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]