当前位置:网站首页>IIC驱动OLED
IIC驱动OLED
2022-08-04 19:37:00 【Paradise_Violet】
目录
前言
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】添加到<app/driver>下,将【i2Cmasterh】添加到<app/include/driver>下
如果【oled.h】不是放在<app/include/driver>下,需修改所有包含【i2C_master.h】头文件路径
2、将【oled.c】添加到<app/driver>下,将【oled.h、oledfont.h】添加到<app/include/ driver>下
如果【oled.h】不是放在<app/include/driver>下,需修改所有包含【oled.h】头文件路径
如果【oledfonth】不是放在<app/include/driver>下,需修改所有包含 【oledfont.h】头文件路径
3、如果<user main.c>中没有【delay ms】函数,那么在<user main.c>中添加【delay ms】函数。因为【oled init函数】中需使用【delay ms函数】
如何使用OLED驱动函数
0.96'OLED分辨率二= 128*64,即【每一行有128个点,每一列有64个点】
【oledfont.h】中字符的大小为【8*16】,即:一个字符占【横向8个点、纵向16个点】
只支持ASCI码表中,从【'"】~[’~'】的字符
1、首先在<user init>函数中,执行 「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初始化的时候需要使用毫秒延迟函数
// 毫秒延时函数
//===========================================
void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
{ for(;C_time>0;C_time--)
os_delay_us(1000);
}
user_init
在user_init中首先执行oled初始化操作,之后调用oled显示函数来显示字符串或是点分十进制形式的ip地址
OLED显示字符串
8*8=64, IIC_OLED在Project后面所以y不需要改变还是0
// OLED显示字符串
//-------------------------------------------------------------------------------------------------------------------------
OLED_ShowString(0,0,"Project="); // 从(0,0)开始显示
OLED_ShowString(64,0,"IIC_OLED"); // 从(64,0)开始显示 // 因为,【Project=】一共8个字符,横向上占用【64】个点
OLED显示【点分十进制_IP地址】
// OLED显示【点分十进制_IP地址】
//-------------------------------------------------------------------------------------------------------------------------
u8 IP_Address[4];
IP_Address[0] = 192;
IP_Address[1] = 168;
IP_Address[2] = 4;
IP_Address[3] = 1;
// u8 IP_Address[4] = { 192,168,4,1 }; // 数组形式表示【点分十进制_IP地址】
OLED_ShowString(0,2,"IP:"); // 从(0,2)开始显示 // 因为【Project=IIC_OLED】在纵向上占用了【2】页(2*8个点)
OLED_ShowIP(24, 2, IP_Address); // 从(24,2)开始显示 // 因为,【IP:】一共3个字符,横向上占用【24】个点
最后调用oled显示字符串函数来显示一个比较长的字符串来看看如果字符串超过了行尾会发生什么情况
OLED_ShowString(0,4,"0123456789ABCDEFGHIJKLMN"); // 从(0,4)开始显示
// 因为【Project=IIC_OLED】【IP:192.168.4.1】在纵向上占用了【4】页(4*8个点)
边栏推荐
- Zip4j使用
- Exploration and Practice of Database Governance
- 四维图新:子公司首款功能安全 MCU 芯片已陆续送样
- ELECTRA:Pre-training Text Encoders as Discriminators Rather Than Generators
- [Sql刷题篇] 查询信息数据--Day1
- "WAIC 2022 · hackers marathon" two ants wealth competition invited you to fight!
- 带你了解数据分布式存储原理
- 如何让远在的老板看到你!----------来自财富中国网
- 使用.NET简单实现一个Redis的高性能克隆版(二)
- Yuanguo chain game system development
猜你喜欢
随机推荐
awk 统计平均 最大 最小值
如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools - Extension Pack
四维图新:子公司首款功能安全 MCU 芯片已陆续送样
一些性能测试的要点
Switch node version and switch npm source tool
编译optimize源码实现过程
什么是内部客户服务?
电脑一键重装系统内存完整性无法打开怎么办
【Attention演变史】翻译模型seq2seq (第二弹)
5G NR 笔记记录
【Attention 演变史】RNN的产生、架构、推广、问题(第一弹)
MogDB学习笔记-环境准备及单实例安装
Internship: changed the requirements
笔记本WIFI无法上网(无Internet访问权限)
MMDetection usage example: from entry to exit
入门:人脸专集1 | 级联卷积神经网络用于人脸检测(文末福利)
【着色器实现Glitch单项故障闪烁效果(与Television效果不同)_Shader效果第十四篇】
really time ntp service start command
Seata source code analysis: various message processing processes of seata server
使用.NET简单实现一个Redis的高性能克隆版(二)