51单片机I2C总线代码

发布者:Xiaochen520最新更新时间:2016-06-12 来源: eefocus关键字:51单片机  I2C总线 手机看文章 扫描二维码
随时随地手机看文章
I2C总线相关函数:

 

void I2Cstart()//开始标志
{	
	SDA=1;
	SCL=1;
	SDA=0;
	delay1ms(4);
	SCL=0;
	delay1ms(4);
}
void I2Cstop()//结束标志
{
	SCL=0;
	delay1ms(4);
	SDA=0;
	delay1ms(4);
	SCL=1;
	delay1ms(4);
	SDA=1;
	delay1ms(4);
}
unsigned char I2Creadack()
{
	unsigned char i,byte;
	byte=0;
	for(i=0;i<8;i++)
	{
		SCL=0;
		SDA=1;
		delay1ms(4);
		byte<<=1;
		if(SDA==1)
		{
			byte|=0x01;
			delay1ms(4);
		}
	}
	SCL=0;
	delay1ms(4);
	SDA=0;
	delay1ms(4);
	SCL=1;
	delay1ms(4);
	SCL=0;
	return byte;
}
void I2Csend(unsigned char byte)//I2C写数据的过程
{

	unsigned char mask,i;
	for(i=0;i<8;i++)
	{	
		SCL=0;
		if((mask&byte)==0)
		{
			SDA=0;
		}
		else
		{
			SDA=1;
		}
		mask>>=1;
		delay1ms(4);
		SCL=1;//给足够时间让数据读取
		delay1ms(4);

	}
	SCL=0;
	SDA=1;		//因为总线上有一个信号为低则低
	delay1ms(4);
	SCL=1;
	delay1ms(4);//等待应答位
	SCL=0;
}
unsigned char I2Cread(void)
{
	unsigned char i,byte;
	byte =0;
	for(i=0;i<8;i++)
	{
		SCL=0;
		SDA=1;//读数据必须拉高
		delay1ms(4);
		SCL=1;//数据稳定
		delay1ms(4);
		byte<<=1;
		if(SDA==1)
		{
			byte|=0x01;
		}
		delay1ms(4);
	}
	SCL=0;
	delay1ms(4);
	SDA=0;//发送的应答位
	delay1ms(4);
	SCL=1;
	delay1ms(4);
	SCL=0;
	return byte;
}
unsigned char I2Cread_eeprom(unsigned char addr)//I2C读取数据
{
	unsigned char datebyte,datebyte2;
	I2Cstart();
	I2Csend(0xa0);//写数据
	I2Csend(addr);
	I2Cstart();
	I2Csend(0xa1);//读数据
	datebyte2=I2Creadack();
	datebyte=I2Cread();
	I2Cstop();
	return datebyte;

}

void write_eeprom(unsigned char addr,unsigned char datebyte)
{
	I2Cstart();
	I2Csend(0xa0);
	I2Csend(addr);
	I2Csend(datebyte);
	I2Cstop();
}
 
关键字:51单片机  I2C总线 引用地址:51单片机I2C总线代码

上一篇:51单片机程序存储器扩展
下一篇:51单片机写LCD1602代码

推荐阅读最新更新时间:2024-03-16 14:56

51单片机-控制LED灯
1.硬件设计 通过原理图分析,LED 采用共阳接法,即所有 LED 阳极管脚接电源 VCC(5V),阴极管脚通过一个限流电阻接到 P2 口上;要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭;所以如何配置P2口的高低电平(P2寄存器),就是怎么去控制这8颗LED灯。 2.软件设计 2.1.点亮一颗LED灯 功能需求:点亮D1这一颗LED灯 程序设计:根据原理图去配置对应的寄存器(P2口),去控制LED灯的亮灭状态,如:D1亮,其他灯不亮,即P20输入低电平,其他管脚输入高电平; #include REGX52.H void main() { P2=0XFE;//1111 1110 D1灯亮,其
[单片机]
<font color='red'>51单片机</font>-控制LED灯
51单片机P0口分析
1.P0作为地址数据总线时,V1和V2是一起工作的,构成推挽结构。高电平时,V1打开,V2截止;低电平时,V1截止,V2打开。这种情况下不用外接上拉电阻。而且,当V1打开,V2截止,输出高电平的时候,因为内部电源直接通过V1输出到P0口线上,因此驱动能力(电流)可以很大,这就是为什么教科书上说可以 驱动8个TTL负载 的原因。 2.P0作为一般端口时,V1就永远的截止,V2根据输出数据0导通和1截止,导通时拉地,当然是输出低电平;截止时,P0口就没有输出了,(注意,这种情况就是所谓的高阻浮空状态),如果加上外部上拉电阻,输出就变成了高电平1。 3.其他端口P1、P2、P3,在内部直接将P1口中的V1换成了上拉电阻,所以
[单片机]
基于51单片机的康复仪研究
1. 引言   人类的平衡能力是人能够进行各种运动的基础,人的站立、坐卧、行走都需要有平衡能力。一旦人的平衡能力有障碍,则人的行动能力就受制约,给学习、生活带来极大的不便。在现代化的社会,人口老龄化问题突出,老年人因某种疾病而导致脑损伤引起平衡能力降低,行动能力受阻。因此,在临床治疗中,需要一种能对平衡功能检验的设备。我校在上海瑞金医院的协作下,在分析了国际、国内有关资料的基础上,应用先进的计算机控制技术研制成功了多功能的人体平衡康复仪。使用该仪器可以客观、定量地进行平衡功能的测试、分析和训练,可以地进行平衡能力的静态测试和动态训练。为临床研究提供了有效的手段。   2.仪器功能   ·仪器的测量范围:10---360k
[单片机]
基于<font color='red'>51单片机</font>的康复仪研究
89C51单片机按键控制数码管动态显示0~9
1.preteus仿真图 2.keli代码 #include reg51.h sbit key1=P3^0; int CC_num ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay_ms(int ms) { int i,j; for(i=0;i ms;i++) for(j=0;j 110;j++); } void key1_exam() { if(key1 == 0) { //按钮延时去抖动 delay_ms(20); if(key1 =
[单片机]
89C<font color='red'>51单片机</font>按键控制数码管动态显示0~9
51单片机子程序调用与返回指令简介及举例
(1)主程序与子程序 在前面的灯的实验中,我们已用到过了子程序,只是我们并没有明确地介绍。子程序是干什么用的,为什么要用子程序技术呢?举个例程,我们数据老师布置了10道算术题,经过观察,每一道题中都包含一个(3*5+2)*3的运算,我们能有两种选择,第一种,每做一道题,都把这个算式算一遍,第二种选择,我们能先把这个结果算出来,也就是51,放在一边,然后要用到这个算式时就将51代进去。这两种办法哪种更好呢?不必多言。设计程序时也是这样,有时一个功能会在程序的不一样地方反复使用,我们就能把这个功能做成一段程序,每次需要用到这个功能时就“调用”一下。  (2)调用及回过程:主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不
[单片机]
基于C8051单片机超声波测距电平触发编写
#include c8051f020.h #include intrins.h #define uchar unsigned char #define uint unsigned int void SYSCLK_Init (void); void PORT_Init (void); void StartModule() ; void display(unsigned char bai,unsigned char shi,unsigned char ge); void delay(unsigned int z); void timerinit(); void delay(unsigned int z); void Timer_Co
[单片机]
51单片机P0口的特性及使用方法解析
一、P0口特性: P0口为三态双向I/O口。对于内部有程序存贮器的单片机基本系统(如定制的8051),P0口可以作为输入/输出口使用,直接连外部的输入/输出设备;也可以作为系统扩展的地址/数据总线口。对于内部没有程序存贮器的单片机(如8031),P0口只能作为地址/数据总线口使用。 1、P0口的输出驱动器中也有一个多路电子开关。输出驱动器转接至口锁动器的Q端时,P0口作为双向I/O口使用。 这时,CPU发来的控制信号为低电平,使输出驱动电路的上拉场效应管T1截止。P0口的锁存器为“1”时,输出驱动器中的两个场效应管均截止,引脚浮空;由于P0口输出电路是漏极开路的电路,必须外接10kΩ拉高电阻才能有高电平输出。而写入“0”时,下
[单片机]
<font color='red'>51单片机</font>P0口的特性及使用方法解析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved