• IIC驱动OLED


    目录

    前言

    IIC接口

     I2C master 接⼝

    初始化

     IIC起始

    IIC停止 

    I2C 主机回复 ACK 

     I2C 主机回复 NACK

    检查 I2C 从机应答 

    向 I2C 总线写数据 

    向 I2C 总线读数据

    8266原理图

    如何使用OLED驱动函数

    一定要定义毫秒延时函数 

    user_init

    OLED显示字符串

    OLED显示【点分十进制_IP地址】


    前言

    ESP8266 ⽬前提供作为 I2C 主设备的接⼝,可以对其他 I2C 从设备(例如⼤多数数字传 感器)进⾏控制与读写。

    ESP8266 作为 I2C 主机的 SDA 与 SCL 线波形由 GPIO 模拟产⽣,I2C 时钟频率约为 100 kHz。

    IIC接口

     I2C master 接⼝

    初始化

    i2c_master_gpio_init:GPIO 硬件初始化。

    具体如下:

    1. 选择 pin 脚功能,配置为 GPIO

    2. 配置 GPIO 为开漏模式

    3. 初始化 SDA 与 SCL 为⾼电平

    4. 使能 GPIO 中断并复位从机状态。

    i2c_master_init(void):复位从机状态

     IIC起始

    i2c_master_start(void):主机产⽣ I2C 起始条件。

    IIC停止 

    i2c_master_stop(void):主机产⽣ I2C 停⽌条件。

    I2C 主机回复 ACK 

    i2c_master_send_ack(void):设置 I2C 主机应答 ACK。(8266应答从机)

     I2C 主机回复 NACK

    i2c_master_send_nack(void):设置 I2C 主机回复 NACK。(8266不应答从机)

    检查 I2C 从机应答 

    bool i2c_master_checkAck(void):检查从机应答状态(8266检查从机是否应答)

    向 I2C 总线写数据 

    i2c_master_writeByte(uint8 wrdata):向 I2C 总线写数(8266向iic总线写入一个字节数据)

    向 I2C 总线读数据

    i2c_master_readByte (void):从 SPI slave 读取⼀个字节(8266从iic总线中读取一个字节数据)

    8266原理图

    SCL----GPIO14         SDA-------GPIO2

    ESP-12模组的led阳极接的是3.3v阴极串联电阻接到GPIO2,当我们使用GPIO2作为iic的SDA作为iic通信时,这个led会亮,正常现象

    注:如果想使用IIC_ APl函数,需将 【i2c master.h、i2c master.c】添加到正确的工程文件夹中,并包含头文件 

     将 【i2c master.h、i2c master.c】 、 [oled.h、 oled.c、oledfonth】文件添加到工程文件夹中。
    1、将【i2Cmaster.c】添加到下,将【i2Cmasterh】添加到
    如果【oled.h】不是放在下,需修改所有包含【i2C_master.h】头文件路径
    2、将【oled.c】添加到下,将【oled.h、oledfont.h】添加到
    如果【oled.h】不是放在下,需修改所有包含【oled.h】头文件路径
    如果【oledfonth】不是放在下,需修改所有包含 【oledfont.h】头文件路径
    3、如果中没有【delay ms】函数,那么在中添加【delay ms】函数。因为【oled init函数】中需使用【delay ms函数】

    如何使用OLED驱动函数


    0.96'OLED分辨率二= 128*64,即【每一行有128个点,每一列有64个点】
    【oledfont.h】中字符的大小为【8*16】,即:一个字符占【横向8个点、纵向16个点】
    只支持ASCI码表中,从【'"】~[’~'】的字符


    1、首先在函数中,执行 「OLED_ Inito:】初始化函数
    2、调用【OLED_ Showstring(x,y,"…”)】来显示字符/字符串
    注:【x、y从O开始】
    3、调用【OLED_ Show/Px,y, A】来显示【点分十进制1P地址】   注:【x、y从0开始】

    【OLED ShowString(x, y,“....”)】
    【x】OLED显示字符串的起始列(1字符占8列)          注:【x】尽量能整除8
    如果字符串超过行尾,则会跳到下一个字符行

    【y】OLED显示字符串的起始页(1页=8行)                    注:【y】尽量能整除2
    尽量不要超过【6】


    宇符显示位置 == (x, y*8)
    可以认为OLED是二维坐标系的第四象限(y |-y|,x趋于0、y趋于0,则显示的字符->左上角(原点)

    【OLED ShowIP(x, y, A)】
    注:【u8 A[4]】,A是IP地址数组的首地址,每个元素对应一个<=255的整数
    建议:在程序中,初始化OLED后
    执行【OLED_ ShowString(x, y. "0123456789ABCDEFGHJKLMN")】,改变【x、y】的值,多试几次就可以了。 

    一定要定义毫秒延时函数 

    因为在oled初始化的时候需要使用毫秒延迟函数

    1. // 毫秒延时函数
    2. //===========================================
    3. void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
    4. { for(;C_time>0;C_time--)
    5. os_delay_us(1000);
    6. }

    user_init

    在user_init中首先执行oled初始化操作,之后调用oled显示函数来显示字符串或是点分十进制形式的ip地址

    OLED显示字符串

    8*8=64,  IIC_OLED在Project后面所以y不需要改变还是0

    1. // OLED显示字符串
    2. //-------------------------------------------------------------------------------------------------------------------------
    3. OLED_ShowString(0,0,"Project="); // 从(0,0)开始显示
    4. OLED_ShowString(64,0,"IIC_OLED"); // 从(64,0)开始显示 // 因为,【Project=】一共8个字符,横向上占用【64】个点

    OLED显示【点分十进制_IP地址】

    1. // OLED显示【点分十进制_IP地址】
    2. //-------------------------------------------------------------------------------------------------------------------------
    3. u8 IP_Address[4];
    4. IP_Address[0] = 192;
    5. IP_Address[1] = 168;
    6. IP_Address[2] = 4;
    7. IP_Address[3] = 1;
    8. // u8 IP_Address[4] = { 192,168,4,1 }; // 数组形式表示【点分十进制_IP地址】
    9. OLED_ShowString(0,2,"IP:"); // 从(0,2)开始显示 // 因为【Project=IIC_OLED】在纵向上占用了【2】页(2*8个点)
    10. OLED_ShowIP(24, 2, IP_Address); // 从(24,2)开始显示 // 因为,【IP:】一共3个字符,横向上占用【24】个点

    最后调用oled显示字符串函数来显示一个比较长的字符串来看看如果字符串超过了行尾会发生什么情况

    1. OLED_ShowString(0,4,"0123456789ABCDEFGHIJKLMN"); // 从(0,4)开始显示
    2. // 因为【Project=IIC_OLED】【IP:192.168.4.1】在纵向上占用了【4】页(4*8个点)

  • 相关阅读:
    SpringMVC的简单介绍及其使用
    Node如何获取pnpm安装的包源码真实代码路径并操作
    硬件顶配、数字先行,路特斯重塑「智能座舱」
    Winform / WPF 自定义控件 —— IPV4 地址输入框
    POI 和 EasyExcel
    Vue和React的区别
    开机优化加速
    全国双非院校考研信息汇总整理 Part.6
    YOLOv5算法改进(12)— 如何去更换主干网络(1)(包括代码+添加步骤+网络结构图)
    Uni-APP 安卓环境本地打包
  • 原文地址:https://blog.csdn.net/Paradise_Violet/article/details/126163906