[STM32F1] stm32 gpio直接驱动数码管做动态扫描没有反应

[复制链接]
449|0
 楼主| hdahd 发表于 2022-7-26 18:42 | 显示全部楼层 |阅读模式
  1. #include"main.h"

  2. const uint32_t SEG_SegPins[]=
  3. {

  4.         GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7,
  5. };

  6. const uint32_t SEG_DigPins[]=
  7. {

  8.         GPIO_PIN_8,GPIO_PIN_9,GPIO_PIN_10,GPIO_PIN_11,
  9. };


  10. void Seg_Init(void);
  11. void Seg_DisplaySingleDigit(uint8_t n);
  12. void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4);

  13. int main(void)
  14. {
  15. uint32_t tsStart;
  16. uint32_t counter=0;
  17. uint8_t n1,n2,n3,n4;

  18. HAL_Init();

  19. Seg_Init();


  20. while(1)
  21. {
  22.          tsStart=HAL_GetTick();

  23.          n1=(counter/1000)%10;
  24.          n2=(counter/100)%10;
  25.          n3=(counter/10)%10;
  26.          n4=counter%10;


  27.          while(HAL_GetTick()-tsStart >=1000)
  28.          {
  29.                  Seg_DynamicScan(n1,n2,n3,n4);
  30.          }
  31.     counter++;
  32. }

  33. }


  34. void Seg_Init(void)
  35. {
  36.         GPIO_InitTypeDef gpioinit;
  37.         uint32_t i;

  38.     //1.初始化数码管的段选引脚
  39.         gpioinit.Mode=GPIO_MODE_OUTPUT_PP;
  40.         gpioinit.Speed=GPIO_SPEED_FREQ_LOW;

  41.         __HAL_RCC_GPIOA_CLK_ENABLE();

  42.         for(i=0;i<8;i++)
  43.         {
  44.                 gpioinit.Pin=SEG_SegPins[i];
  45.         HAL_GPIO_WritePin(GPIOA,SEG_SegPins[i],GPIO_PIN_RESET);
  46.         HAL_GPIO_Init(GPIOA,&gpioinit);
  47.         }


  48.          //2.初始化数码管的位选引脚
  49.                 gpioinit.Mode=GPIO_MODE_OUTPUT_PP;
  50.                 gpioinit.Speed=GPIO_SPEED_FREQ_LOW;

  51.                 __HAL_RCC_GPIOA_CLK_ENABLE();

  52.                 for(i=0;i<4;i++)
  53.                 {
  54.                         gpioinit.Pin=SEG_DigPins[i];
  55.                 HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_SET);
  56.                 HAL_GPIO_Init(GPIOA,&gpioinit);
  57.                 }

  58. }

  59. void Seg_DisplaySingleDigit(uint8_t n)
  60. {

  61.         const uint8_t font[]=
  62.         {
  63.                         0x3f,0x06,0x5B,0x4F,0x66,0x6D,0X7D,0X07,0X7F,0X6F
  64.         };
  65.      uint32_t i;
  66.      for(i=0;i<8;i++)
  67.      {
  68.        if((font[n] & (0x1 << i))!=0)
  69.        {

  70.                HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_SET);

  71.        }
  72.        else
  73.        {
  74.                HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_RESET);
  75.        }

  76.      }
  77. }


  78. void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4)
  79. {
  80.      uint32_t i, j;
  81.      uint8_t numbers[4];

  82.      numbers[0]=n1;
  83.      numbers[1]=n2;
  84.      numbers[2]=n3;
  85.      numbers[3]=n4;

  86.      for(i=0;i<4;i++)
  87.      {
  88.       for(j=0;j<4;j++)
  89.       {
  90.              HAL_GPIO_WritePin(GPIOA,SEG_DigPins[j],GPIO_PIN_SET);
  91.       }
  92.       Seg_DisplaySingleDigit(numbers[i]);
  93.       HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_RESET);
  94.       HAL_Delay(10);

  95.      }


  96. }



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

本版积分规则

22

主题

105

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部