ds1302程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit rs=P3^5; //1602读写选择信号
sbit lcden=P3^4;//1602使能信号
sbit rw=P3^6;
sbit wela=P2^7;//关数码管
sbit dula=P2^6;
sbit rd=P3^7;// 键盘按键
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit slk=P0^0;
sbit IO=P0^2;
sbit rst=P0^1;
uchar miao,shi,fen,n;
uchar read_1302(uchar);
void write_1302(uchar ,uchar );
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}char code table1[]=" 2011-11-30 MON";
uchar code table2[]=" 23:59:49 ";
void flash()
{;;}
void write_com(uchar com)//向1602写控制字
{
rs=0;
P0=com;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar dat)//向1602写数据
{
rs=1;
P0=dat;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
rd=0;
P0=0;
wela=0;//关数码管
dula=0;
rw=0;
write_com(0x38);//1602起始信号
flash();
write_com(0x0c);//开显示 关光标
flash();
write_com(0x06);//自动右移
flash();
write_com(0x01);//清屏
flash();
}
void display(uchar add,uchar temp)//在add中写入temp
{
uchar a,b;
a=temp/10;
b=temp%10;
write_com(0x80+0x40+add);
write_data(a+0x30);
write_com(0x80+0x40+add+1);
write_data(b+0x30);
}
void display2(uchar n1,uchar n2) //按键后控制1602显示
{
if(n2==1)
{ if(n1==1){ miao++; if(miao==60) miao=0;display(12,miao);write_com(0x80+0x40+13);}
if(n1==2){ fen++; if(fen==60) fen=0;display(9,fen);write_com(0x80+0x40+10); }
if(n1==3){ shi++;if(shi==24) shi=0; display(6,shi);write_com(0x80+0x40+7);}
}
if(n2==0)
{ if(n1==1){ if(miao==0) miao=59;else miao--;display(12,miao);write_com(0x80+0x40+13);}
if(n1==2){ if(fen==0) fen=59;else fen--;display(9,fen);write_com(0x80+0x40+10); }
if(n1==3){ if(shi==0) shi=23; else shi--;display(6,shi);write_com(0x80+0x40+7);}
}
}
void keyscan()//检测是否有按键
{
if(s1==0)
{
delay(5);
if(s1==0)
{
TR0=0;
n++;
if(n==4) {n=0; TR0=1;write_com(0x0c);}
if(n==1){write_com(0x80+0x40+13); write_com(0x0f); }
if(n==2){write_com(0x80+0x40+10) ; }
if(n==3){write_com(0x80+0x40+7) ; }
while(!s1);
}
}
if((s2==0)&&(n!=0))
{
delay(5);
if(s2==0)
{
display2(n,1);
while(!s2);
}
}
if((s3==0)&&(n!=0))
{
delay(5);
if(s3==0)
{
display2(n,0);
while(!s3);
}
}
}
void main()
{
uchar num;
init();
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(10);
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_data(table2[num]);
delay(10);
}
write_1302(0x8e,0);
write_1302(0x80,0x50);
write_1302(0x82,0x59);
write_1302(0x84,0x23);
while(1)
{
// keyscan();
miao=read_1302(0x81);
miao=miao/16*10+miao%16;
display(12,miao);
fen=read_1302(0x83);
fen=fen/16*10+fen%16;


