TM1620驱动共阴极数码管不亮

采用AIP1620来驱动FJ3361AH共阴极数码管,数码管不亮。
尝试过TM1620替换AIP1620,数码管还是不亮
对比了芯片手册和很多实际例程,原理图上基本一致
各位物联网、嵌入式的帅哥美女们帮忙检查一下吧,不能理解问题出在哪了!
程序和原理图如下:

img

unsigned char Disp_SEG[]={0x3F,0x06,0x5B,0x4F,
                    0x66,0x6D,0x7D,0x07,
                    0x7F,0x6F};
 uint8_t show[12]; 

/* USER CODE BEGIN PV */
static void _delay_us( void )
{
    uint8_t i;
    for ( i = 0; i < 10; i++ );
}

/*********************************   
功能: 写入一个字节
**********************************/
void write(uint8_t wr_data)
{
     uint8_t i;
     SIG_I2C_STB_LOW() ;       //给有效的片选信号(片选信号是低电平有效)
     _delay_us();
     _delay_us();         
     for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据
     {
         SIG_I2C_SCL_LOW();
         _delay_us();_delay_us();
         if((wr_data&0x01)!=0) SIG_I2C_SDA_HIGH();
         else SIG_I2C_SDA_LOW();               
         _delay_us();_delay_us();
         SIG_I2C_SCL_HIGH();
         wr_data >>= 1;//移位数据,低位在前!
         _delay_us();
       }
}

void disp(uint8_t led[12])
{
    uint8_t h;
    SIG_I2C_STB_HIGH();
    SIG_I2C_SCL_HIGH();
    SIG_I2C_SDA_HIGH();

    write(0x02);//显示模式设置,设置为6GRID8SEG
    SIG_I2C_STB_HIGH();
    write(0x40);//写数据到显示寄存器,采用地址自动加一
    SIG_I2C_STB_HIGH();
    write(0xc0);//显示寄存器的00H单元开始
    for(h=0;h<12;h++)
    {    
        write(led[h]);//给显示寄存器送数据,
    }
    SIG_I2C_STB_HIGH();
    write(0x8e);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
}

void datatoshow1(uint8_t b1,uint8_t b2,uint8_t b3,uint8_t b4,uint8_t b5,uint8_t b6)
{ 
  uint8_t CODE[10] = {0xbf,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  //uint8_t CODE1[11] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x80};//带点
  show[0]=CODE[b1];
  show[2]=CODE[b2];
  show[4]=CODE[b3];
  show[6]=CODE[b4];
  show[8]=CODE[b5];
  show[10]=CODE[b6]; 
  disp(show);
}


void datatoshow2(uint32_t k)
{
    uint8_t CODE[11] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//不带点
    uint8_t CODE1[11] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x80};//带点
    if(k<10)
    {
        show[0]=CODE[10];
        show[2]=CODE1[10];
        show[4]=CODE[10];
        show[6]=CODE[10];
        show[8]=CODE1[10];
        show[10]=CODE1[k];
    }
    if((k>=10)&&(k<100))
    {
        show[0]=CODE[10];
        show[2]=CODE1[10];
        show[4]=CODE[10];
        show[6]=CODE[10];
        show[8]=CODE1[k/10];
        show[10]=CODE1[k%10];
    }
    if((k>=100)&&(k<1000))
    {
        show[0]=CODE[10];
        show[2]=CODE1[10];
        show[4]=CODE[10];
        show[6]=CODE[k/100];
        show[8]=CODE1[k/10%10];
        show[10]=CODE1[k%10];
    }
    if((k>=1000)&&(k<10000))
    {
        show[0]=CODE[10];
        show[2]=CODE1[10];
        show[4]=CODE[k/1000];
        show[6]=CODE[k/100%10];
        show[8]=CODE1[k%100/10];
        show[10]=CODE1[k%10];
    }
    if((k>=10000)&&(k<100000))
    {
        show[0]=CODE[10];
        show[2]=CODE1[k/10000];
        show[4]=CODE[k/1000%10];
        show[6]=CODE[k/100%10];
        show[8]=CODE1[k/10%10];
        show[10]=CODE1[k%10];
    }
    if((k>=100000))
    {
        show[0]=CODE[k/100000];
        show[2]=CODE1[k/10000%10];
        show[4]=CODE[k/1000%10];
        show[6]=CODE1[k/100%10];
        show[8]=CODE[k/10%10];
        show[10]=CODE1[k%10];
    }
    disp(show);
}

void clear(void)//清除显示
{
    uint8_t CODE[11] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//不带点
    show[0]=CODE[10];
    show[2]=CODE[10];
    show[4]=CODE[10];
    show[6]=CODE[10];
    show[8]=CODE[10];
    show[10]=CODE[10];
    disp(show);
}

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
  clear();
  HAL_Delay(200);
  datatoshow2(112233);
  HAL_Delay(2000);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
      
    /* USER CODE BEGIN 3 */
        datatoshow2(123456);
        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOD, LED4_Pin);
        HAL_GPIO_TogglePin(GPIOD, LED3_Pin);
           
  }
  /* USER CODE END 3 */
}

确认下电源部分飞个线是否能直接驱动点亮数码管,能就看看软件部分,是否管脚未复用,时钟没开启等原因,不能直接驱动点亮数码管那就硬件部分有问题,数码管有问题,电路设计或电源设计再看看

问题已解决:硬件上把STB、CLK、DIO上拉电阻和串联电阻去掉,数码管就可以亮了,亲测可用。