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

相关推荐
天吾cc4 小时前
RTT-IO设备模型
单片机·嵌入式硬件·学习
wengqidaifeng8 小时前
2026 年电赛(TI 杯)H 题:MaxiCamPro、双主控通信、VOFA+ 遥测与可复现实验方法
c语言·单片机·嵌入式硬件
寻道模式8 小时前
【运维心得】电视KK.RV22.E32B“捉鬼”实录:从炸机到 eMMC 的千里追击(1)
单片机·嵌入式硬件·mos管·开关电源
科芯创展10 小时前
XZ6206,6.5V,300mA稳压LDO芯片
单片机
平凡的小蚂蚁11 小时前
Exynos4412-POP-7inLCD裸机开发完整教程(STM32 库风格)
驱动开发·stm32·单片机·嵌入式硬件·嵌入式·硬件工程
破晓单片机11 小时前
096、STM32项目分享开源:蓝牙智能手环
stm32·单片机·嵌入式硬件·开源
天吾cc11 小时前
RTT-Pin设备模型
单片机·嵌入式硬件
ACP广源盛1392462567312 小时前
Ling‑3.0‑flash 昇腾 0‑Day 适配落地@ACP#IX9104 在国产高密度算力矩阵中的机遇与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
wengqidaifeng13 小时前
2026 年电赛(TI 杯)H 题:摆杆机械结构、MaxiCamPro 测量、步进编码器与三层 PID
单片机·嵌入式硬件·mcu