《嵌入式通讯协议栈实战》 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------高速全双工通信

相关推荐
LavaLin0124 分钟前
STM32H562RGT6 与 STM32F722RET6 规格对比
stm32
佳児素花痴╮1 小时前
STM32U575RIT6(USART)学习
stm32·嵌入式硬件·学习
小+不通文墨3 小时前
使用vscode里的U8G2 库编写OLED菜单控制
经验分享·笔记·单片机·嵌入式硬件·学习
oshan20123 小时前
零基础STM32入门教程--12-I2C 串行通迅
stm32·单片机·嵌入式硬件
Messy create4 小时前
【继续充值】
单片机
智购科技无人售货机工厂4 小时前
2026自动售货机防拆机物理安全设计:从安全螺丝到结构互锁的工程实践~YH
android·网络·驱动开发·python·单片机·安全·云原生
jufeng13075 小时前
STM32F103 定时器输入捕获实战:测频测周、编码器测速、红外解码全流程拆解
stm32·输入捕获·定时器·编码器
RedJACK~5 小时前
Windows11一级右键菜单添加Alacritty教程
单片机·嵌入式硬件
智闲电子设计5 小时前
STM32 DAC 实战:用 DMA 把定时器表变成波形,自制信号发生器
stm32·单片机·嵌入式硬件
zcmodeltech5 小时前
反应装置模型控制系统设计与实现:多设备协同联动方案
java·网络·数据库·stm32·嵌入式硬件·能源·制造