电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1888|回复: 1
收起左侧

[作业已审核] 第二次作业 GPIO输入输出

[复制链接]

11

主题

47

帖子

375

积分

一级会员

Rank: 1

积分
375
发表于 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);




                           轮询记数点灯
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);//低电平
       }
     }




                           轮询计数并列点灯
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);//低电平
       }
     }




                                    按键消抖传统延时
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;
          }   
        }
      }

    }


                                按键消抖状态机方式
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;
    }

回复

使用道具 举报

24

主题

355

帖子

1677

积分

版主

Rank: 3Rank: 3

积分
1677
QQ
发表于 2021-4-25 09:03:02 | 显示全部楼层
状态机+轮询计数是实现并发处理的关键,不错加油
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表