|
#include<reg52.h>
#include<lcd1602xs.h>
#define uchar unsigned char
#define uint unsigned int
sbit RST=P1^5;
sbit SCLK=P1^6;
sbit SDA=P1^7;
uchar dat,date;
void delayus(uchar z);
void write_ds1302(uchar);//写
uchar read_ds1302();//读
void set_DS1302(uchar com,uchar date);
void init_DS1302();
void main()
{
init_DS1302();
write_ds1302(0x81);
lcddisp(0,dat);
}
void write_ds1302(uchar date)//写
{
uchar i;
SCLK=0;//为上升沿写数据做准备
delayus(2);//延时等待数据稳定
for(i=0;i<8;i++)//写8个二进制数
{
SDA=date&0x01;//取出date的第0位,低位在前高位在后
delayus(2);//延时等待硬件
SCLK=1;//上升沿写入数据
delayus(2);//延时
SCLK=0;//重新拉低为下个脉冲做准备
date=date>>1;//数据向右移动1位,准备写下一个位
}
}
uchar read_ds1302()//读
{
uchar i,dat;
delayus(2);
for(i=0;i<8;i++)
{
dat=dat>>1;
if(SDA==1)
{
dat|=0x80;//将1取出写在dat的最高位
}
SCLK=1;//为下降沿做准备
delayus(2);
SCLK=0;//下降沿
delayus(2);
}
return dat;
}
void set_DS1302(uchar com,uchar date)
{
write_ds1302(com);
write_ds1302(date);
}
void init_DS1302()//初始化
{
/* uchar flag;
write_ds1302(0x81);
flag=read_ds1302();
if(flag&0x80)
{*/
set_DS1302(0x8e,0x0);
set_DS1302(0x80,(((55/10)<<4)|(55%10)));
set_DS1302(0x82,(((59/10)<<4)|(59%10)));
set_DS1302(0x84,(((23/10)<<4)|(23%10)));
set_DS1302(0x86,(((18/10)<<4)|(18%10)));
set_DS1302(0x88,(((6/10)<<4)|(6%10)));
set_DS1302(0x8c,(((9/10)<<4)|(9%10)));
set_DS1302(0x90,0xa5);
set_DS1302(0x8e,0x80);
//}
}
void delayus(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|