叨叨游戏网
您的当前位置:首页DS1302液晶显示实时时钟(附原理图)

DS1302液晶显示实时时钟(附原理图)

来源:叨叨游戏网


#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit io=P1^0;

sbit sck=P1^1;

sbit rst=P1^2;

sbit rs=P2^0;

sbit rw=P2^1;

sbit en=P2^2;

uchar writetime[]={10,1,8,23,11,3,20};

uchar writeadd[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};

uchar readadd[7]={0x8d,0x8b,0x,0x87,0x85,0x83,0x81};

void delay(uchar ms)

{

uchar x,y;

for(x=ms;x>0;x--)

for(y=110;y>0;y--);

}

void ds1302_write_byte(uchar date)

{

uchar i;

for(i=0;i<8;i++)

{

sck=0;

io=date&0x01;

date=date>>1;

sck=1;

}

}

void ds1302_write(uchar add,uchar date)

{

rst=0;_nop_();

sck=0;_nop_();

rst=1;_nop_();

ds1302_write_byte(add);

ds1302_write_byte(date);

rst=0;_nop_();

sck=0;_nop_();

io=1;sck=1;

}

uchar ds1302_read(uchar add)

{

uchar i,date;

rst=0;_nop_();

sck=0;_nop_();

rst=1;_nop_();

ds1302_write_byte(add);

for(i=0;i<8;i++)

{

date=date>>1;

sck=0;

if(io)

date=date|0x80;

sck=1;

}

rst=0;_nop_();

sck=0;_nop_();

io=1;sck=1;

return date;

}

void write_time()

{

uchar i,j,k;

for(i=0;i<7;i++)

{

j=writetime[i]/10;

k=writetime[i]%10;

writetime[i]=j*16+k;

}

ds1302_write(0x8e,0x00);

for(i=0;i<7;i++)

{

ds1302_write(writeadd[i],writetime[i]);

}

ds1302_write(0x8e,0x80);

}

void readtime()

{

uchar i;

for(i=0;i<7;i++)

{

writetime[i]=ds1302_read(readadd[i]);

}

}

void yj1602_write_com(uchar com)

{

en=0;delay(1);

en=1;delay(1);

rs=0;delay(1);

rw=0;delay(1);

P0=com;

en=0;delay(1);

}

void yj1602_write_date(uchar date)

{

en=0;delay(1);

en=1;delay(1);

rs=1;delay(1);

rw=0;delay(1);

P0=date;

en=0;delay(1);

}

void yj1602_init()

{

yj1602_write_com(0x38);

yj1602_write_com(0x0c);

yj1602_write_com(0x06);

yj1602_write_com(0x01);

}

void write_1602(uchar add,uchar date)

{

uchar shi,ge;

shi=date/16;

ge=date%16;

yj1602_write_com(0x80+add);

yj1602_write_date(0x30+shi); //0x30码制转换

yj1602_write_date(0x30+ge);

}

void deal_with()

{

yj1602_write_com(0x80+0);

yj1602_write_date('d');

delay(5);

yj1602_write_com(0x80+1);

yj1602_write_date('a');

delay(5);

yj1602_write_com(0x80+2);

yj1602_write_date('t');

delay(5);

yj1602_write_com(0x80+3);

yj1602_write_date('a');

delay(5);

yj1602_write_com(0x80+4);

yj1602_write_date(':');

delay(5);

write_1602(5,writetime[0]);

delay(5);

yj1602_write_com(0x80+7);

yj1602_write_date('-');

delay(5);

write_1602(8,writetime[2]);

delay(5);

yj1602_write_com(0x80+10);

yj1602_write_date('-');

delay(5);

write_1602(11,writetime[3]);

delay(5);

yj1602_write_com(0x80+0x40);

yj1602_write_date('t');

delay(5);

yj1602_write_com(0x80+0x40+1);

yj1602_write_date('i');

delay(5);

yj1602_write_com(0x80+0x40+2);

yj1602_write_date('m');

delay(5);

yj1602_write_com(0x80+0x40+3);

yj1602_write_date('e');

delay(5);

yj1602_write_com(0x80+0x40+4);

yj1602_write_date(':');

delay(5);

write_1602(0x40+5,writetime[4]);

delay(5);

yj1602_write_com(0x80+0x40+7);

yj1602_write_date(':');

delay(5);

write_1602(0x40+8,writetime[5]);

delay(5);

yj1602_write_com(0x80+0x40+10);

yj1602_write_date(':');

delay(5);

write_1602(0x40+11,writetime[6]);

yj1602_write_com(0x80+0x40+11);

delay(5);

}

void main()

{

yj1602_init();

write_time();

while(1)

{

readtime();

deal_with();

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容