数码管问题,初学者

2020-02-04 09:11发布

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define du P0
#define we P2

uint temp ,shi ,ge, numdu,tt ,bai ;
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0
x83,0xc6,0xa1,0x86,0x8e};
sbit control = P3^6 ;

void delay(uint z) ;
void display(uint bai ,uint shi ,uint ge) ;
void init() ;

void main()
{
        init() ;
        while(1)
        {
                if(tt==20)
                {
                        tt=0 ;
                        temp ++ ;
                        if(temp == 100)
                                temp = 0 ;
                        bai = temp/100 ;
                        shi = temp%100/10 ;
                        ge = temp%10 ;
                        display(bai,shi,ge) ;
                }
        }
       
}

void init()
{
        control = 0 ;
        temp = 0 ;
        TMOD = 0x01 ;
        TH0 = (65536-50000)/256 ;
        TL0 = (65536-50000)%256 ;
        EA = 1 ;
        ET0 = 1 ;                         
        TR0 = 1 ;                 
}

void display(uint bai ,uint shi ,uint ge)
{               
        control = 1 ;
        du = table[bai] ;
        we = 0xfe ;
        delay(5) ;                  
   
        du = table[shi] ;
        we = 0xfd ;
        delay(5) ;         

        du = table[ge] ;
        we = 0xfb ;
        delay(5) ;                  
}

void delay(uint z)
{
        uint x ,y ;
        for(x = 100 ;x > 0 ;x--)
                for(y = z ;y > 0 ;y--)        ;
}       

void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    tt++;       
}  

ps:我的单片机有P3^6同时控制位选和断选,位选为P0,断选为P2

问题:三个数码管不能同时显示,只能轮流跳着显示,即使delay加长也一样,但是用两个锁存器控制断选和位选的打开管脚,复用P0管脚这种设置的单片机不会出现我的情况。求解决办法?? 未命名.jpg (147.88 KB, 下载次数: 0) 下载附件 2012-4-16 15:59 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。