|
# include <reg52.h>
# define uchar unsigned char
# define uint unsigned int
sbit lcden = P3^4;
sbit rs = P3^5;
sbit wr = P3^6;
sbit rst = P1^0;
sbit io = P1^1;
sbit sclk = P1^2;
uchar code dage[] = "2017-11-17 FRI";
uchar code dage1[] = " : : ";
uchar miao, fen, shi, i;
/* *** 函數(shù)聲明 ****/
void display();
void write_sfm(uchar, uchar);
void Send_595(uchar);
void delay(uint);
void write_com(uchar);
void write_date(uchar);
void write_byte(uchar);
void init_lcd();
void set_ds1302();
uchar read_ds1302(uchar);
uchar read_byte();
void main()
{
init_lcd();
set_ds1302();
while(1)
{
display();
}
}
void delay(uint z)
{
uint x, y;
for(x=z; x>0; x--)
for(y=110; y>0; y--);
}
/****** 往1602液晶 寫入指令 ****/
void write_com(uchar com)
{
rs = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
/***** 1602液晶 初始化 ******/
void init_lcd()
{
/*Send_595(0xff);
Send_595(0x00);
P_HC595_RCLK = 0;
P_HC595_RCLK = 1;*/
wr = 0;
lcden = 0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
for(i=0; i<16; i++)
{
write_date(dage[i]);
delay(5);
}
write_com(0x80+0x40);
for(i=0; i<13; i++)
{
write_date(dage1[i]);
delay(5);
}
}
/* *****往1602液晶寫入數(shù)據(jù) ****** */
void write_date(uchar date)
{
rs = 1;
P0 = date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
/****** DS1302 中寫入一個字節(jié) ***/
void write_byte(uchar date)
{
uchar i, temp;
temp = date;
for(i=0; i<8; i++)
{
if((temp&0x01) == 1)
io = 1;
else
io = 0;
sclk = 1;
sclk = 0;
temp >>= 1;
}
}
/*****′ ***/
uchar read_byte()
{
uchar i, temp;
for(i=0; i<8; i++)
{
temp>>=1;
if(io == 1)
temp|=0x80;
sclk = 1;
sclk = 0;
}
return temp;
}
/***** Ö¸¶¨Î»ÖÃD′ ****/
void write_ds1302(uchar addr, uchar date)
{
rst = 0;
sclk = 0;
rst = 1;
write_byte(addr);
write_byte(date);
sclk = 1;
rst = 0;
}
/****** Ö¸¶¨Î»Ööá ***/
uchar read_ds1302(uchar addr)
{
uchar date;
rst = 0;
sclk = 0;
rst = 1;
write_byte(addr);
date = read_byte();
sclk = 1;
rst = 0;
return date;
}
/****** 3õê¼»ˉDS1302 *****/
void set_ds1302()
{
write_ds1302(0x8e, 0x00);
write_ds1302(0x80, 0x00);
write_ds1302(0x82, 0x00);
write_ds1302(0x84, 0x00);
write_ds1302(0x8e, 0x80);
}
/****** ê±£¬·Ö£¬Ãë £¬·Öàë¸ö£¬ ê®Î» ****/
void write_sfm(uchar addr, uchar date)
{
uchar shi, ge;
shi = date/10;
ge = date%10;
write_com(0x80+0x40+addr);
write_date(0x30+shi);
write_date(0x30+ge);
}
/****** íù1602ÖDÏÔê¾êy¾Y ****/
void display()
{
uchar d;
write_ds1302(0x8e, 0x00);
d = read_ds1302(0x81);
miao = (d/16)*10 + d%16;
write_sfm(11, miao);
d = read_ds1302(0x83);
miao = (d/16)*10 + d%16;
write_sfm(7, fen);
d = read_ds1302(0x85);
miao = (d/16)*10 + d%16;
write_sfm(3, shi);
write_ds1302(0x8e, 0x80);
}
|
|