|
不能读取ds1302的数据,.h文件没有问题
主程序代码在最下面
#include<reg52.h>
#include<lcd.h>
#include<i2c.h>
#include<intrins.h>
#include<stdio.h>
#include<ds1302.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit led1=P2^2;
sbit led2=P2^3;
sbit led3=P2^4;
uint8 num,num4,num5,key,mode,w;
uint16 i,j,m=0;
uint16 n=0;
uint8 a,b,c,d,e,f,g;
uint8 a1=1,a2=2,a3=3,a4=4,a5=5,a6=6;
uint8 x1=4,x2=5,x3=6,x4=7,x5=8,x6=9;
uint8 y1=6,y2=5,y3=4,y4=3,y5=2,y6=1;
uint8 z1=9,z2=8,z3=7,z4=6,z5=5,z6=4;
uint8 b1,b2,b3,b4,b5,b6;
uint8 dat1[]={1,2,3,4,5,6,7,8,9,0};
uint8 flag,r;
uint8 Q1,Q2,Q3,Q4,Q5,Q6;
uint8 L1,L2,L3,L4,L5,L6;
uint8 O1,O2,O3,O4,O5,O6;
uint8 U1,U2,U3,U4,U5,U6;
uint8 code table[]="open box";
uint8 Dispkaiji1[]="1.PASSWORD";
uint8 Dispkaiji2[]="2.IC";
uint8 cuowu1[]=" WRONG NUMBER ";
uint8 cuowu2[]=" TRY AGAIN! ";
uint8 Dispjiesuo1[]=" UNLOCKED ";
uint8 Dispjiesuo2[]=" SUCCESSFULLY!! ";
uint8 suosi[]=" DEADLOCK ";
uint8 xiugai1[]="INPUT OLD NUMBER";
uint8 xiugai2[]="INPUT NEW NUMBER";
uint8 xiugai3[]="ALREADY CHANGED!";
uint8 box1[]=" BOX1 UNLOCKED ";
uint8 box2[]=" BOX2 UNLOCKED ";
uint8 box3[]=" BOX3 UNLOCKED ";
uint8 box4[]=" BOX4 UNLOCKED ";
void delay(uint16 i)
{
while(i--);
}
void delay2s()
{
unsigned char x,y,z;
for(x=127;x>0;x--)
for(y=235;y>0;y--)
for(z=32;z>0;z--);
_nop_(); //if Keil,require use intrins.h
}
void password_input() //½«ÃÜÂëдÈëEEPROM
{
if(w==1)
{
At24c02Write(1,a1);
delay(10000);
Q1=At24c02Read(1);
At24c02Write(2,a2);
delay(10000);
Q2=At24c02Read(2);
At24c02Write(3,a3);
delay(10000);
Q3=At24c02Read(3);
At24c02Write(4,a4);
delay(10000);
Q4=At24c02Read(4);
At24c02Write(5,a5);
delay(10000);
Q5=At24c02Read(5);
At24c02Write(6,a6);
delay(10000);
Q6=At24c02Read(6);
}
if(w==4)
{
At24c02Write(19,z1);
delay(10000);
U1=At24c02Read(19);
At24c02Write(20,z2);
delay(10000);
U2=At24c02Read(20);
At24c02Write(21,z3);
delay(10000);
U3=At24c02Read(21);
At24c02Write(22,z4);
delay(10000);
U4=At24c02Read(22);
At24c02Write(23,z5);
delay(10000);
U5=At24c02Read(23);
At24c02Write(24,z6);
delay(10000);
U6=At24c02Read(24);
}
}
void password_output() //½«ÃÜÂëдÈëEEPROM
{
Q1=At24c02Read(1);a1=Q1;
delay(10000);
Q2=At24c02Read(2);a2=Q2;
delay(10000);
Q3=At24c02Read(3);a3=Q3;
delay(10000);
Q4=At24c02Read(4);a4=Q4;
delay(10000);
Q5=At24c02Read(5);a5=Q5;
delay(10000);
Q6=At24c02Read(6);a6=Q6;
U1=At24c02Read(19);x1=U1;
delay(10000);
U2=At24c02Read(20);x2=U2;
delay(10000);
U3=At24c02Read(21);x3=U3;
delay(10000);
U4=At24c02Read(22);x4=U4;
delay(10000);
U5=At24c02Read(23);x5=U5;
delay(10000);
U6=At24c02Read(24);x6=U6;
}
void UsartInit()
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0XF3;
ES=1;
EA=1;
TR1=1;
}
void delayms(uint16 xms)
{
uint16 i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void LcdDisplayshijian()
{
Ds1302ReadTime();
LcdWriteCom(0x80+0X40);
LcdWriteData('0'+TIME[2]/16); //ʱ
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[1]/16); //·Ö
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[0]/16); //Ãë
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //Äê
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16); //ÔÂ
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16); //ÈÕ
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)); //ÐÇÆÚ
}
void xianshi()
{
Ds1302ReadTime();
SBUF='2';while(TI==0);TI=0;
SBUF='0';while(TI==0);TI=0;
SBUF='0'+TIME[6]/16;while(TI==0);TI=0;
SBUF='0'+(TIME[6]&0x0f);while(TI==0);TI=0;//nian
SBUF='-';while(TI==0);TI=0;
SBUF='0'+TIME[4]/16;while(TI==0);TI=0;
SBUF='0'+(TIME[4]&0x0f);while(TI==0);TI=0;//yue
SBUF='-';while(TI==0);TI=0;
SBUF='0'+TIME[3]/16;while(TI==0);TI=0;
SBUF='0'+(TIME[3]&0x0f);while(TI==0);TI=0;//ri
SBUF='-';while(TI==0);TI=0;
SBUF='-';while(TI==0);TI=0;
SBUF='0'+TIME[2]/16;while(TI==0);TI=0;
SBUF='0'+(TIME[2]&0x0f);while(TI==0);TI=0;//shi
SBUF='-';while(TI==0);TI=0;
SBUF='0'+TIME[1]/16;while(TI==0);TI=0;
SBUF='0'+(TIME[1]&0x0f);while(TI==0);TI=0;//fen
SBUF='-';while(TI==0);TI=0;
SBUF='0'+TIME[0]/16;while(TI==0);TI=0;
SBUF='0'+(TIME[0]&0x0f);while(TI==0);TI=0;//miao
SBUF=' ';while(TI==0);TI=0;
}
void caiji1()
{
if(n==1)
{
a=g;
}
if(n==2)
{
b=g;
}
if(n==3)
{
c=g;
}
if(n==4)
{
d=g;
}
if(n==5)
{
e=g;
}
if(n==6)
{
f=g;
}
}
void caiji2()
{
if(n==1)
{
b1=g;
}
if(n==2)
{
b2=g;
}
if(n==3)
{
b3=g;
}
if(n==4)
{
b4=g;
}
if(n==5)
{
b5=g;
}
if(n==6)
{
b6=g;
}
}
void panduan()
{
switch(r)
{
case(1):
xianshi();
for(i=0;i<8;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF='1';while(TI==0);TI=0;
SBUF=0x0d;while(TI==0);TI=0;
SBUF=0x0a;while(TI==0);TI=0;break;
case(2):
xianshi();
for(i=0;i<8;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}SBUF='2';while(TI==0);TI=0;
SBUF=0x0d;while(TI==0);TI=0;
SBUF=0x0a;while(TI==0);TI=0;break;
case(3):
xianshi();
for(i=0;i<8;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}SBUF='3';while(TI==0);TI=0;
SBUF=0x0d;while(TI==0);TI=0;
SBUF=0x0a;while(TI==0);TI=0;break;
case(4):
xianshi();
for(i=0;i<8;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}SBUF='4';while(TI==0);TI=0;
SBUF=0x0d;while(TI==0);TI=0;
SBUF=0x0a;while(TI==0);TI=0;break;
}
}
void kaixiang()
{
if((a1==a)&&(a2==b)&&(a3==c)&&(a4==d)&&(a5==e)&&(a6==f))
{
led1=0; r=1;
m=0;
n=0;
a=10;
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(box1[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<16;j++)
{
LcdWriteData(Dispjiesuo2[j]);
}
mode=4;
} //box1
else if((x1==a)&&(x2==b)&&(x3==c)&&(x4==d)&&(x5==e)&&(x6==f))
{
led1=0; r=2;
m=0;
n=0;
a=10;
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(box2[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<16;j++)
{
LcdWriteData(Dispjiesuo2[j]);
}
mode=4;
} //box2
else if((y1==a)&&(y2==b)&&(y3==c)&&(y4==d)&&(y5==e)&&(y6==f))
{
led1=0;r=3;
m=0;
n=0;
a=10;
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(box3[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<16;j++)
{
LcdWriteData(Dispjiesuo2[j]);
}
mode=4;
} //box3
else if((z1==a)&&(z2==b)&&(z3==c)&&(z4==d)&&(z5==e)&&(z6==f))
{
led1=0;r=4;
m=0;
n=0;
a=10;
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(box4[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<16;j++)
{
LcdWriteData(Dispjiesuo2[j]);
}
mode=4;
} //box4
else
{
m++;
LcdWriteCom(0x01);
LcdWriteCom(0x80);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(cuowu1[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<16;j++)
{
LcdWriteData(cuowu2[j]);
}
if(m==3)
{
LcdWriteCom(0x01);
while(1)
{
led2=0;
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(suosi[i]);
}
}
}
}
}
void keyscan2()
{
P1=0x7f;
if(P1!=0x7f)
{
delay(1000);
if(P1!=0x7f)
{
key=P1&0x0f;
switch(key)
{
case 0x07: num=0;n++;break;
case 0x0b: num=1;n++;break;
case 0x0d: num=2;n++;break;
}
}
while(P1!=0x7f);
if(num==0)
{
LcdWriteData(0x30+dat1[num]);
g=1;
}
if(num==1)
{
LcdWriteData(0x30+dat1[num]);
g=2;
}
if(num==2)
{
LcdWriteData(0x30+dat1[num]);
g=3;
}
}
P1=0xbf;
if(P1!=0xbf)
{
delay(1000);
if(P1!=0xbf)
{
key=P1&0x0f;
switch(key)
{
case 0x07: num=3;n++;break;
case 0x0b: num=4;n++;break;
case 0x0d: num=5;n++;break;
}
}
while(P1!=0xbf);
if(num==3)
{
LcdWriteData(0x30+dat1[num]);
g=4;
}
if(num==4)
{
LcdWriteData(0x30+dat1[num]);
g=5;
}
if(num==5)
{
LcdWriteData(0x30+dat1[num]);
g=6;
}
}
P1=0xdf;
if(P1!=0xdf)
{
delay(1000);
if(P1!=0xdf)
{
key=P1&0x0f;
switch(key)
{
case 0x07: num=6;n++;break;
case 0x0b: num=7;n++;break;
case 0x0d: num=8;n++;break;
}
}
while(P1!=0xdf);
if(num==6)
{
LcdWriteData(0x30+dat1[num]);
g=7;
}
if(num==7)
{
LcdWriteData(0x30+dat1[num]);
g=8;
}
if(num==8)
{
LcdWriteData(0x30+dat1[num]);
g=9;
}
}
P1=0xef;
if(P1!=0xef)
{
delay(1000);
if(P1!=0xef)
{
key=P1&0x0f;
switch(key)
{
case 0x0b : num=9;n++;break;
case 0x07 : num=10;break;
case 0x0d : num=11;break;
case 0x0e : mode=4;break;
}
}
while(P1!=0xef);
if(num==9)
{
LcdWriteData(0x30+dat1[num]);
g=0;
}
if(num==10)
{
LcdWriteCom(0x01);
n=0;
a=b=c=d=e=f=0;
led1=1;
}
if(num==11)
{
if(mode==1)
{
kaixiang();
flag=1;
Ds1302ReadTime();
if(flag==1)
{
ES=0;
panduan();
}
ES=1;
flag=0;
//mode==1
}
if(mode==2)
{
}
if(mode==3)
{
if((a1==a)&&(a2==b)&&(a3==c)&&(a4==d)&&(a5==e)&&(a6==f))
{
led1=0;
LcdWriteCom(0x01);
w=1;
}
if((x1==a)&&(x2==b)&&(x3==c)&&(x4==d)&&(x5==e)&&(x6==f))
{
led1=0;
LcdWriteCom(0x01);
w=2;
}
if((y1==a)&&(y2==b)&&(y3==c)&&(y4==d)&&(y5==e)&&(y6==f))
{
led1=0;
LcdWriteCom(0x01);
w=3;
}
if((z1==a)&&(z2==b)&&(z3==c)&&(z4==d)&&(z5==e)&&(z6==f))
{
led1=0;
LcdWriteCom(0x01);
w=4;
}
else
{
m++;
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(cuowu1[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<16;j++)
{
LcdWriteData(cuowu2[j]);
}
if(m==3)
{
LcdWriteCom(0x01);
while(1)
{
led2=0;
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(suosi[i]);
}
}
}
}
} //mode==3
}
}
}
void keyscan3()
{
P1=0x7f;
if(P1!=0x7f)
{
delay(1000);
if(P1!=0x7f)
{
key=P1&0x0f;
switch(key)
{
case 0x07: num=0;n++;break;
case 0x0b: num=1;n++;break;
case 0x0d: num=2;n++;break;
}
}
while(P1!=0x7f);
if(num==0)
{
LcdWriteData(0x30+dat1[num]);
g=1;
}
if(num==1)
{
LcdWriteData(0x30+dat1[num]);
g=2;
}
if(num==2)
{
LcdWriteData(0x30+dat1[num]);
g=3;
}
}
P1=0xbf;
if(P1!=0xbf)
{
delay(1000);
if(P1!=0xbf)
{
key=P1&0x0f;
switch(key)
{
case 0x07: num=3;n++;break;
case 0x0b: num=4;n++;break;
case 0x0d: num=5;n++;break;
}
}
while(P1!=0xbf);
if(num==3)
{
LcdWriteData(0x30+dat1[num]);
g=4;
}
if(num==4)
{
LcdWriteData(0x30+dat1[num]);
g=5;
}
if(num==5)
{
LcdWriteData(0x30+dat1[num]);
g=6;
}
}
P1=0xdf;
if(P1!=0xdf)
{
delay(1000);
if(P1!=0xdf)
{
key=P1&0x0f;
switch(key)
{
case 0x07: num=6;n++;break;
case 0x0b: num=7;n++;break;
case 0x0d: num=8;n++;break;
}
}
while(P1!=0xdf);
if(num==6)
{
LcdWriteData(0x30+dat1[num]);
g=7;
}
if(num==7)
{
LcdWriteData(0x30+dat1[num]);
g=8;
}
if(num==8)
{
LcdWriteData(0x30+dat1[num]);
g=9;
}
}
P1=0xef;
if(P1!=0xef)
{
delay(1000);
if(P1!=0xef)
{
key=P1&0x0f;
switch(key)
{
case 0x0b : num=9;n++;break;
case 0x07 : num=10;break;
case 0x0d : num=11;break;
case 0x0e : mode=4;break;
}
}
while(P1!=0xef);
if(num==9)
{
LcdWriteData(0x30+dat1[num]);
g=0;
}
if(num==10)
{
LcdWriteCom(0x01);
n=0;
a=b=c=d=e=f=0;
led1=1;
}
if(num==11)
{
if(w==1)
{
a1=b1;
a2=b2;
a3=b3;
a4=b4;
a5=b5;
a6=b6;
}
if(w==2)
{
x1=b1;
x2=b2;
x3=b3;
x4=b4;
x5=b5;
x6=b6;
}
if(w==3)
{
y1=b1;
y2=b2;
y3=b3;
y4=b4;
y5=b5;
y6=b6;
}
if(w==4)
{
z1=b1;
z2=b2;
z3=b3;
z4=b4;
z5=b5;
z6=b6;
}
}
}
}
void chushi()
{
LcdWriteCom(0x80);
for(i=0;i<10;i++)
{
LcdWriteData(Dispkaiji1[i]);
}
LcdWriteCom(0x80+0x40);
for(j=0;j<4;j++)
{
LcdWriteData(Dispkaiji2[j]);
}
}
void keyscan1()
{
while(1)
{
chushi();
P1=0x7f;
if(P1!=0x7f)
{
delay(1000);
if(P1!=0x7f)
{
key=P1&0x0f;
switch(key)
{
case 0x0e: mode=1;break;
}
}
while(P1!=0x7f);
}
P1=0xbf;
if(P1!=0xbf)
{
delay(1000);
if(P1!=0xbf)
{
key=P1&0x0f;
switch(key)
{
case 0x0e: mode=2;break;
}
}
while(P1!=0xbf);
}
P1=0xdf;
if(P1!=0xdf)
{
delay(1000);
if(P1!=0xdf)
{
key=P1&0x0f;
switch(key)
{
case 0x0e: mode=3;break;
}
}
while(P1!=0xdf);
}
if(mode==1)
{
LcdWriteCom(0x01);
while(1)
{
caiji1();
keyscan2();
if(mode==4)
{
led1=1;
n=0;
delay2s();
LcdWriteCom(0x01);
break;
}
}
}
if(mode==2)
{
}
if(mode==3)
{
LcdWriteCom(0x01);
while(1)
{
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(xiugai1[i]); //old number
}
break;
}
LcdWriteCom(0x80+0x40);
while(1)
{
keyscan2();
caiji1();
if(mode==4)
{
led1=1;
n=0;
LcdWriteCom(0x01);
break;
} //fan hui
if(led1==0)
{
n=0;
break;
}
}
if(led1==0)
{
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(xiugai2[i]); //new number
}
led1=1;
LcdWriteCom(0x80+0x40);
while(1)
{
keyscan3(); //
caiji2();
password_input();
if(w==1)
{
if((a1==b1)&&(a2==b2)&&(a3==b3)&&(a4==b4)&&(a5==b5)&&(a6==b6))
{
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(xiugai3[i]);
}
mode=4;
m=0;
}
}
if(w==2)
{
if((x1==b1)&&(x2==b2)&&(x3==b3)&&(x4==b4)&&(x5==b5)&&(x6==b6))
{
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(xiugai3[i]);
}
mode=4;
m=0;
}
}
if(w==3)
{
if((y1==b1)&&(y2==b2)&&(y3==b3)&&(y4==b4)&&(y5==b5)&&(y6==b6))
{
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(xiugai3[i]);
}
mode=4;
m=0;
}
}
if(w==4)
{
if((z1==b1)&&(z2==b2)&&(z3==b3)&&(z4==b4)&&(z5==b5)&&(z6==b6))
{
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(xiugai3[i]);
}
mode=4;
m=0;
}
}
if(mode==4)
{
delay2s();delay2s();
n=0;
LcdWriteCom(0x01);
break;
}
}
}
}
}
}
void main()
{
LcdInit();
UsartInit();
Ds1302Init();
while(1)
{
LcdDisplayshijian();
if(mode==4)
{
mode=0;
led1=1;
n=0;
r=0;
LcdWriteCom(0x01);
while(1)
{
Ds1302ReadTime();
keyscan1();
}
}
}
}
void Usart() interrupt 4
{
RI=0;
flag=1;
}
|
|