📄 i2czxxy.c
字号:
#define uchar unsigned char
#define uint unsigned int
#include "LCD.h"
#include "msp430xE42x.h"
#define SCL BIT0
#define SDA BIT1
#define SCL_IN P2DIR &= ~SCL
#define SCL_OUT P2DIR |= SCL
#define SCL_L P2OUT &= ~SCL
#define SCL_H P2OUT |= SCL
#define SDA_IN P2DIR &= ~SDA
#define SDA_OUT P2DIR |= SDA
#define SDA_L P2OUT &= ~SDA
#define SDA_H P2OUT |= SDA
#define SDA_BIT P2IN & SDA
void start()//开始条件
{
SCL_OUT;
SDA_OUT;
SCL_L;
_NOP();
SDA_H;
_NOP();
SCL_H;
_NOP();
SDA_L;
_NOP();
SCL_L;
_NOP();
}
void stop()//停止条件
{
SCL_OUT;
SDA_OUT;
SCL_L;
_NOP();
SDA_L;
_NOP();
SCL_H;
_NOP();
SDA_H;
_NOP();
}
void ack(void)//应答
{
SDA_H;
_NOP();
SCL_L;
_NOP();
SCL_H;
_NOP();
while(SDA_BIT){;}
SCL_L;
_NOP();
}
void no_ack(void)//无需应答
{
SDA_H;
_NOP();
SCL_H;
_NOP();
while(SDA_BIT){;}
SCL_L;
_NOP();
}
void write(uchar j) //写字节
{
uchar i,temp;
temp=j;
SCL_OUT;
SDA_OUT;
for(i=0; i<8; i++)
{
SCL_L;
_NOP();
if(temp & 0x80)
SDA_H;
else
SDA_L;
SCL_H;
_NOP();
temp <<=1;
}
SCL_L;
_NOP();
SDA_H;
_NOP();
}
uchar read() //读字节
{
uchar i,j,byte=0;
SCL_OUT;
SDA_OUT;
SCL_L;
_NOP();
SDA_H;
SDA_IN;
for(i=0;i<8;i++)
{
_NOP();
SCL_H;
_NOP();
if(SDA_BIT)
j = 1;
else
j = 0;
byte =(byte<<1)|j;
SCL_L;
}
_NOP();
return(byte);
}
uchar testack() //测试应答
{
uchar i=0,ack;
SDA_H;
SCL_OUT;
SDA_IN;
SCL_H;
_NOP();
while((SDA_BIT ==1)&&(i<100))
i++;
if(SDA_BIT ==1)
{
_NOP();
ack = 1;
}
else ack =0;
SCL_L;
_NOP();
SDA_OUT;
return(ack);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -