一个比较怪异的问题, 595驱动,2块7*6的LED显示。 由于需要把个位数据移到中间显示,采取了shift_b595_out1(),双位的数据比较好处理,采取了shift_b595_out2.
现在的问题是,都能显示出正确的数据,但个位数据时比双位数明显暗淡很多,我现在怀疑是不是这两个移位函数的复杂度不一样?
595驱动还有其他的机关?
void shift_b595_out1(uchar *dat, uchar count)
{
SRCK =0;
RCK =0;
data_tp =dat[count];
for(i=0; i<16; i++)
{
switch(i)
{
case 3:
case 4:
case 5:
case 8:
case 9:
if(data_tp&0x80) // Ensure the effecient bit is the higher 5 bits.
SER_IN =1;
else
SER_IN =0;
data_tp <<=1;
SRCK =1;
_nop_();
_nop_();
SRCK= 0;
break;
default:
SER_IN =0;
SRCK =1;
_nop_();
_nop_();
SRCK =0;
break;
}
}
RCK= 1;
_nop_();
_nop_();
RCK= 0;
}
//write 2 bytes to 6b595
void shift_b595_out2(uchar *dat, uchar count1 , uchar count2)
{
SRCK =0;
RCK =0;
data_tp =dat[count1];
for(i=0; i<16; i++)
{
if(data_tp&0x80)
SER_IN =1;
else
SER_IN =0;
data_tp <<=1;
if(i==7)
data_tp =dat[count2];
SRCK =1;
_nop_();
_nop_();
SRCK= 0;
}
RCK= 1;
_nop_();
_nop_();
RCK= 0;
}
------解决方案--------------------
用同样的函数分别点亮各LED,看看亮度是否有差别,如果没有差别就是代码的问题了
------解决方案--------------------
2块7*6的LED显示?显示数字?
楼主还是把原理图贴出来。
至于亮暗,最可能怀疑的地方 就是驱动电流不够,
具体还得看原理图再确定。
另外最好把具体显示单位数字 和双位数字 对应的LED屏上具体的图形说下。
------解决方案--------------------