存储器介绍
存储器简化模型
引脚以及电路
内部结构框图
I2C总线❗
I2C总线介绍
I2C电路规范
I2C时序❗
I2C数据帧❗
AT24C02数据帧❗
AT24C02数据存储
功能
按键1 使数字+1
按键2 使数字-1
按键3 将数字写入AT24C02
按键4 读出AT24C02刚刚写入的数据
代码
main.c
#include #include "LCD1602.h" #include "Key.h" #include "AT24C02.h" #include "Delay.h" unsigned char KeyNum; unsigned int Num; void main() { LCD_Init(); LCD_ShowNum(1,1,Num,5); while(1) { KeyNum=Key(); if(KeyNum==1) //K1按键,Num自增 { Num++; LCD_ShowNum(1,1,Num,5); } if(KeyNum==2) //K2按键,Num自减 { Num--; LCD_ShowNum(1,1,Num,5); } if(KeyNum==3) //K3按键,向AT24C02写入数据 { AT24C02_WriteByte(0,Num%256); Delay(5); AT24C02_WriteByte(1,Num/256); Delay(5); LCD_ShowString(2,1,"Write OK"); Delay(1000); LCD_ShowString(2,1," "); } if(KeyNum==4) //K4按键,从AT24C02读取数据 { Num=AT24C02_ReadByte(0); Num|=AT24C02_ReadByte(1)<<8; LCD_ShowNum(1,1,Num,5); LCD_ShowString(2,1,"Read OK "); Delay(1000); LCD_ShowString(2,1," "); } } } I2C.c #include sbit I2C_SCL=P2^1; sbit I2C_SDA=P2^0; /** * @brief I2C开始 * @param 无 * @retval 无 */ void I2C_Start(void) { I2C_SDA=1; I2C_SCL=1; I2C_SDA=0; I2C_SCL=0; } /** * @brief I2C停止 * @param 无 * @retval 无 */ void I2C_Stop(void) { I2C_SDA=0; I2C_SCL=1; I2C_SDA=1; } /** * @brief I2C发送一个字节 * @param Byte 要发送的字节 * @retval 无 */ void I2C_SendByte(unsigned char Byte) { unsigned char i; for(i=0;i<8;i++) { I2C_SDA=Byte&(0x80>>i); I2C_SCL=1; I2C_SCL=0; } } /** * @brief I2C接收一个字节 * @param 无 * @retval 接收到的一个字节数据 */ unsigned char I2C_ReceiveByte(void) { unsigned char i,Byte=0x00; I2C_SDA=1; for(i=0;i<8;i++) { I2C_SCL=1; if(I2C_SDA){Byte|=(0x80>>i);} I2C_SCL=0; } return Byte; } /** * @brief I2C发送应答 * @param AckBit 应答位,0为应答,1为非应答 * @retval 无 */ void I2C_SendAck(unsigned char AckBit) { I2C_SDA=AckBit; I2C_SCL=1; I2C_SCL=0; } /** * @brief I2C接收应答位 * @param 无 * @retval 接收到的应答位,0为应答,1为非应答 */ unsigned char I2C_ReceiveAck(void) { unsigned char AckBit; I2C_SDA=1; I2C_SCL=1; AckBit=I2C_SDA; I2C_SCL=0; return AckBit; } #include #include "I2C.h" #define AT24C02_ADDRESS 0xA0 /** * @brief AT24C02写入一个字节 * @param WordAddress 要写入字节的地址 * @param Data 要写入的数据 * @retval 无 */ void AT24C02_WriteByte(unsigned char WordAddress,Data) { I2C_Start(); I2C_SendByte(AT24C02_ADDRESS); I2C_ReceiveAck(); I2C_SendByte(WordAddress); I2C_ReceiveAck(); I2C_SendByte(Data); I2C_ReceiveAck(); I2C_Stop(); } /** * @brief AT24C02读取一个字节 * @param WordAddress 要读出字节的地址 * @retval 读出的数据 */ unsigned char AT24C02_ReadByte(unsigned char WordAddress) { unsigned char Data; I2C_Start(); I2C_SendByte(AT24C02_ADDRESS); I2C_ReceiveAck(); I2C_SendByte(WordAddress); I2C_ReceiveAck(); I2C_Start(); I2C_SendByte(AT24C02_ADDRESS|0x01); I2C_ReceiveAck(); Data=I2C_ReceiveByte(); I2C_SendAck(1); I2C_Stop(); return Data; }
上一篇:C51---13 DS18B20温度传感器
下一篇:C51---11 蜂鸣器
推荐阅读最新更新时间:2024-11-10 12:21
设计资源 培训 开发板 精华推荐
- 基于ESP32的频谱灯
- 使用 Broadcom Inc 的 HCPL-4200 的参考设计
- AD9717-EBZ,用于 AD9717 双通道、14 位、125 MSPS TxDAC 数模转换器的评估板
- A4950 双电机驱动
- 使用具有可编程电源电压的 ADXRS450 数字速率传感器和 ADuC7026 MCU 感测角速度
- BD49xxx系列BD49L52电压检测IC的典型应用
- 1.8V, 2.5V, 3.3V, 5V, 6V DC-DC 单路输出电源充电器
- LDK130PU32R 3.2V、300 mA 低静态电流、极低噪声 LDO 的典型应用固定版电路
- 【星火计划】基于HK32F030MF4P6的舵机测试仪
- AM2G-0503DZ ±3.3V 2 瓦 DC-DC 转换器的典型应用
- 中国版BeagleBone Black超低价团购!11月18日火爆开团
- ADI有奖下载活动之11 ADI锂电池测试设备解决方案
- 免费领取|射频年度大会EDI CON VIP全场通票(注册到场100%中奖!)
- 有奖直播:基于DLP® Pico™技术的TI桌面级DLP 3D打印、3D扫描及工业显示应用
- 免费领取|射频年度大会EDI CON VIP全场通票(注册到场100%中奖!)
- 发现之旅,让你身边的电源无处可藏!
- 是德科技有奖问答活动之三,极限温度测试示波器探头方案,答题闯关赢好礼!
- Mouser 新用户大礼包:你购物,我5折返E金币!
- Microchip 直播|时间同步的必要性及其解决方案
- 调查:全新 TI E2E中文社区等你体验,等你抽奖!还可邀请好友助你一臂之力!