📄 rtc8025.c
字号:
//设备地址 0110 010x x=0写,x=1读
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
/*******************************************************************/
void wr_tdata(uchar *dtaddr,uchar start_addr,uchar wrcount);
void rd_tdata(uchar *dtaddr,uchar start_addr,uchar rdcount);
/*******************************************************************/
sbit scl = P1^0;
sbit sda = P1^1;
union timeu
{
uchar timearr[7];
struct
{
uchar second;
uchar minute;
uchar hour;
uchar week;
uchar day;
uchar month;
uchar year;
}times;
}time;
uchar timecontrol[2];
/*******************************************************************/
void delay(void)
{ _nop_();
_nop_();
_nop_();
}
void bstart(void)
{ scl=0;
delay();
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
scl=0;
}
void bstop(void)
{ scl=0;
delay();
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
scl=0;
delay();
}
void wbyte(uchar aa)
{ uchar i;
for(i=0;i<8;i++)
{ aa<<=1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
scl=1;
delay();
scl=0;
}
uchar rbyte(void)
{ uchar i,k=0;
for(i=0;i<8;i++)
{ scl=0;
delay();
scl=1;
delay();
k=k<<1;
if (sda) k++;
}
scl=0;
delay();
sda=1;
delay();
scl=1;
delay();
return(k);
}
/**************************************************/
void wr_tdata(uchar *dtaddr,uchar start_addr,uchar wrcount)
{
uchar i;
bstart();
wbyte(0x64);
wbyte(start_addr<<4);
for(i=start_addr;i<start_addr+wrcount;i++)
wbyte(*dtaddr++);
bstop();
}
/**************************************************/
void rd_tdata(uchar *dtaddr,uchar start_addr,uchar rdcount)
{
uchar i;
bstart();
wbyte(0x64);
wbyte(start_addr<<4);
for(i=start_addr;i<start_addr+rdcount;i++)
{
bstart();
wbyte(0x65);
*(dtaddr++)=rbyte();
}
bstop();
}
/*******************************************************************/
void main()
{
timecontrol[0]=0x20;
timecontrol[1]=0x20;
wr_tdata(timecontrol,0x0e,2);
time.times.second=0x25;
time.times.minute=0x10;
time.times.hour=0x16;
time.times.week=0x03;
time.times.day=0x27;
time.times.month=0x04;
time.times.year=0x05;
wr_tdata(time.timearr,0x00,7);
while(1)
{
rd_tdata(time.timearr,0x00,7);
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -