void Byte_Data_in(uchar R1_data) //595移位
{
uchar i;
for(i=0; i<8; i++)
{
R1_data <<= 1;
shift_dataR1= CY;
shift_clk = 0;
_nop_();
shift_clk = 1;
}
shift_clk = 0;
}
void ROW_138(uchar word, uchar gg, uchar noread) //138扫描显示
{
uchar i,j,k;
if(!noread)
{
for(i=0;i<8;i++) //移位存储显示内容
{
if(left)
{
mov1_mov(l_word*2, gg, i, word_buffer0, led_display_data);//左 滚动显示时移位函数
}
if(middle)
{
mov1_mov(m_word*2, gg, i, word_buffer1, led_display_data+l_word*32);//中 滚动显示时移位函数
}
if(right)
{
mov1_mov(r_word*2, gg, i, word_buffer2, led_display_data+l_word*32+m_word*32);//右 滚动显示时移位函数
}
}
}
for(i=0;i<8;i++)
{
for(j=0;j<word*2;j++)
{
for(k=2;k>0;k--)
{
Byte_Data_in(led_display_data[j*16+(k-1)*8+i]);
}
}
//EN = 1; //关显示,消隐
latch_clk= 0;
row138_A = i&1;
row138_B = i&2;
row138_C = i&4; //138行选
latch_clk= 1; //锁存时钟(上升沿有效)
EN = 0;
timer0_val(); //T0初值重置,开定时器T0,定时1ms
delay_us(280); //延时1.4ms
}
delay_us(980); //延时4.9ms
EN = 1;
}
void timer0_val() //T0初值重置,开定时器T0
{
TH0 = 0xF8;
TL0 = 0xCD; //定时器定时1ms
TR0 = 1; //开定时器
}
void timer0_intrrupt() interrupt 1 //定时器T0中断服务程序
{
TR0 = 0; //关定时器
EN = 1; //关138使能
}
程序是1/8扫描的,按照这些程序写,亮度足够,显示正常,就是有虚亮现象,如果把138扫描函数里面的EN=1不屏蔽的话,亮度足够,也没有了虚亮,但是滚动显示的时候有些灯会闪烁(即个别灯会跳动显示),不知道程序哪里可以改进,麻烦路过的各位指点指点,谢谢!以上是部分相关的程序。 |