📄 24c02.txt
字号:
/***********24c04**********************/
sbit SDA=P0^2;
sbit SCL=P0^3;
/********24c04********************/
void i2c_start(void) //发送开始信号 //参照时序图
{
SDA = 1;
SCL = 1;
SDA = 0;
SCL = 0;
}
void i2c_stop(void) //发送结束信号 参照时序图
{
SDA = 0;
SCL = 1;
SDA = 1;
}
bit i2c_ack(void) //发送接收确认信号
{
bit ack;
SDA = 1;
SCL = 1;
if (SDA==1)
ack = 1; //用于判断接收的应答信号是否正确
else
ack = 0;
SCL = 0;
return (ack);
}
void i2c_send8bit(unsigned char b) //送八位数据 采用判断的方法
{
unsigned char a;
for(a=0;a<8;a++)
{
if ((b<<a)&0x80)
SDA = 1;
else
SDA = 0;
SCL = 1;
SCL = 0;
}
}
unsigned char i2c_receive8bit(void) //接收八位数据 返回值为接受的数据
{
unsigned char a;
unsigned char b=0;
for(a=0;a<8;a++)
{
SCL = 1;
b=b<<1;
if (SDA==1)
b=b|0x01; //按位或
SCL = 0;
}
return (b);
}
void i2c_write(unsigned char Address,unsigned char Data)
{
do{
i2c_start(); //开总线
i2c_send8bit(0xA0); //发送器件地址
}while(i2c_ack()); //等待返回数据
i2c_send8bit(Address); //发送内部地址
i2c_ack(); //等待返回应答
i2c_send8bit(Data); //发送数据
i2c_ack(); //等待应答
i2c_stop(); //停止发送
}
unsigned char i2c_read(unsigned char Address)
{
unsigned char c;
do{
i2c_start(); //开总线
i2c_send8bit(0xa0); //发送器件地址
}while(i2c_ack()); //=1,表示无确认,再次发送
i2c_send8bit(Address); //发送内部地址
i2c_ack(); //应答
do{
i2c_start();
i2c_send8bit(0xa1);
}while(i2c_ack());
c=i2c_receive8bit();
i2c_ack();
i2c_stop();
return(c);
}
void save_data(void) //功能用于把数据保存到24c04中 只要运行就保存数据
{
unsigned char i;
unsigned char y;
unsigned char t;
y=0x00;
t=0;
for(i=0;i<8;i++) //把时间的八个字节发到24c04中
{
i2c_write(y,str1[t]);
t++;
y++;
}
i2c_write(0x08,turnsjz(h)); //把温度的数据发送到24c04中 发送的为温度显示值 bcd码形式 进行了温度的转换
i2c_write(0x09,turnsjz(n));
i2c_write(0x0a,turnsjz(v));
}
void extract_data(void) //取数据从24c04中
{
unsigned char l;
unsigned char i;
i=0x00;
for(l=0;l<8;l++)
{
str1[i]=i2c_read(i);
i++;
}
h=turnsjz(i2c_read(0x08));
n=turnsjz(i2c_read(0x09));
v=turnsjz(i2c_read(0x0a)); //取出数据 以下进行显示出数据
xianshi(27,h);
xianshi(28,n);
xianshi(30,v);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -