電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 1705|回復(fù): 1
收起左側(cè)

[作業(yè)已審核] 第二次作業(yè) GPIO輸入輸出

[復(fù)制鏈接]

11

主題

47

帖子

375

積分

一級會員

Rank: 1

積分
375
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2021-4-24 17:57:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 LaoFan 于 2021-4-24 22:36 編輯

                           for延時
while (1)
  {  int i=0;
     for(i=0;i<5000000;i++);
     HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
     for(i=0;i<5000000;i++);
     HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);




                           輪詢記數(shù)點燈
while (1)
  {
    count++;
     if(count>=500000)
     {
       count=0;
       if(flg==0)
       {
         flg=1;
         HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);//高電平
       }
       else
       {
         flg=0;
         HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);//低電平
       }
     }




                           輪詢計數(shù)并列點燈
while (1)
  {
     count++;
     if(count>=500000)
     {
       count=0;
       if(flg==0)
       {
         flg=1;
         HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//高電平
       }
       else
       {
         flg=0;
         HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);//低電平
       }
     }

     count1++;
     if(count1>=1000000)
     {
       count1=0;
       if(flg1==0)
       {
         flg1=1;
         HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);//高電平
       }
       else
       {
         flg1=0;
         HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);//低電平
       }
     }




                                    按鍵消抖傳統(tǒng)延時
while (1)
  {
    switch(step)
    {
    case 0:
      {
        if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按鍵是否按下
        {
          for(uint32_t i=0;i<10000;i++);//延時
          if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按鍵是否按下
          {
            printf("按鍵按下\n");
            step=1;
          }   
        }
      }
      break;

    case 1:
      {
         if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按鍵是否松開
        {
          for(uint32_t i=0;i<10000;i++);//延時
          if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按鍵是否松開
          {
            printf("按鍵松開\n");
            step=0;
          }   
        }
      }

    }


                                按鍵消抖狀態(tài)機方式
while (1)
  {
    switch(step)
    {
    case 0:
      {
        if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按鍵是否按下
        {
          count++;
          if(count>=10000)//延時
          {
            count=0;
            printf("按鍵按下\n");
            step=1;
          }

         }  

        else
        {
          count=0;
        }
       }
       break;



    case 1:
      {
        if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按鍵是否松開
        {
           printf("按鍵松開\n");
            step=0;

        }
      }
      break;
    }

回復(fù)

使用道具 舉報

沙發(fā)
發(fā)表于 2021-4-25 09:03:02 | 只看該作者
狀態(tài)機+輪詢計數(shù)是實現(xiàn)并發(fā)處理的關(guān)鍵,不錯加油
回復(fù) 支持 反對

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表