?? 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 + -