做论坛网站怎么样备案,免费咨询服务协议合同范本,怎么给网站做短信,wordpress内存占用优化目的/效果
利用存储芯片AT24C02存储数据#xff0c;LCD1602显示存储的数据。 一#xff0c;STC单片机模块 二#xff0c;AT24C02存储芯片
2.1 介绍
AT24C02是一个2K位串行CMOS E2PROM#xff0c;内部含有256个8位字节#xff0c;采用先进CMOS技术实质上减少了器件的功…目的/效果
利用存储芯片AT24C02存储数据LCD1602显示存储的数据。 一STC单片机模块 二AT24C02存储芯片
2.1 介绍
AT24C02是一个2K位串行CMOS E2PROM内部含有256个8位字节采用先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器该器件通过IIC总线接口进行操作有一个专门的写保护功能。 2.2 存储芯片分类 工作电压1.8V5.5V 低功耗CMOS技术
工作电流1mA待机电流1uA
应用在内部结构128x8(1K),256x8(2K),512x8(4K),1024x8(8K),2048x8(16K)
二线串行接口支持标准IIC通信协议
双向数据传输协议 兼容 400KHz传输速率1.8V,2.5V,2.7V,3.6V
支持硬件写保护功能
擦出次数可达10000次
存储数据时间超过100年 2.3 内部结构
2.3.1 结构 2.3.2 引脚定义 2.4 I2C总线
I2C总线Inter IC BUS是由Philips公司开发的一种通用数据总线 两根通信线SCLSerial Clock、SDASerial Data
同步、半双工带数据应答
通用的I2C总线可以使各种设备的通信标准统一对于厂家来说使用成熟的方案可以缩短芯片设计周期、提高稳定性对于应用者来说使用通用的通信协议可以避免学习各种各样的自定义协议降低了学习和应用的难度
所有I2C设备的SCL连在一起SDA连在一起
设备的SCL和SDA均要配置成开漏输出模式 SCL和SDA各添加一个上拉电阻阻值一般为4.7KΩ左右
开漏输出和上拉电阻的共同作用实现了“线与”的功能此设计主要是为了解决多机通信互相干扰的问题 2.4.1 起始条件时序 起始条件SCL高电平期间SDA从高电平切换到低电平 /*** 函 数I2C开始* 参 数无* 返 回 值无*/
void I2C_Start(void)
{I2C_SDA1;I2C_SCL1;I2C_SDA0;I2C_SCL0;
} 2.4.2 终止条件时序
终止条件SCL高电平期间SDA从低电平切换到高电平 /*** 函 数I2C停止* 参 数无* 返 回 值无*/
void I2C_Stop(void)
{I2C_SDA0;I2C_SCL1;I2C_SDA1;
}
2.4.3 发送一个字节时序
发送一个字节SCL低电平期间主机将数据位依次放到SDA线上高位在前然后拉高SCL从机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化依次循环上述过程8次即可发送一个字节 /*** 函 数I2C发送一个字节* 参 数Byte 要发送的字节* 返 回 值无*/
void I2C_SendByte(unsigned char Byte)
{unsigned char i;for(i0;i8;i){I2C_SDAByte(0x80i);I2C_SCL1;I2C_SCL0;}
}
2.4.4 接收一个字节时序 接收一个字节SCL低电平期间从机将数据位依次放到SDA线上高位在前然后拉高SCL主机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化依次循环上述过程8次即可接收一个字节主机在接收之前需要释放SDA /*** 函 数I2C接收一个字节* 参 数无* 返 回 值接收到的一个字节数据*/
unsigned char I2C_ReceiveByte(void)
{unsigned char i,Byte0x00;I2C_SDA1;for(i0;i8;i){I2C_SCL1;if(I2C_SDA){Byte|(0x80i);}I2C_SCL0;}return Byte;
}2.4.5 发送应答时序
发送应答在接收完一个字节之后主机在下一个时钟发送一位数据数据0表示应答数据1表示非应答 /*** 函 数I2C发送应答* 参 数AckBit 应答位0为应答1为非应答* 返 回 值无*/
void I2C_SendAck(unsigned char AckBit)
{I2C_SDAAckBit;I2C_SCL1;I2C_SCL0;
}
2.4.6 接收应答时序 接收应答在发送完一个字节之后主机在下一个时钟接收一位数据判断从机是否应答数据0表示应答数据1表示非应答主机在接收之前需要释放SDA /*** 函 数I2C接收应答位* 参 数无* 返 回 值接收到的应答位0为应答1为非应答*/
unsigned char I2C_ReceiveAck(void)
{unsigned char AckBit;I2C_SDA1;I2C_SCL1;AckBitI2C_SDA;I2C_SCL0;return AckBit;
}2.4.7 读写总时序
像谁发写什么数据 向谁收读什么数据 2.5 AT24C02 读写操作
器件地址信息由1、0序列组成前4位如图中所示对于所有串行EEPROM都是一样的。对于24CO2/32/64随后3位A2、A1和A0为器件地址位必须与硬件输入引脚保持一致。对于24C04随后2位A2和A1为器件地址位另1位为页地址位。A2和A1必须与硬件输入引脚保持一致而AO是空脚。 2.5.1 读数据操作
AT24C02的固定地址为1010可配置地址本开发板上为000 所以SLAVE ADDRESSW为0xA0SLAVE ADDRESSR为0xA1
#define AT24C02_ADDRESS 0xA0 //AT24C02地址
读出在WORD ADDRESS处的数据DATA /*** 函 数AT24C02读取一个字节* 参 数WordAddress 要读出字节的地址* 返 回 值无*/
unsigned char AT24C02_ReadByte(unsigned char WordAddress)
{unsigned char Data;I2C_Start(); //I2C开始I2C_SendByte(AT24C02_ADDRESS); //发送AT24C02地址I2C_ReceiveAck(); //接收应答I2C_SendByte(WordAddress); //发送要读出字节的地址I2C_ReceiveAck(); //接收应答I2C_Start(); //I2C开始I2C_SendByte(AT24C02_ADDRESS|0x01); //发送读数据的请求I2C_ReceiveAck(); //接收应答DataI2C_ReceiveByte(); //接收读取的数据I2C_SendAck(1); //发送应答I2C_Stop(); //停止I2Creturn Data;
} 2.5.2 写数据操作
在WORD ADDRESS处写入数据DATA /*** 函 数AT24C02写入一个字节* 参 数WordAddress 要写入字节的地址Data 要写入的数据* 返 回 值无*/
void AT24C02_WriteByte(unsigned char WordAddress,Data)
{I2C_Start(); //I2C开始I2C_SendByte(AT24C02_ADDRESS); //发送AT24C02地址I2C_ReceiveAck(); //接收应答I2C_SendByte(WordAddress); //发送要写入字节的地址I2C_ReceiveAck(); //接收应答I2C_SendByte(Data); //发送数据I2C_ReceiveAck(); //接收应答I2C_Stop(); //I2C停止
} 三创建Keil项目
详细参考51单片机STC89C52RC——创建Keil项目-CSDN博客
四代码
main.c
#include REGX52.H
#include LCD1602.h
#include Key.h
#include AT24C02.h
#include Delay.h
/*** 函 数主函数* 参 数无* 返 回 值无*/
void mian()
{unsigned char KeyNum; //按键值unsigned int Num; //数据值存储LCD_Init();LCD_ShowNum(1,1,Num,5);while(1){KeyNumKey(); //获取按下的键值if(KeyNum1) //K1按键Num自增{Num;LCD_ShowNum(1,1,Num,5);}if(KeyNum2) //K2按键Num自减{Num--;LCD_ShowNum(1,1,Num,5);}if(KeyNum3) //K3按键向AT24C02写入数据{AT24C02_WriteByte(0,Num%256);Delay_ms(5);AT24C02_WriteByte(1,Num/256);Delay_ms(5);LCD_ShowString(2,1,Write OK);Delay_ms(1000);LCD_ShowString(2,1, );}if(KeyNum4) //K4按键从AT24C02读取数据{NumAT24C02_ReadByte(0);Num|AT24C02_ReadByte(1)8;LCD_ShowNum(1,1,Num,5);LCD_ShowString(2,1,Read OK );Delay_ms(1000);LCD_ShowString(2,1, );}}
}
详细参考 Gitee 地址 STC89C52RC: 51单片机学习资料、AT24C02
五代码编译、下载到51单片机
代码编译请参考
《51单片机STC89C52RC——代码编译-CSDN博客》
代码下载请参考
《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》