⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 This is the source code for 5x7 Matrix display developed using PIC Microcontroller
💻 C
字号:

#define FOSC 48000000
#define I2Clock	400000

void i2c_idle(void);
void i2c_init(void);
void i2c_stop(void);
void i2c_start(void);
void i2c_restart(void);
unsigned char i2c_write(far ram unsigned char);
unsigned char i2c_read(unsigned char);

void i2c_init()
{
	TRISBbits.TRISB0 =1;
	TRISBbits.TRISB1 =1;
	PORTBbits.RB0 =1;
	PORTBbits.RB1 =1;
	SSPSTAT = 0;
	
	SSPADD = (((FOSC/I2Clock)/0x04) -1);
	SSPCON1 =0x28;
	i2c_idle();
}

void i2c_start()	
{
	i2c_idle();
	SSPCON2bits.SEN = 1;
	while(SSPCON2bits.SEN);
}

void i2c_stop()
{
	i2c_idle();
	SSPCON2bits.PEN = 1;
	while(SSPCON2bits.PEN);
}

unsigned char i2c_write(far ram unsigned char i2c_data)
{
	i2c_idle();	
	PIR1bits.SSPIF = 0;
	SSPBUF = i2c_data;
	while(!PIR1bits.SSPIF);
	if(SSPCON2bits.ACKSTAT)
		return 0;
	else
		return 1;
}

unsigned char i2c_read( unsigned char ack)// 0:ACK 1:NACK
{
	unsigned char rcv_data;
	i2c_idle();
	PIR1bits.SSPIF = 0;
	SSPCON2bits.RCEN = 1;
	while(!PIR1bits.SSPIF);	
	rcv_data = SSPBUF;
	if(!ack)
		SSPCON2bits.ACKDT = 0;
	else
		SSPCON2bits.ACKDT = 1;
	SSPCON2bits.ACKEN = 1;
	while(SSPCON2bits.ACKEN);
	return rcv_data;
}
	
void i2c_restart()
{
	i2c_idle();
	SSPCON2bits.RSEN = 1;
	while(SSPCON2bits.RSEN);
}

void i2c_idle()
{
	while(SSPSTATbits.R_W);
	while((SSPCON2 & 0x1F)!= 0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -