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

相关推荐
碧海银沙音频科技研究院4 小时前
基于炬芯ATS308X 设计的上位机usb 串口音乐EQ调节工具
stm32·单片机·嵌入式硬件
三佛科技-134163842127 小时前
过认证72W碳化硅方案(12V6A)主控HN1562+HN36228V 典型应用电路、变压器参数分享
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
Zwawa9 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Brilliantwxx9 小时前
【STM32】 内部 Flash 详解:寄存器逐位拆解 + 工作流程顺序全讲 + EEPROM再实现
stm32·单片机·嵌入式硬件·1024程序员节
木子单片机9 小时前
基于单片机的DS18B20温度传感器测温系统设计
单片机·嵌入式硬件·51单片机·keil
华清远见IT开放实验室9 小时前
实验室建设案例 | 安徽三联学院物联网实验室
stm32·单片机·嵌入式硬件·物联网·华清远见
Zw-awa10 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
stm32
深圳光特通信豆子11 小时前
TTL 光模块在工业控制与串口通信中的应用指南(10M BIDI 单模系列)
单片机·嵌入式硬件
桀人11 小时前
SPI概念引入
stm32·单片机·嵌入式硬件
离凌寒12 小时前
一、基于stm32+freertos下LD2410D和R60ADB1两款雷达的使用效果
stm32·单片机·嵌入式硬件