微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 谁能帮我看看我的数码管时钟加上24c02之后就显示不正常了?感谢~

谁能帮我看看我的数码管时钟加上24c02之后就显示不正常了?感谢~

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6D,0x7D,0x07,
                        0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 };
char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char TempData[8];
sbit duan=P2^2;
sbit wei=P2^3;
sbit SDA=P1^0;
sbit SCL=P1^1;
char  num,num1,num2,s,f,z,y=0,i,w;
void delay(int i)
{
        int j,k;
        for(j=i;j>0;j--)
                for(k=110;k>0;k--);
}
void dy()
{;;}
void init()
{
        SDA=1;
        dy();
        SCL=1;
        dy();
}
void start()
{
        SDA=1;
        dy();
        SCL=1;
        dy();
        SDA=0;
        dy();
}
void respons()
{
        char i;
        SCL=1;
        dy();
        while((SDA==1)&&i<255)i++;
        SCL=0;
        dy();
}
void stop()
{
        SDA=0;
        dy();
        SCL=1;
        dy();
        SDA=1;
        dy();
}
void write(char date)
{
        char i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                SCL=0;
                dy();
                SDA=CY;
                dy();
                SCL=1;
                dy();
        }
        SCL=0;
        dy();
        SDA=1;
        dy();
}
char read()
{
        char i,k;
        SCL=0;
        dy();
        SDA=1;
        dy();
        for(i=0;i<8;i++)
        {
                SCL=1;
                dy();
                k=(k<<1)|SDA;
                SCL=0;
                dy();
        }
        return k;
}
void t0() interrupt 1
{
        TH0=0x4c;
        TL0=0x00;
        num++;
}
char write_add(char address,char date)
{
                start();
                write(0xa0);
                respons();
                write(address);
                respons();
                write(date);
                respons();
                stop();               
}
char read_add(char address)
{
        unsigned        char date;
                start();
                write(0xa0);
                respons();
                write(address);
                respons();
                start();
                write(0xa1);
                respons();
                date=read();
                stop();
                return date;
}
char shixian();
main()
{
                init();
        //        delay(100);
                TMOD=0x01;
                TH0=0x4c;
                TL0=0x00;
                EA=1;
                ET0=1;
                TR0=1;
                z=read_add(1);
                delay(100);
                s=read_add(2);
                delay(100);
                f=read_add(3);
        /*                for(i=0;i<8;i++)
        {
                TempData[0]=table[(f/10)%10];//分解显示信息,               
                TempData[1]=table[f%10];
        //        TempData[2]=0x40;//分解显示信息,               
                TempData[3]=table[(s/10)%10];//分解显示信息,               
                TempData[4]=table[s%10];       
        //        TempData[5]=0x40;
                TempData[6]=table[(z/10)%10];//分解显示信息,               
                TempData[7]=table[z%10];
          if(y)
            {
         TempData[2]=0x40; //显示"-"
             TempData[5]=0x40;
                 }
          else
            {
             TempData[2]=0;
             TempData[5]=0;
                 }
                wei=1;       
                P0=weima[i];
                wei=0;
                duan=1;       
                P0=TempData[i];
                duan=0;       
                delay(2);
                }*/
                while(1)shixian();
}
char shixian()
{
        if(num==20)
        {
                num=0;
                y=~y;
                z++;
                write_add(1,z);
                num1++;               
                if(z==60)z=0;
        }                                       
        if(num1==60)
        {
                num1=0;       
                s++;
                write_add(2,s);
                num2++;if(s==60)s=0;               
        }                      
        if(num2==60)
        {
                num2=0;
                f++;
                write_add(3,f);
                if(f==24)f=0;               
        }
        for(i=0;i<8;i++)
        {
               
                TempData[0]=table[(f/10)%10]; //分解显示信息,            
                TempData[1]=table[f%10];
        //        TempData[2]=0x40;//分解显示信息,               
                TempData[3]=table[(s/10)%10];//分解显示信息,               
                TempData[4]=table[s%10];       
        //        TempData[5]=0x40;
                TempData[6]=table[(z/10)%10];//分解显示信息,               
                TempData[7]=table[z%10];
               
          if(y)
            {
         TempData[2]=0x40; //显示"-"
             TempData[5]=0x40;
                 }
          else
            {
             TempData[2]=0;
             TempData[5]=0;
                 }
                wei=1;       
                P0=weima[i];
                wei=0;
                duan=1;       
                P0=TempData[i];
                duan=0;       
                delay(2);
        }


}

应该是的程序的时序有问题

请问 在哪里有问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top