欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求助大佬,怎么利用一個按鈕來控制led點一下長亮點一下長滅 [打印本頁]

作者: hahawofeile    時間: 2024-11-26 14:24
標題: 求助大佬,怎么利用一個按鈕來控制led點一下長亮點一下長滅
我的這個程序有問題嗎?

屏幕截圖 2024-11-26 142338.png (25.4 KB, 下載次數: 0)

屏幕截圖 2024-11-26 142338.png

作者: IdeaMing    時間: 2024-11-26 21:14
  1. int main(void)
  2. {
  3.         u8 flag;

  4.         while(1)
  5.         {
  6.                 if(key==0)
  7.                 {
  8.                         if(flag)
  9.                         {
  10.                                 led=0;//滅
  11.                                 flag=0;
  12.                         }else
  13.                         {
  14.                                 led=1;//亮
  15.                                 flag=1;
  16.                         }
  17.                         while(key==0);
  18.                 }
  19.         }
  20. }
復制代碼

作者: tianxiazone    時間: 2024-11-26 21:44
第100行 寫錯了吧 ,這個邏輯有有點問題,  按鍵可以用中斷
作者: hahawofeile    時間: 2024-11-26 21:47
tianxiazone 發表于 2024-11-26 21:44
第100行 寫錯了吧 ,這個邏輯有有點問題,  按鍵可以用中斷

就是我這個按鍵接的地,所以按下去讀取的應該是0,所以用的reset,這個中斷是什么意思啊,請教一下,我們老師上可就講了這幾個函數》

作者: lkc8210    時間: 2024-11-26 23:21
有問題
沒消抖
沒松手檢測
作者: yaosongjin    時間: 2024-11-27 09:44
判斷按鍵里面加個延時再判斷一次就實現你的功能了,你目前的程序因為沒有延時,單片機跑太快按鍵可能會亂變燈
作者: zpwgf    時間: 2024-11-28 10:17
本帖最后由 zpwgf 于 2024-11-28 10:21 編輯

HAL_GPIO_TogglePin使用這個函數就方便撒。比如:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11) == 0)
    {
        HAL_Delay(10);
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11) == 0)
        {
            HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_10);
        }
    }
沒錯的話應該這樣也可以。當然,這樣不松手的話理論上會一直來回跳
作者: 會飛的魚KKK    時間: 2024-11-28 11:21
按按鍵的時間和HAL_Delay(150),最好延時時間大于按鍵時間,讓按一次只進入一次A11接地判定,還有A10一般做串口用,點燈有點大材小用了
作者: 會飛的魚KKK    時間: 2024-11-28 11:25
在第一個if里面加延時,保證按一次按鍵只執行第一個一次if
作者: hahawofeile    時間: 2024-11-28 15:33
會飛的魚KKK 發表于 2024-11-28 11:21
按按鍵的時間和HAL_Delay(150),最好延時時間大于按鍵時間,讓按一次只進入一次A11接地判定,還有A10一般做 ...

哈哈哈,小白一個,老師上課都沒講什么直接就讓我們寫了
作者: ohh132    時間: 2024-12-13 13:32
發表于 2024-11-28 15:33
哈哈哈,小白一個,
  1. u8 flag1 = 0;
  2. void key1_control (void)
  3. {
  4.         if (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0)
  5.         {
  6.                 delay_ms (10);
  7.                 if (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0)
  8.                 {
  9.                         while (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0) {}
  10.                         flag1++;
  11.                 }
  12.         }
  13.         if (flag1 % 2 == 1)
  14.                 GPIO_ResetBits (GPIOE, GPIO_Pin_2 | GPIO_Pin_3) ;
  15.         else
  16.                 GPIO_SetBits (GPIOE, GPIO_Pin_2 | GPIO_Pin_3);
  17. }
復制代碼





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