stm32f1控制32*64led点阵的问题

2019-08-20 18:13发布

自己做着一个32*64点阵玩,程序如下,无外乎就是ABCD,OE,STB,CLK四个信号,我通过stm32开发板直接从引脚处接出来,考虑到了电路可能驱动不了,但是屏幕中有几行能闪,请教大神为什么?如果有源码那更好,借鉴借鉴。
屏幕里面芯片:增大电流驱动能力74HC245,行选芯片ICN2012,列选芯片ICN2025,希望大神们能帮忙知道下.
void Clean_595(void)
{
        int columnarr[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
        int send_data[64]={0};                              
        int i,j;
        STB(0);
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        send_data[j+i*8] = columnarr[i]%2;
                        columnarr[i] = columnarr[i]/2;
                }
        }

        for(i=0;i<64;i++)
        {
                R1(send_data);
                G1(send_data);
                R2(send_data);
                G2(send_data);
                Delay(1);
                CLK(1);
                Delay(1);
                CLK(0);
        }
        STB(1);
        Delay(1);
        STB(0);
}

void HC595_Send_Date_Up(void)
{
        int i,j;
        int send_data[64]={0};
  for(i=0;i<8;i++)
        {
        for(j=0;j<8;j++)
        {
                G1(send_data[j+i*8]);
                Delay(1);
                CLK(1);
                Delay(1);
                CLK(0);
        }
        }
        Delay(1);
        STB(1);
        Delay(1);
        STB(0);

}
void HC595_Send_Date_Down(void)
{
        int i,j;
  int columnarr[8]={0};
        int send_data[64]={0};

        STB(0);
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        send_data[j+i*8]=columnarr[i]%2;
                        columnarr[i]=columnarr[i]/2;
                }
        }

        for(i=0;i<64;i++)
        {
                R2(send_data);
                Delay(1);
                CLK(1);
                Delay(1);
                CLK(0);

        }
        Delay(1);
        STB(1);
        Delay(1);
        STB(0);
}

void HC_138(void)
{
        int rowarr[4] = {0};
        int i=0,j,rownum;

                EN(0);
                for(j=0;j<4;j++)
                {
                        rowarr[i] = rownum%2;
                        rownum = rownum/2;
                        i++;
                }

                LA(rowarr[0]);
                LB(rowarr[1]);
                LC(rowarr[2]);
                LD(rowarr[3]);
                EN(1);
}

int main(void)
{
        int i;
        EN(1);//&#184;&#223;μ&#231;&#198;&#189;ê§&#196;ü
        Clean_595();//&#199;&#229;&#203;&#248;′&#230;D&#197;&#207;¢£&#172;oìμ&#198;è&#171;&#195;e

        while(1)
        {
                for(i=0;i<16;i++)
                {
                        HC595_Send_Date_Up();
                        HC_138();
                        HC595_Send_Date_Down();
                        HC_138();
                }
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。