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

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

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

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

[復(fù)制鏈接]

11

主題

47

帖子

375

積分

一級(jí)會(huì)員

Rank: 1

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

                           for延時(shí)
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ù)點(diǎn)燈
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);//低電平
       }
     }




                           輪詢計(jì)數(shù)并列點(diǎn)燈
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)延時(shí)
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++);//延時(shí)
          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++);//延時(shí)
          if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按鍵是否松開
          {
            printf("按鍵松開\n");
            step=0;
          }   
        }
      }

    }


                                按鍵消抖狀態(tài)機(jī)方式
while (1)
  {
    switch(step)
    {
    case 0:
      {
        if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按鍵是否按下
        {
          count++;
          if(count>=10000)//延時(shí)
          {
            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;
    }

24

主題

355

帖子

1677

積分

版主

Rank: 3Rank: 3

積分
1677
QQ
沙發(fā)
發(fā)表于 2021-4-25 09:03:02 | 只看該作者
狀態(tài)機(jī)+輪詢計(jì)數(shù)是實(shí)現(xiàn)并發(fā)處理的關(guān)鍵,不錯(cuò)加油

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

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

本版積分規(guī)則


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