我写的JXI5020LED 驱动芯片,负责位选,段选由主控IO直接给。 单个跑是没问题,但是在while(1)循环跑就会一闪一闪的,现在...

2019-07-20 18:03发布

//*********************** 驱动 **********************************//
/*
函数名;JXI5020_A
函数参数:u16 num -- 芯片中16 output 的管脚的数据
函数返回值:无
函数功能:驱动JXI5020 整个A芯片,选择对应的位选
*/
void JXI5020_A(u16 num)
{
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
LSP
2019-07-20 23:13
//*********************** 驱动 **********************************//
/*
函数名;JXI5020_A
函数参数:u16 num -- 芯片中16 output 的管脚的数据
函数返回值:无
函数功能:驱动JXI5020 整个A芯片,选择对应的位选
*/
void JXI5020_A(u16 num)
{
        u8 i;
        u16 data=0;
       
        GPIOA->ODR |= (0X1<<12);  //OE  OUPUT LOW  不驱动LED灯电流
               
        for(i=0; i<16; i++)
        {
                data = num&0x8000;
               
                num = num<<1;
               
    if(data){JXI5020_bitA(1);}
                else{JXI5020_bitA(0);}
        }       
        GPIOA->ODR &= ~(0X1<<12);  //OE  OUPUT LOW  驱动LED灯电流
        Delay_us(100);           //控制此时间可调节LED灯的亮度
}


/*
函数名;JXI5020_bitA
函数参数:u8 data -- 位选的bit数据
函数返回值:无
函数功能:位选,往JXI5020 A芯片写入一个位选数据
*/
void JXI5020_bitA(u8 data)
{       
        GPIOA->ODR |= (0X1<<4);   //LE OUTPUT HIGH  JXI芯片不锁存
       
        GPIOA->ODR &= ~(0X1<<0);   //CLK LOW
        Delay_us(20);
       
        if(data == 0)
        {
                GPIOA->ODR &= ~(0X1<<1);   //DIN LOW
                NUM2MCOM(TESE);  //段选
        }
        else
        {
                GPIOA->ODR |= (0X1<<1);   //DIN HIGH
                NUM2MCOM(TESE);  //段选
        }
       
        GPIOA->ODR |= (0X1<<0);   //CLK HIGH
        Delay_us(20);
       
  GPIOA->ODR &= ~(1<<7);   //LE LOW
}

一周热门 更多>