根本就不需要消隐,因为4选16永远只能选中其一,选中的同时已经关闭了其它位,即使要用P1_0=1;P1_1=1;P1_2=1;P1_3=1这句话也可以优化成P0|=0xFF,动态扫描最重要是时间观念,更何况12个有点多。。。 我要看的是下面的函数 disp2();//扫描第一个数码管 上面的代码没有,看不出来什么问题.... 我觉得应该是类似这样的代码: DISPLAY_PORT = display_buffer[display_position]; 你的定时中断可以更优化些如下的示意代码: void isr_timer0(void) interrupt 1 { unsigned char code LED_SELECT[] = {0,1,2,3,4,5,6,7,8,9,10,11,12};
++display_position; display_position %= 12
DISPLAY_PORT = 0; // LED OFF P1 &= ~0x0F; P1 |=LED_SELECT[display_position]; // 选择位 DISPLAY_PORT = display_buffer[display_position]; // 送数据 } 上面的程序比你的执行要快,重要的是程序执行时间是固定,没有附加的抖动,你的程序如果要显示第12位,显然与第一位有区别。。。 以上随便说说。。。
|