- #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);
- }
- }