帮我看看程序,两组数码管同时显示为什么不行?显示一...

2019-07-15 20:27发布

本帖最后由 wo_yjk 于 2014-3-26 17:44 编辑

void disp()//DS1302 display
{
           uchar i;
                        display_code[0]=code2[time[0]/10];//
                        display_code[1]=code2[time[0]%10];
                        display_code[2]=code2[time[1]/10];
                        display_code[3]=code2[time[1]%10];
                        display_code[4]=code2[time[2]/10];
                        display_code[5]=code2[time[2]%10];
                for(i=0;i<4;i++)                              
                            {        
                                            dula1=1;
                                            P1=display_code;
                                            dula1=0;        
                                            wela1=1;
                                            P1=bit_code;
                                            wela1=0;                                                        
                                            delay1ms(3);
                            }
}
void display(uchar temp1,uchar temp2)// other display
{        
                uchar yi,er,san,si,wu,liu,qi;
                yi=temp2/1000;
                er=temp2%1000/100;
                san=temp2%1000%100/10;
                si=temp2%10;
                wu=temp1/100;
                liu=temp1%100/10;
                qi=temp1%10;        
                dula2=1;
                P0=code1[yi];
                dula2=0;
                P0=0xff;
                wela2=1;
                P0=0xfe;
                wela2=0;        
                delay1ms(2);                              //下边有七个类似的显示方式。
}
void main(void)
{
                temp1=0;
                temp2=0;
                InitTimer0();
                set_rtc();
                while(1)
        {
         gettime();
         disp();//这个显示函数显示1302的时间            第一组 由P1口控制两个锁存器,控制段选和位选
        display(temp1,temp2)     ;//显示另外的七个数码管前四个共阴极,后三个共阳极。      由P0口控制两个锁存器,控制段选和位选
}
}
void Timer0Interrupt() interrupt 1
{
        TH0 = 0x3C;
        TL0 = 0x0B0;
        a++;
        if(a==20)
            {
                        a=0;
                        temp1++;
                        flag=1;
                        if(temp1==999)
                                temp1=0;        
            }
                if(temp1<30)
                                temp2=50;
                   if(temp1>30)         
                              temp2=50+(temp1-30)*1.5;
}
为什么只显示其中一组显示就可以,两组同时就不行?第一组是P0口,第二组是P1口。code1是共阴极数码管   code2是共阳极的。或者两个同时显示的时候让P0或者P1的两个锁存器的LE端接地,另外的就可以显示正常??为什么?


电路图 电路图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。