找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 609|回复: 2
打印 上一主题 下一主题
收起左侧

单片机按键程序有时候触发不了是为什么?

[复制链接]
跳转到指定楼层
楼主
ID:582403 发表于 2023-6-20 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. void Key_Scan(void)
  2. {
  3.            if(S1 == 0)
  4.            {
  5.                                  Old_flag = S1;
  6.                                  gKeyCnt++;
  7.            }
  8.            else
  9.            {         
  10.                       if(Old_flag == 0)
  11.                       {
  12.                           Old_flag = S1;
  13.                                  if(gKeyCnt>3&&gKeyCnt<1000)
  14.                    {
  15.                                      if(gKeyValue < 10)
  16.                                      {
  17.                                                 gKeyValue++;
  18.                                      }
  19.                                             else
  20.                                             {
  21.                                                        gKeyValue = 0;
  22.                                             }
  23.                                  }
  24.                                 
  25.   //--------处理键值-------------------------
  26.                           switch(gKeyValue)
  27.                    {
  28.                                             case 0:                  
  29.                                             {
  30.                                                        Sleep_Flag = 0;
  31.                                                 break;
  32.                                             }
  33.                                             case 1:       
  34.                                             {
  35.                                                 Red = 0;
  36.                                                 break;
  37.                                             }
  38.                                             case 2:
  39.                                             {
  40.                                                        Green = 0;
  41.                                                 break;
  42.                                             }
  43.                               case 3:
  44.                                             {
  45.                                                        Red = 1;
  46.                                                 break;
  47.                                             }
  48.                                             case 4:
  49.                                             {
  50.                                                        Blue = 0;
  51.                                                 break;
  52.                                             }
  53.                                             case 5:
  54.                                             {
  55.                                                        Green = 1;
  56.                                                 break;
  57.                                             }
  58.                                             case 6:
  59.                                             {
  60.                                                        Red = 0;
  61.                                                        break;
  62.                                             }                                       
  63.                               case 7:
  64.                                             {
  65.                                                        Green = 0;
  66.                                          break;  
  67.                                             }
  68.                               case 8:
  69.                                             {
  70.                                                        Auto_Flag = 1;
  71.                                                        Red = 1;
  72.                                                        Green = 1;
  73.                                                        Blue = 1;
  74.                                          break;  
  75.                                             }  
  76.                               case 9:
  77.                                             {
  78.                                                        Auto_Flag = 0;
  79.                                                        Breath_Flag = 1;
  80.                                          break;  
  81.                                             }
  82.                               case 10:
  83.                                             {
  84.                                                        Breath_Flag = 0;
  85.                                                        Sleep_Flag = 0;
  86.                                          break;  
  87.                                             }         
  88.                    }
  89.                        Delay_Off();
  90.                       }
  91.                       else
  92.                       {
  93.                                  gKeyCnt = 0;
  94.                       }
  95.            }
  96. }
复制代码
有没有大佬帮我看一下啊,按键有时候会触发不了,呼吸灯和自动流水,都是在delay里加了keyscan,检测到标志位就break,拜求各位大佬了!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2023-6-20 11:05 | 只看该作者
呼吸灯和自动流水都不要用delay
回复

使用道具 举报

板凳
ID:1085324 发表于 2023-6-21 11:03 | 只看该作者
因为单片机执行的速度过快,也由于程序的复杂程度使程序走到部分代码阶段会出不去,出不去就一直执行.在你按按键和执行中断的时候刚好走进这个循环里,程序判断当然是进入中断,然后中断完了回来这个循环造成这个循环变死循环了.也就是你中断改变了一些因子使程序原本那个循环的因子突然遭到改变而出不去.然后死循环了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表