📄 readtime.h
字号:
//#include"52.h"
//=====读写时钟芯片地址========
#define READ 0xa3
#define WRITE 0xa2
sbit SDA = P1^5;
sbit SCL = P1^6;
word code monthday[12] = {31, 28, 31, 30, 31, 30, //每月天数
31, 31, 30, 31, 30, 31};
void delay_iic(void)
{
byte i;
for(i = 0; i < 5; i++);
}
void I_start(void)
{
SDA = 1;
SCL = 1;
delay_iic();
SDA = 0;
delay_iic();
SCL = 0;
}
void I_stop(void)
{
SDA = 0;
SCL = 1;
delay_iic();
SDA = 1;
}
byte I_WaitAck(void)
{
bit ack;
SDA = 1;
delay_iic();
SCL = 1;
delay_iic();
ack = SDA;
SCL = 0;
if(ack) return 0;
else return 1;
}
void I_Ack(void)
{
SDA = 1;
delay_iic();
SCL = 1;
delay_iic();
SCL = 0;
delay_iic();
SDA = 0;
}
void I_send(byte i_data)
{
byte i;
for(i = 0; i < 8; i++)
{
SDA = (bit)(i_data & 0x80);
i_data = i_data << 1;
SCL = 1;
delay_iic();
SCL = 0;
}
SDA = 1;
}
byte I_receive(void)
{
byte i;
byte i_data = 0;
bit rdata;
SDA = 1;
for(i = 0; i < 8; i++)
{
SCL = 1;
i_data *= 2;
rdata = SDA;
if(rdata) i_data++;
SCL = 0;
}
return i_data;
}
void I_Write(byte address, byte i_data)
{
I_start();
I_send(WRITE);
I_WaitAck();
I_send(address);
I_WaitAck();
I_send(i_data);
I_WaitAck();
I_stop();
}
byte I_Read(byte address)
{
byte i_data;
I_start();
I_send(WRITE);
I_WaitAck();
I_send(address);
I_WaitAck();
I_start();
I_send(READ);
I_WaitAck();
i_data = I_receive();
I_Ack();
I_stop();
return i_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -