- 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不屏蔽的话,亮度足够,也没有了虚亮,但是滚动显示的时候有些灯会闪烁(即个别灯会跳动显示),不知道程序哪里可以改进,麻烦路过的各位指点指点,谢谢!以上是部分相关的程序。
|