#include"i2c.h"
void I2c_delay(uint i)
{
while(i--);
}
/*******************************************************************************
* 函数名 : Delay10us()
* 函数功能 : 延时10us
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Delay10us()
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=3;a>0;a--);
}
/*******************************************************************************
* 函数名 : I2cStart()
* 函数功能 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿
* 输入 : 无
* 输出 : 无
* 备注 : 起始之后SDA和SCL都为0
*******************************************************************************/
void I2cStart()
{
SDA=1;
Delay10us();
SCL=1;
Delay10us();//建立时间是SDA保持时间>4.7us
SDA=0;
Delay10us();//保持时间是>4us
SCL=0;
Delay10us();
}
/*******************************************************************************
* 函数名 : I2cStop()
* 函数功能 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿
* 输入 : 无
* 输出 : 无
* 备注 : 结束之后保持SDA和SCL都为1;表示总线空闲
*******************************************************************************/
void I2cStop()
{
SDA=0;
SCL=0;
Delay10us();
SCL=1;
Delay10us();//建立时间大于4.7us
SDA=1;
Delay10us();
}
/*******************************************************************************
* 函数名 : I2cSendByte(unsigned char dat)
* 函数功能 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定
* 输入 : num
* 输出 : 0或1。发送成功返回1,发送失败返回0
* 备注 : 发送完一个字节SCL=0,SDA=1
*******************************************************************************/
unsigned char I2cSendByte(unsigned char dat)
{
unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。
for(a=0;a<8;a++)//要发送8位,从最高位开始
{
SDA=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA信号
dat=dat<<1;
Delay10us();
SCL=1;
Delay10us();//建立时间>4.7us
SCL=0;
Delay10us();//时间大于4us
}
SDA=1;
Delay10us();
SCL=1;
while(SDA)//等待应答,也就是等待从设备把SDA拉低
{
b++;
if(b>200) //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
{
SCL=0;
Delay10us();
return 0;
}
}
SCL=0;
Delay10us();
return 1;
}
/*******************************************************************************
* 函数名 : I2cReadByte()
* 函数功能 : 使用I2c读取一个字节
* 输入 : 无
* 输出 : dat
* 备注 : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/
unsigned char I2cReadByte()
{
unsigned char a=0,dat=0;
SDA=1; //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
}
SCL=1;
Delay10us();
SCL=0;
Delay10us();
return dat;
}
/*******************************************************************************
* 函数名 : void At24c02Write(unsigned char addr,unsigned char dat)
* 函数功能 : 往24c02的一个地址写入一个数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void At24c02Write(unsigned char addr,unsigned char dat)
{
I2cStart();
I2cSendByte(0xa0);//发送写器件地址
I2cSendByte(addr);//发送要写入内存地址
I2cSendByte(dat); //发送数据
I2cStop();
I2c_delay(10000);
}
/*******************************************************************************
* 函数名 : unsigned char At24c02Read(unsigned char addr)
* 函数功能 : 读取24c02的一个地址的一个数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
unsigned char At24c02Read(unsigned char addr)
{
unsigned char num;
I2cStart();
I2cSendByte(0xa0); //发送写器件地址
I2cSendByte(addr); //发送要读取的地址
I2cStart();
I2cSendByte(0xa1); //发送读器件地址
num=I2cReadByte(); //读取数据
I2cStop();
return num;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1287-基于51单片机的计步器(步数,存储)proteus、原理图、流程图、物料清单、仿真图、源代码 功能介绍: 设计一个单片机控制的计步器,具体要求如下:1、利用震动传感器实现计步功能的模拟; 2、可以记录行走的步数,可以显示记录的步数; 3、通过按键实现归零功能,可以存储历史数据,并断电不丢失;4、通过按键实现历史记录的查看。 有哪些资料: 1、仿真工程文件 2、源代码工程文件 3、原理图工程文件 4、流程图 5、功能介绍 6、元件清单
资源推荐
资源详情
资源评论
收起资源包目录
1287-基于51单片机的计步器(步数,存储)proteus、原理图、流程图、物料清单、仿真图、源代码.zip (38个子文件)
1287-基于51单片机的计步器(步数,存储)proteus、原理图、流程图、物料清单、仿真图、源代码
程序
lcd1602.c 2KB
lcd1602.LST 4KB
i2c.LST 8KB
STARTUP.LST 14KB
i2c.c 4KB
main_uvproj.bak 13KB
main.OBJ 8KB
lcd1602.OBJ 4KB
STARTUP.A51 6KB
main.plg 2KB
i2c.h 492B
main.M51 20KB
main.LST 6KB
lcd1602.h 1KB
main.uvproj 14KB
main.lnp 69B
main.uvopt 57KB
STARTUP.OBJ 749B
main.hex 4KB
main 16KB
i2c.OBJ 6KB
main.c 2KB
main_uvopt.bak 57KB
元件清单.xlsx 6KB
流程图.bmp 1.18MB
原理图
__Previews
Sheet1.SchDocPreview 44KB
History
Sheet1.~(3).SchDoc.Zip 18KB
Sheet1.~(1).SchDoc.Zip 1KB
Sheet1.SchDoc 156KB
ISIS仿真
仿真.PWI 885B
ISIS.dmp 37KB
仿真.DSN 132KB
Last Loaded 仿真.DBK 132KB
功能.jpg 27KB
QQ截图20220514154006.png 100KB
QQ截图20220514154023.png 99KB
QQ截图20220514154046.png 99KB
QQ截图20220514154119.png 8KB
共 38 条
- 1
资源评论
叫我Eric
- 粉丝: 2145
- 资源: 1555
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功