readtime.h
来自「这是一个用STC单片机作的,带液晶显示屏的万年历程序,并有串行接收部份,大家一定」· C头文件 代码 · 共 133 行
H
133 行
//#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 + =
减小字号Ctrl + -
显示快捷键?