📄 i2c.c
字号:
#define _I2C_
#include "..\Inc\Include.h"
void I_start(void)
{ SDA1; SCLK1; SDA0; SCLK0;}
void I_stop(void)
{ SDA0; SCLK1; SDA1; SCLK0; }
void I_ack(void)
{ SDA0; SCLK1; SCLK0; SDA1; }
void N_ack(void)
{ SDA1; SCLK1; SCLK0; SDA0; }
void I_send(unsigned char m)
{
unsigned char i=8;
do{
SCLK0;
if(m&0x80) { SDA1; }
else { SDA0; }
SCLK1;
m=m<<1;
i--;
}while(i);
SCLK0;
}
unsigned char I_receive(void)
{
unsigned char x=0,i=8;
SDA1;
do{
SCLK0;
SCLK1;
if(SDA)
x=x|0x01;
if(i>1)
x=x<<1;
i--;
}while(i);
SCLK0;
return x;
}
unsigned char IIRD(unsigned char sla,unsigned char x)
{ unsigned char kk;
I_start();
I_send(sla);
I_ack();
I_send(x);
I_ack();
I_start();
I_send(sla+1);
I_ack();
kk=I_receive();
N_ack();
I_stop();
II_delay();
return(kk);
}
void IIWR(unsigned char sla,unsigned char x,unsigned char y)
{
// IIC_biao=0;
I_start();
I_send(sla);
I_ack();
I_send(x);
I_ack();
I_send(y);
I_ack();
I_stop();
II_delay(); //连续写必须延时间
II_delay();
}
unsigned char II3RD(unsigned char sla,unsigned int dizi)
{
unsigned char kk,m,n;
n=(unsigned char)((dizi&0xff00)>>8);
m=(unsigned char)(dizi&0x00ff);
I_start();
I_send(sla);
I_ack();
I_send(n);
I_ack();
I_send(m);
I_ack();
I_start();
I_send(sla+1);
I_ack();
kk=I_receive();
N_ack();
I_stop();
II_delay();
return(kk);
}
void II3WR(unsigned char sla,unsigned int dizi,unsigned char shuju)
{
unsigned char m,n;
n=(unsigned char)((dizi&0xff00)>>8);
m=(unsigned char)(dizi&0x00ff);
I_start();
I_send(sla);
I_ack();
I_send(n);
I_ack();
I_send(m);
I_ack();
I_send(shuju);
I_ack();
I_stop();
II_delay();
II_delay();
II_delay();
II_delay();
II_delay();
}
void II_delay(void)
{
uint i=0;
for(i=0;i<150;i++) /* 必须大于450 否则数据不能保存 */
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -