標(biāo)題: 單片機按鍵程序有時候觸發(fā)不了是為什么? [打印本頁]

作者: Nupo    時間: 2023-6-20 08:55
標(biāo)題: 單片機按鍵程序有時候觸發(fā)不了是為什么?
  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. }
復(fù)制代碼
有沒有大佬幫我看一下啊,按鍵有時候會觸發(fā)不了,呼吸燈和自動流水,都是在delay里加了keyscan,檢測到標(biāo)志位就break,拜求各位大佬了。!
作者: lkc8210    時間: 2023-6-20 11:05
呼吸燈和自動流水都不要用delay
作者: clzs19    時間: 2023-6-21 11:03
因為單片機執(zhí)行的速度過快,也由于程序的復(fù)雜程度使程序走到部分代碼階段會出不去,出不去就一直執(zhí)行.在你按按鍵和執(zhí)行中斷的時候剛好走進這個循環(huán)里,程序判斷當(dāng)然是進入中斷,然后中斷完了回來這個循環(huán)造成這個循環(huán)變死循環(huán)了.也就是你中斷改變了一些因子使程序原本那個循環(huán)的因子突然遭到改變而出不去.然后死循環(huán)了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1