i2c.c

#include "config.h"
#include "delay.h"
#include "i2c.h"//I2C延时5us函数
void I2cDelay_5us(void)
{Delay_us(5);
}//I2C总线起始信号
void I2cStart(void)
{SCL = 1;SDA = 1;I2cDelay_5us();//状态保持5usSDA = 0;I2cDelay_5us();//状态保持5us
}//I2C总线停止信号
void I2cStop(void)
{SCL = 0;SDA = 0;SCL = 1;I2cDelay_5us();//状态保持5usSDA = 1;I2cDelay_5us();//状态保持5us
}/*********************************函数名称:ReadACK(void)*函数输入:无*函数返回:1非应答,0应答*函数说明:I2C总线读从机应答信号********************************/
bit ReadACK(void)
{uint i;SCL = 0;//拉低时钟总线,允许从机控制SDASCL = 1;//拉高,读SDAI2cDelay_5us();while((SDA==1) && (i<250))//等待SDA应答,或者超过时间默认应答i++;SCL = 0;I2cDelay_5us();return(0);//返回0应答
}/****************************************函数名称:SendACK(bit i)*函数输入:1主机发送非应答,0发送应答*函数返回:无*函数说明:主机发送应答信号***************************************/
void SendACK(bit i)
{SCL = 0;  //拉低时钟总线,允许主机控制SDAif(i)      //发送非应答SDA = 1;elseSDA = 0;SCL = 1;  //拉高总线,让从机读SDAI2cDelay_5us();SCL = 0;   //拉低时钟总线,允许SDA释放SDA = 1;    //释放数据总线
}/****************************************函数名称:I2cSendByte(uchar DAT)*函数输入:DAT需要发送的数据*函数返回:无*函数说明:I2C发送一个字节数据***************************************/
void I2cSendByte(uchar DAT)
{uchar i;for(i=0; i<8; i++)   //分别写8次,每次写1位{SCL = 0;      //拉低时钟总线,允许SDA变化if(DAT & 0x80)   //先写数据最高位SDA = 1;      //写1elseSDA = 0;   //写0SCL = 1;       //拉高时钟,让从机读SDADAT <<= 1;      //为发送下一位左移1位}SCL = 0;          //拉低时钟总线,允许SDA释放SDA = 1;            //释放数据总线
}/*====================================
函数  :I2cReadByte()
参数  :无
返回值 :返回读出的一字节数据
描述  :I2C总线读一字节数据
====================================*/
uchar I2cReadByte(void)
{uchar i, DAT;for(i=0; i<8; i++)//分别读8次,每次读一位{DAT <<= 1; //数据左移1位,准备接收一位SCL = 0;   //拉低时钟总线,允许从机控制SDA变化SCL = 1;   //拉高时钟总线,读取SDA上的数据if(SDA)DAT |= 0X01;//为1则写1,否则不行执行写1,通过左移补0}return(DAT); //返回读出的数据
}

i2c.h

#ifndef _I2C_H
#define _I2C_H//I2C模拟硬件接口定义
sbit SCL = P0^6;
sbit SDA = P0^7;/*I2C常用变量宏定义*/
#define I2cRead         1           //I2C读方向位
#define I2cWrite        0           //I2C写方向//I2C延时5us函数
void I2cDelay_5us(void);//I2C总线起始信号
void I2cStart(void);//I2C总线停止信号
void I2cStop(void);//I2C总线读从机应答信号
bit ReadACK(void);//主机发送应答信号
void SendACK(bit i);//I2C发送一个字节数据
void I2cSendByte(uchar DAT);//I2C总线读一字节数据
uchar I2cReadByte(void);#endif

STC12C5A60S2单片机IIC例程相关推荐

  1. 合泰单片机触摸例程_合泰单片机iic例程

    本程序是基于合泰单片机的 ,如果需要移植于其他单片机只需稍微修改即可 模拟IIC(I2C)时序,C语言程序 #include "ht46R65.h" #define SDA _pa ...

  2. 扫盲教程:单片机IIC基础通信

    单片机IIC基础通信 1 接口定义 2 程序实例 阅读提示:本章主要讲解过去电路使用较多的24C02- 24C512存储器,对于现在 主流的STC15W系列单片机,通常都具有内部比较器与DataFla ...

  3. 热电偶单片机代码c语言,基于STC12C5A60S2单片机的恒温箱设计-LCD1602-热电偶(电路图+程序源码)...

    https://v.youku.com/v_show/id_XNDc2NzY1MDY2NA==.html?spm=a2hzp.8253869.0.0 2017-468.STC12C5A60S2恒温箱设 ...

  4. 16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M

    #define _iic_h_//pic单片机IIC通信初始化函数声明 void iiccsh(void); //pic单片机IIC通信读外围设备函数声明 //功能:传送一个8位地址,返回一个8位数据 ...

  5. STC12C5A60S2单片机IO口工作模式设定

    STC12C5A60S2单片机IO口工作模式设定 STC12C5A60S2 系列单片机其所有I/O口均可由软件配置成4种工作类型之一.4种类型分别为:准双向口(标准8051 输出模式).推挽输出.仅为 ...

  6. 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序

    51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序 Proteus仿真效果 注意点击运行仿真后,图像刷新出来比较慢. 示例主程序 #include "REG51.h& ...

  7. STC12C5A60S2单片机-双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...

  8. 单片机光敏电阻c语言程序怎么写,STC12C5A60S2 单片机,光敏电阻,步进电机,制作寻光器,始终指向光源...

    光纤传感专业的我转行做了嵌入式软件,可是心系光学专业啊.下班回来发现个 stc 的 51 单片机最小系统,是我之前做的,好久没碰了.正好手边有两个光敏电阻,结合着步进电机,琢磨着做一个寻光器玩玩,让箭 ...

  9. STC12C5A60S2单片机WIFI信号扫描报警监视系统信号增强信号过低报警

    实践制作DIY- GC0034-WIFI信号扫描监视报警 一.功能说明: 基于STM32单片机设计-WIFI信号扫描监视报警 二.功能介绍: STC12C5A60S2单片机 +ESP8266WIFI模 ...

最新文章

  1. 关于学习Python的一点学习总结(34->构造函数->重写方法和特殊构造)
  2. 1024. 科学计数法 (20)
  3. oracle存储过程参考资料(网上转载)
  4. 【ubuntu】ubuntu如何改变系统用户名
  5. Flash发布iOS应用全攻略(一)——如何在Flash里发布iOS应用
  6. LeetCode 70.爬楼梯(动态规划)
  7. SI4463研究计划(兼STM32F0进一步加深理解)
  8. linux 数位板内核,在Linux操作系统下使用高漫、绘王、Wacom等数位板的方法
  9. Python3.6之py文件转exe文件
  10. 地域和地方的区别_地方、地域、地区、地面、地段的区别_近义词词典_词林在线词典...
  11. html中如何把两行合并单元格,怎么把表格上下两行合并单元格合并
  12. 前后端分离架构设计(权限模型)
  13. 渗透测试学习笔记(metasploit)
  14. 可爱的BpXXX-图
  15. html mako
  16. 【Windows下设置全局以管理员身份运行cmd】
  17. 深度学习之目标检测(九)--YOLOv3 SPP理论介绍
  18. [校园广播系统 | IP广播 | 数字广播]校园数字IP网络广播系统方案
  19. 小米笔记本pro开机出现no bootable devices
  20. 迷你四旋翼无人机设计制造(4)——7自由度摇杆遥控器

热门文章

  1. 一文搞懂python threading(多线程)模块
  2. CycleGAN(六)模型结构更改
  3. 补充:学习理论的意义
  4. (附源码)计算机毕业设计ssm高校网上报销系统
  5. 一个简单存储过程的测试
  6. select标签移动端兼容
  7. 项目管理(PMP)项目质量管理
  8. 何谓商道?---浅读《商道》有感
  9. Google浏览器 安装 Elasticsearch-head 插件
  10. C++桌面应用开发(Qt学习)——对话框(1)