📄 i2c.c
字号:
#include "reg58.h"
#include "intrins.h"
#include "i2c.h"
#include "define.h"
#define uchar unsigned char
extern void delay(unsigned char);
/////////////////////////////////////////////////////////////////
void start()
{
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
SDA=0;
_nop_();
}
/////////////////////////////////////////////////////////////////
void stop()
{
SCL=0;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SDA=1;
_nop_();
}
/////////////////////////////////////////////////////////////////
bit write(uchar writedata)
{
uchar i;
for(i=0;i<8;i++)
{
SCL=0;
_nop_();
if(writedata&0x80)SDA=1;
else SDA=0;
_nop_();
_nop_();
SCL=1;
_nop_();
writedata<<=1;
}
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
//P0IO|=1;
_nop_();
_nop_();
_nop_();
_nop_();
if(!SDA)
{
//P0IO&=0xfe;
return TRUE;
}
else
{
//P0IO&=0xfe;
return FALSE;
}
}
/////////////////////////////////////////////////////////////////
uchar read()
{
uchar i,tempdata;
for(i=0;i<8;i++)
{
tempdata<<=1;
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
//P0IO|=1;
_nop_();
_nop_();
_nop_();
_nop_();
if(SDA)tempdata++;
//P0IO&=0xfe;
}
_nop_();
SCL=0;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
SCL=1;
return tempdata;
}
/////////////////////////////////////////////////////////////////
uchar reada()
{
uchar i,tempdata;
for(i=0;i<8;i++)
{
tempdata<<=1;
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
//P0IO|=1;
_nop_();
_nop_();
_nop_();
_nop_();
if(SDA)tempdata++;
//P0IO&=0xfe;
}
_nop_();
SCL=0;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
SDA=1;
return tempdata;
}
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
bit read2416(uchar readposih,uchar readposil,uchar* pchar)
{
uchar i;
start();
if(!write(0xa0))
{
stop();
return FALSE;
}
if(!write(readposih))
{
stop();
return FALSE;
}
if(!write(readposil))
{
stop();
return FALSE;
}
start();
if(!write(0xa1))
{
stop();
return FALSE;
}
for(i=0;i<15;i++)
{
*(pchar+i)=reada();
}
*(pchar+15)=read();
stop();
return TRUE;
}
/////////////////////////////////////////////////////////////////
bit write2416(uchar writeposih,uchar writeposil,uchar* pchar)
{
uchar i;
start();
if(!write(0xa0))
{
stop();
return FALSE;
}
if(!write(writeposih))
{
stop();
return FALSE;
}
if(!write(writeposil))
{
stop();
return FALSE;
}
for(i=0;i<16;i++)
{
if(!write(*(pchar+i)))
{
stop();
return FALSE;
}
}
stop();
delay(T20MS);
return TRUE;
}
/////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -