基于Proteus学习单片机系列(六)——I2C总线AT24C04
获取更多资源,请关注微信公众号:嵌入式基地
获取项目资源:公众号后台回复:单片机仿真
基于Proteus学习单片机系列(一)——点亮LED
基于Proteus学习单片机系列(二)——驱动数码管
基于Proteus学习单片机系列(三)——按键
基于Proteus学习单片机系列(四)——中断
基于Proteus学习单片机系列(五)——定时器实现电子表
基于Proteus学习单片机系列(六)——I2C总线AT24C04
基于Proteus学习单片机系列(七)——实时时钟DS1302
基于Proteus学习单片机系列(八)——AD转换及其应用--TLC549
基于Proteus学习单片机系列(九)——DA转换及其应用--TLC5615
基于Proteus学习单片机系列(十)——LCD1602
基于Proteus学习单片机系列(十一)——LCD12864
项目下载
点击下载
1.电路图
2.程序
主函数
#include<reg51.h>
#include<AT24C04.c>
void delay(unsigned int x )
{while(x--);
}
void main()
{init_24c04(); //I2总线初始化函数while(1){write_add_dat_24c04(1,0x0f); //写入地址1,保存数据0x0fdelay(300); //延时write_add_dat_24c04(2,0xf0); //写入地址二,保存数据0xf0delay(300); //延时P0 = read_add_dat_24c04(1); //读地址1,保存数据0x0f,并显示delay(50000); //延时P0 = read_add_dat_24c04(2); //读地址二,保存数据0xf0,并显示delay(50000); //延时}
}
I2C驱动
#include<intrins.h>
#define uchar unsigned char
#define nop _nop_()
sbit sda = P3^6; //sda接在P3^6
sbit scl = P3^7; //scl接在P3^7
/*I2总线启动*/
void start_24c04() //scl为高电平时,SDA由高向低跳变,开始传送数据
{scl = 1;nop; sda = 1;nop;sda = 0;nop;scl = 0;
}
/*I2总线停止*/
void stop_24c04() //scl为高电平时,SDA由低向高跳变,结束传送数据
{sda = 0;nop; scl = 1;nop;sda = 1;nop;
}
/*应答程序*/
void ack_24c04()
{uchar i = 255;scl = 1;nop;while(sda&&i--); //等待返回的低电平,若没有响应,适当延时自动向下执行scl = 0;nop;
}
/*I2总线初始化*/
void init_24c04()
{sda = 1;nop; //常态scl = 0;nop; //常态
}
/*读取一个字节*/
uchar read_onebyte_24c04()
{uchar i,dat;sda = 1; //释放总线for(i = 0;i<8;i++) //循环八次,得到八位的数据{scl = 1; //scl为高电平时,检测sda状态dat = dat<<1; //由高位向低位读取if(sda) //判断sda是否为高电平dat = dat|0x01; //若是,dat最低位置一,不是则为0scl = 0; //scl置低电平}sda = 1; //应答scl = 0; // 信号return(dat);
}
/*写入一个字节*/
void write_onebyte_24c04(uchar dat)
{uchar i;for(i=0;i<8;i++) //循环八次,得到八位的数据{sda = (bit)(dat&0x80); //取最高位dat = dat<<1; //由高位向低位写入scl = 1;scl = 0;}sda = 1; //应答scl = 0; // 信号
}
/*对某个地址写一字节的数据*/
void write_add_dat_24c04(uchar add,dat)
{start_24c04(); //启动write_onebyte_24c04(0xa0); //对AT24C04写操作ack_24c04(); //应答write_onebyte_24c04(add); //写入数据存放地址ack_24c04(); //应答write_onebyte_24c04(dat); //写入数据ack_24c04(); //应答stop_24c04(); //停止
}
/*读取某个地址一字节数据*/
uchar read_add_dat_24c04(uchar add)
{uchar dat;start_24c04(); //启动write_onebyte_24c04(0xa0); //对AT24C04写操作ack_24c04(); //应答write_onebyte_24c04(add); //写入将要读的数据地址ack_24c04(); //应答start_24c04(); //启动write_onebyte_24c04(0xa1); //对AT24C04读操作ack_24c04(); //应答dat = read_onebyte_24c04(); //赋值stop_24c04(); //停止return (dat);
}
基于Proteus学习单片机系列(六)——I2C总线AT24C04相关推荐
- 基于Proteus学习单片机系列(七)——实时时钟DS1302
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...
- 基于Proteus学习单片机系列(二)——驱动数码管
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...
- 基于Proteus学习单片机系列(七)——AD转换及其应用--ADC0832
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 项目下载 点击下载 1.电路图 2.程序 只在这里贴出主函数,其余的请点击上面(点击下载)进行下载,实在太麻烦. ...
- 51单片机系列--AT24C02(总线)
存储器介绍 易失性存储器/RAM 非易失性存储器/ROM SRAM(静态RAM) Mask ROM(掩膜ROM) DRAM(动态RAM) PROM(可编程ROM) EPROM(可擦除可编程ROM ) ...
- SylixOS 基于STM32平台的GPIO模仿I2C总线的驱动开发流程
2019独角兽企业重金招聘Python工程师标准>>> 概述 本文档以STM32F767平台为例,详细介绍SylixOS上GPIO模仿I2C总线的驱动开发流程. 初始化 GPIO模仿 ...
- Nordic nRF5 SDK 学习笔记之四, TWI (I2C) 总线
硬件: nRF52832 SDK: Ver 15.2.0 目标: TWI (I2C) 总线应用 (TWI MASTER 模式) 样例: <InstallFolder>\examples\p ...
- 基于 Proteus 的单片机仿真
最近又要用proteus进行仿真51单片机-- 1.元器件的放置: 里面都是些英文,找起来头大,下面的一些表都是常见的单片机仿真使用的原件,很方便的就能找到了. 2.电源和地的放置 反正我在元件库中找 ...
- 单片机怎么通过按键控制计时器的开始和停止_学习电路仿真:基于proteus电路仿真软件的交通灯控制电路设计...
电路仿真软件是当代重要软件之一,缺乏电路仿真软件,模拟运行环境将无法搭建.对于电路仿真软件,虽然市面上类别众多,但知名电路仿真软件为proteus.本文对于电路仿真软件的介绍,为基于proteus的交 ...
- TM1637芯片使用(I2C总线协议学习),含完整程序
目录 1.TM1637芯片(大自然的搬运工) 芯片介绍 引脚图 时序图 其他关键 管脚功能 命令格式 封装 2. 51单片机程序编写 I2C_START(): I2C_WR(): I2C_ACK(): ...
最新文章
- sql server面试题
- 剑指offer_第12题_数值的整数次方
- 华为汪涛:定义5.5G,构建美好智能世界
- 手表可测血压,耳机支持颈椎保护……这届电子设备越来越“养生”了
- [原创]TimeQuest约束外设之诡异的Create Generated Clocks用法
- leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)
- 获取成员函数地址及获取函数地址
- LeetCode 466. 统计重复个数(循环节)
- pycharm和python一样吗_PyCharm中Directory与Python package的区别
- weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能
- java和php基础部分相同或异同
- javascript创建表格
- 反射——Reflection
- QuickCHM 2.6中“不支持此接口”错误的“彻底”解决(补丁)
- iOS UI切图@1x、@2x、@3x的实际尺寸
- Android Alarm闹钟
- Qt2D游戏开发引擎QtGameEngine使用入门9——在游戏界面中添加gui按钮文本等控件
- Photoshop教程_ps中怎么载入图案?PS图案如何导入?
- 英语学了十年,还是学不会!建议你:那就别学了!
- 2018 中国大陆网速排名世界 141 位;Linux 4.18 内核发布
热门文章
- Python计算机视觉编程第三章——图像到图像的映射
- ts报错:Object is possibly ‘undefined‘.Vetur(2532)
- 谈谈个人10几年来的一些经历感悟
- Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...
- 常见中间件介绍和分析
- 亿万级数据处理的高效解决方案
- 长期主义:做你余生中最重要的事
- 《zw版·Halcon-delphi系列原创教程》 只有2行代码的超市收款单ocr脚本
- 郑军学长-解决SVN访问慢[密]
- 存量 IoT 设备零改造,一键迁移企业物联网实例