IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> IIC驱动OLED -> 正文阅读

[嵌入式]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】添加到<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个点)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:00:44  更:2022-08-06 11:01:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:21:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码