打印
[STM32F1]

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

[复制链接]
559|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qqjmjso|  楼主 | 2022-8-31 19:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"main.h"

const uint32_t SEG_SegPins[]=
{

        GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7,
};

const uint32_t SEG_DigPins[]=
{

        GPIO_PIN_8,GPIO_PIN_9,GPIO_PIN_10,GPIO_PIN_11,
};


void Seg_Init(void);
void Seg_DisplaySingleDigit(uint8_t n);
void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4);

int main(void)
{
uint32_t tsStart;
uint32_t counter=0;
uint8_t n1,n2,n3,n4;

HAL_Init();

Seg_Init();


while(1)
{
         tsStart=HAL_GetTick();

         n1=(counter/1000)%10;
         n2=(counter/100)%10;
         n3=(counter/10)%10;
         n4=counter%10;


         while(HAL_GetTick()-tsStart >=1000)
         {
                 Seg_DynamicScan(n1,n2,n3,n4);
         }
    counter++;
}

}


void Seg_Init(void)
{
        GPIO_InitTypeDef gpioinit;
        uint32_t i;

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

        __HAL_RCC_GPIOA_CLK_ENABLE();

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


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

                __HAL_RCC_GPIOA_CLK_ENABLE();

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

}

void Seg_DisplaySingleDigit(uint8_t n)
{

        const uint8_t font[]=
        {
                        0x3f,0x06,0x5B,0x4F,0x66,0x6D,0X7D,0X07,0X7F,0X6F
        };
     uint32_t i;
     for(i=0;i<8;i++)
     {
       if((font[n] & (0x1 << i))!=0)
       {

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

       }
       else
       {
               HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_RESET);
       }

     }
}


void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4)
{
     uint32_t i, j;
     uint8_t numbers[4];

     numbers[0]=n1;
     numbers[1]=n2;
     numbers[2]=n3;
     numbers[3]=n4;

     for(i=0;i<4;i++)
     {
      for(j=0;j<4;j++)
      {
             HAL_GPIO_WritePin(GPIOA,SEG_DigPins[j],GPIO_PIN_SET);
      }
      Seg_DisplaySingleDigit(numbers[i]);
      HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_RESET);
      HAL_Delay(10);

     }


}

使用特权

评论回复
沙发
c17| | 2022-8-31 23:58 | 只看该作者
必须将这两个管脚复用为普通的GPIO管脚,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

66

帖子

1

粉丝