本帖最后由 l846556966 于 2016-12-27 22:07 编辑
本人现在大四,毕业后工作已经签约了,但是公司不提供实习岗位,近来事情忙完了,想起之前帮别人装广告屏送给我的剩下一块单元模块,之前一直没有驱动过,后面就算驱动也是只能出一种颜色,这几天想起来,拿来耍耍。
先上图
我没有任何资料,只能看到上面的接口,后来从接口可以分析到有两路RGB,ABCDE行信号,一路时钟CLK,锁存信号LAT,片选信号CS,还有OE,这个一开始我不知道是啥,后来了解到这是灰度信号。
按照我的思维ABCDE五位二进制可以译码成32行,两路RGB正好可以扫到64行,我猜想就是选中一行然后RGB配合CLK串行发送数据,LAT锁存,32扫可以完成控制,手上有个STM32F103的板子,贴上部分代码。
void zhen(const uchar *p, uchar a)
{uchar j,k,m,dat,dat1;
uint i;
uint q,lie;
lie=40;
for(q=0;q<lie;q++)//列移动
{
for(i=0;i<a;i++) //移动速度
{ for(k=0x00;k<32;k++) //行扫描
{
OE=1;
for(m=0;m<8;m++) //发送一行数据
{ dat=*(p+lie*k+q+m); //上面32行数据
dat1=*(p+lie*k+q+m+lie*32);//下面32行数据
for(j=0;j<8;j++)// 发送一个字节
{ if(dat1&0x80)
{
B2=1;
R2=0;
G2=0;}
else
{
B2=0;
R2=0;
G2=0;}
if(dat&0x80)
{
B1=1;
R1=0;
G1=0;}
else
{
B1=0;
R1=0;
G1=0;}
dat=dat<<1;
dat1=dat1<<1;
CLK=0;
CLK=1;
}
}
GPIOF->ODR =((GPIOF->ODR &0XFFE0)|k);
LAT=0;
LAT=1;
OE=0;
Delay(10);
}
}
}
结果是这样的。
贴上代码和效果图
每次,只能控制灯亮与不亮,这是之前做的,只有这个效果,不能控制量多少,不能出各种颜色。
经过几天的思考,我想到了控制出各种颜色的办法,那就是每一行扫很多次,我这里选择扫描32次,把每个点RGB数据保存下来,当次数大于RGB值的时候关闭,这样就可以产生32*32*32种颜色,这个运算量非常大,用F103只能看到一个大概的图案,一行一行的,不完全,从同学那借来F407的板子,装上,下面是效果图
,,
最后贴上部分代码
void zhen(unsigned int l )
{
uchar i,j,k,m;
for(m=0;m<l;m++)
{for(k=0x00;k<32;k++) //行扫描
{
GPIOF->ODR =((GPIOF->ODR &0XFFE0)|k);
for(j=0;j<(32);j++)
{ LAT=0;
for(i=0;i<64;i++)
{
CLK=0;
if(j<RR1data[i+k*64]) R1=1;else R1=0;
if(j<GG1data[i+k*64]) G1=1;else G1=0;
if(j<BB1data[i+k*64]) B1=1;else B1=0;
if(j<RR2data[i+k*64]) R2=1;else R2=0;
if(j<GG2data[i+k*64]) G2=1;else G2=0;
if(j<BB2data[i+k*64]) B2=1;else B2=0;
CLK=1;
}
LAT=1;
OE=0;
Delay(brightness);
OE=1;
}
}
}
}
|