自己做着一个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);//¸ßμçƽê§Äü
Clean_595();//ÇåËø′æDÅÏ¢£¬oìμÆè«Ãe
while(1)
{
for(i=0;i<16;i++)
{
HC595_Send_Date_Up();
HC_138();
HC595_Send_Date_Down();
HC_138();
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>