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

📄 i2c.h

📁 断电不丢失秒表
💻 H
字号:

#include<intrins.h>
#define uchar unsigned char
sbit scl=P1^4;
sbit sda=P1^5;
void delay();
void start();
void stop();
void waitack();
void ack();
void noack();
void send_byte(uchar temp);
uchar receive_byte();
uchar read_one(uchar order,uchar address);
void send_one(uchar order,uchar address,uchar what);
void send(uchar order,uchar address,uchar *str,uchar num);
void read(uchar order,uchar address,uchar *str,uchar num);


void delay()
{
	uchar i;
	for(i=5;i>0;i++);
}

void start()
{
	sda=1;
	scl=1;
	delay();
	sda=0;
	delay();
	scl=0;
	delay();
}

void stop()
{	
	scl=1;
	sda=0;	
	delay();
	sda=1;
	delay();
}

void waitack()
{		
	sda=0;
	delay();
	scl=0;
	delay();
	scl=1;
	delay();
	scl=0;
	delay();
 
}

void ack()
{
	sda=0;
	delay();
	scl=1;
	delay();
	scl=0;	
}

void noack()
{
	sda=1;
	delay();
	scl=1;
	delay();
	scl=0;
}

void send_byte(uchar temp)
{
	uchar i,pp;
	
	for(i=0;i<8;i++)
	{
		
		pp=(temp<<i)&0x80;
		if(pp==0x80) sda=1;
		else sda=0;
		delay();
		scl=1;
		delay();
		scl=0;
		delay();
	}

}
uchar receive_byte()
{
	uchar i,k=0;
	bit msb;
	sda=1;
	for(i=0;i<8;i++)
	{				
		scl=0;
		delay();
		scl=1;
		delay();
		k=k<<1;
		msb=sda;
		if(msb==1)
		k=k|0x01;
	}
	scl=0;
	delay();
	return(k);
}

void send(uchar order,uchar address,uchar *str,uchar num)
{
	uchar i;
	start();
	send_byte(order);
	waitack();
	send_byte(address);
	waitack();
	for(i=0;i<num;i++)
	{
		send_byte(*str+i);
		waitack();
	}
	stop();

}
void send_one(uchar order,uchar address,uchar what)
{	
	start();
	send_byte(order);
	waitack();
	send_byte(address);
	waitack();
	send_byte(what);
	waitack();
	stop();
}
uchar read_one(uchar order,uchar address)
{
	uchar hehe;
	start();
	send_byte(order);
	waitack();
	send_byte(address);
	waitack();
	start();
	send_byte(order+1);
	waitack();
	hehe=receive_byte();
	noack();
	stop();
	return(hehe);
}
void read(uchar order,uchar address,uchar *str,uchar num)
{
	uchar i;
	start();
	send_byte(order);
	waitack();
	send_byte(address);
	waitack();
	start();
	send_byte(order+1);
	waitack();
	for(i=0;i<num-1;i++)
	{
		str[i]=receive_byte();
		ack();
	}
	str[i]=receive_byte();
	noack();
	stop();	
}

⌨️ 快捷键说明

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