《嵌入式通讯协议栈实战》 5 AT24C02与OLED

第 5 篇:I2C 设备驱动编写------AT24C02 EEPROM + SSD1306 OLED


1. AT24C02 EEPROM 驱动

c 复制代码
#define EEPROM_ADDR  0x50  // 7 位地址

void eeprom_write_byte(uint8_t addr, uint8_t data) {
    uint8_t buf[2] = {addr, data};
    i2c_write_bytes(EEPROM_ADDR, buf, 2);
    delay_ms(5);  // 等待内部写入完成(最大 5ms)
}

uint8_t eeprom_read_byte(uint8_t addr) {
    i2c_write_byte(EEPROM_ADDR, addr);  // 先写地址指针
    return i2c_read_byte(EEPROM_ADDR);  // 再读数据
}

AT24C02 的页大小是 8 字节,跨页写入需要分两笔------先写第一页的剩余部分,再写第二页。超过 8 字节的单次写入会回卷覆盖本页开头。


2. SSD1306 OLED 驱动

c 复制代码
#define OLED_ADDR  0x3C

void oled_write_cmd(uint8_t cmd) {
    uint8_t buf[2] = {0x00, cmd};  // 0x00 = 命令模式
    i2c_write_bytes(OLED_ADDR, buf, 2);
}

void oled_write_data(uint8_t data) {
    uint8_t buf[2] = {0x40, data};  // 0x40 = 数据模式
    i2c_write_bytes(OLED_ADDR, buf, 2);
}

void oled_init(void) {
    oled_write_cmd(0xAE);  // 关闭显示
    oled_write_cmd(0xD5); oled_write_cmd(0x80);  // 时钟
    oled_write_cmd(0xA8); oled_write_cmd(0x3F);  // 多路复用
    oled_write_cmd(0x8D); oled_write_cmd(0x14);  // 电荷泵
    oled_write_cmd(0xAF);  // 开启显示
}

下一篇:SPI------高速全双工通信

相关推荐
ysu_03142 小时前
TinyML 模型部署:从 Edge Impulse 到 STM32F103
驱动开发·stm32·嵌入式硬件·mcu·硬件架构·硬件工程·dsp开发
zjxtxdy5 小时前
SPI通信协议
笔记·单片机
朝发如雪8 小时前
快速掌握单片机基础(8)(内存映射与启动寻址方式)(编译工具链与构建流程)(C语言操作寄存器)
单片机
糖糖单片机设计9 小时前
基于STM32的电子密码锁设计与实现(矩阵键盘+防拆检测+GSM远程报警)
人工智能·stm32·单片机·嵌入式硬件
充哥单片机设计10 小时前
【STM32开源项目】智能家电控制系统
stm32·单片机·嵌入式硬件·毕业设计·智能家电控制·家电控制
qq_4017004111 小时前
STM32 UART+DMA+IDLE 接收完整实现:从“能跑“到“不丢包“
单片机
捷瑞电子工坊13 小时前
嵌入式蓝桥杯从零点亮第一个LED
stm32·蓝桥杯·cubemx·嵌入式·led·ll·锁存
louis.D.14 小时前
Git 本地单线速查
单片机
小李不想当小白14 小时前
PCB结构与组成(PCB设计入门学习笔记)
经验分享·笔记·单片机·嵌入式硬件·学习·pcb工艺·pcb
新晨单片机设计15 小时前
S004R-基于STM32单片机智能门禁系统(密码、指纹、人脸、刷卡、蓝牙)【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件·proteus