电子产业一站式赋能平台

PCB联盟网

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

[作业已审核] LaoFan 第三次作业 按键加减数码管

[复制链接]

11

主题

47

帖子

375

积分

一级会员

Rank: 1

积分
375
发表于 2021-4-29 22:49:35 | 显示全部楼层 |阅读模式
void SMG_TASK(void)
{
  static uint32_t count=0;
  static uint8_t step=0;

  switch(step)
  {
  case 0:
    {
      HAL_GPIO_WritePin(A1_GPIO_Port,A1_Pin,GPIO_PIN_SET);//打开位码     
      HC595_WriteData(numTab[index]);//写入数据段
      step=1;
    }
    break;

    case 1:
    {
     count++;
     if(count>=500000)//延时
     {
       count=0;
       step=0;
     }
    }
    break;
  }
}

void HC595_WriteData(uint8_t data)
{
  HAL_GPIO_WritePin(RCK_GPIO_Port,RCK_Pin,GPIO_PIN_RESET);//关闭锁存器接口

  for(uint8_t i=0;i<8;i++)
  {  
    HAL_GPIO_WritePin(SCK_GPIO_Port,SCK_Pin,GPIO_PIN_RESET);//关闭串型时钟接口

    if(data&0x80)//1000 0000 先存低位后存高位
    {
       HAL_GPIO_WritePin(DS_GPIO_Port,DS_Pin,GPIO_PIN_SET);//打开串型数据输入
    }
    else
    {
      HAL_GPIO_WritePin(DS_GPIO_Port,DS_Pin,GPIO_PIN_RESET);//关闭串型数据输入
    }


    HAL_GPIO_WritePin(SCK_GPIO_Port,SCK_Pin,GPIO_PIN_SET);//打开串型时钟接口
    data=data<<1;


  }
  HAL_GPIO_WritePin(RCK_GPIO_Port,RCK_Pin,GPIO_PIN_SET);//打开锁存器接口
}

static void TIME_TASK(void)
{
  static uint32_t count=0;
  count++;
  if(count>=100000)
  {
    count=0;
    index++;
    index=index%10;

  }
}


void KEY_UP_TASK(void)
{
  static uint32_t count=0;
  static uint8_t step=0;

  switch(step)
    {
    case 0:
      {
        if(HAL_GPIO_ReadPin( KEY_UP_GPIO_Port,KEY_UP_Pin)==GPIO_PIN_RESET)//判断是否按下按键
        {
          count++;
          if(count>=8000)
          {
            count=0;


              step=1;
          }
        }
        else
        {
          count=0;
        }
      }
      break;

    case 1:
      {
        if(HAL_GPIO_ReadPin( KEY_UP_GPIO_Port,KEY_UP_Pin)==GPIO_PIN_SET)//判断是否松开按键
        {
          if(index<9)
          {
            index++;
          }
          else
          {
            index=9;
          }
          step=0;
        }
      }
      break;
    }
}

void KEY_DOW_TASK(void)
{
  static uint32_t count=0;
  static uint8_t step=0;

  switch(step)
    {
    case 0:
      {
        if(HAL_GPIO_ReadPin( KEY_DOW_GPIO_Port,KEY_DOW_Pin)==GPIO_PIN_RESET)//判断是否按下按键
        {
          count++;
          if(count>=8000)
          {
            count=0;


              step=1;
          }
        }
        else
        {
          count=0;
        }
      }
      break;

    case 1:
      {
        if(HAL_GPIO_ReadPin( KEY_DOW_GPIO_Port,KEY_DOW_Pin)==GPIO_PIN_SET)//判断是否松开按键
        {
          if(index>0)
          {
            index--;
          }
          else
          {
            index=0;
          }
          step=0;
        }

      }
      break;
    }
}

1, 自己动手焊接能加深对电路的理解
2, 一开始对hc595的运行方式不了解一头雾水,查了点资料弄清楚工作模式后就很容易了


回复

使用道具 举报

24

主题

355

帖子

1677

积分

版主

Rank: 3Rank: 3

积分
1677
QQ
发表于 2021-4-30 09:03:11 | 显示全部楼层
对的,通过动手焊接,学到印象深刻的东西,不错加油
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


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