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

相关推荐
小何好运暴富开心幸福20 分钟前
嵌入式历史与生态
stm32·单片机·mcu
甜甜的大香瓜1 小时前
【MT32F006】MT32F006之Stimer延时(轮询)
单片机
辰哥单片机设计1 小时前
MP3播放器模块(STM32)
stm32·单片机·嵌入式硬件
Zw-awa2 小时前
传感器模块都在交出什么:从模拟电压到数字协议
stm32
Brilliantwxx2 小时前
【STM32】 工程实战 WS2812B 全彩 LED 灯控制(DMA 驱动)
stm32·单片机·嵌入式硬件·mcu
科芯创展2 小时前
10~120V宽压1.5A降压DC-DC XZ1830技术特性与应用解析
单片机
逐步前行3 小时前
ESP32-S3-PCNT(脉冲计数控制器)
单片机·嵌入式硬件
咖丨喱3 小时前
【中断与收包】
单片机·嵌入式硬件
youshi66684 小时前
平衡车——PID算法优化
stm32·单片机·嵌入式硬件·算法·pid·平衡车
comyccccc4 小时前
高效降压电路布局与铺铜优化技巧学习笔记
单片机·嵌入式硬件