谁能帮我看看我的数码管时钟加上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);
}
}
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);
}
}
应该是的程序的时序有问题
请问 在哪里有问题
