仿真ds12c887出现的怪现象,求各位高手指点迷津
我用proteus仿真了 ds12c887时钟芯片,51单片机控制,proteus使用7.7sp2破解版,出现了很奇怪的现象,如图所示;每次仿真开始后,分显示80多分,当秒走到60后,分秒变0就正常了,再有每天上午仿真时小时没问题,但下午仿真时
小时和887内部时间差两个小时。请各位高手指点
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P1^0;
sbit wei=P1^1;
sbit sz_as=P1^2;
sbit sz_rw=P1^3;
sbit sz_ds=P1^4;
sbit sz_cs=P1^5;
sbit s1=P3^5;
sbit s2=P3^6;
sbit s3=P3^7;
uchar s1num,flag;
char shi,fen,miao;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar shi,uchar fen,uchar miao)
{
uchar shi1,shi2,fen1,fen2,miao1,miao2;
shi1=shi/10;
shi2=shi%10;
fen1=fen/10;
fen2=fen%10;
miao1=miao/10;
miao2=miao%10;
P0=0xfe;
wei=1;
wei=0;
P0=table;
duan=1;
duan=0;
delay(5);
P0=0xfd;
wei=1;
wei=0;
P0=table;
duan=1;
duan=0;
delay(5);
P0=0xfb;
wei=1;
wei=0;
P0=0x40;
duan=1;
duan=0;
delay(5);
P0=0xf7;
wei=1;
wei=0;
P0=table;
duan=1;
duan=0;
delay(5);
P0=0xef;
wei=1;
wei=0;
P0=table;
duan=1;
duan=0;
delay(5);
P0=0xdf;
wei=1;
wei=0;
P0=0x40;
duan=1;
duan=0;
delay(5);
P0=0xbf;
wei=1;
wei=0;
P0=table;
duan=1;
duan=0;
delay(5);
P0=0x7f;
wei=1;
wei=0;
P0=table;
duan=1;
duan=0;
delay(5);
}
void write_sz(uchar add,uchar date)
{
sz_cs=0;
sz_as=1;
sz_ds=1;
sz_rw=1;
P2=add;
sz_as=0;
sz_rw=0;
P2=date;
sz_rw=1;
sz_as=1;
sz_cs=1;
}
uchar read_sz(uchar add)
{
uchar sz_date;
sz_as=1;
sz_ds=1;
sz_rw=1;
sz_cs=0;
P2=add;
sz_as=0;
sz_ds=0;
P2=0xff;
sz_date=P2;
sz_ds=1;
sz_as=1;
sz_cs=1;
return sz_date;
}
void init()
{
write_sz(0x0A,0x20);
write_sz(0x0B,0x06);
}
void keyscan()
{
if(s1==0)
{
delay(5);
if(s1==0)
{
s1num++;
flag=1;
while(!s1);
if(s1num==1)
{
wei=1;
P0=0xfc;
wei=0;
delay(300);
wei=1;
P0=0xff;
wei=0;
delay(300);
}
if(s1num==2)
{
wei=1;
P0=0xe7;
wei=0;
delay(300);
wei=1;
P0=0xff;
wei=0;
delay(300);
}
if(s1num==3)
{
wei=1;
P0=0x3f;
wei=0;
delay(300);
wei=1;
P0=0xff;
wei=0;
delay(300);
}
if(s1num==4)
{
s1num=0;
flag=0;
}
}
}
if(s1num!=0)
{
if(s2==0)
{
delay(1);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
shi++;
if(shi==24)
shi=0;
write_sz(4,shi);
}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sz(2,fen);
}
if(s1num==3)
{
miao++;
if(miao==60)
miao=0;
write_sz(0,miao);
}
}
}
if(s3==0)
{
delay(1);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
shi--;
if(shi==-1)
shi=23;
write_sz(4,shi);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sz(2,fen);
}
if(s1num==3)
{
miao--;
if(miao==-1)
miao=59;
write_sz(0,miao);
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();
if(flag==0)
{
keyscan();
shi=read_sz(4);
fen=read_sz(2);
miao=read_sz(0);
display(shi,fen,miao);
}
else
{
display(shi,fen,miao);
}
}
}
页:
[1]