ssd1315驱动oled屏_oled屏幕的手机有哪些

ssd1315驱动oled屏_oled屏幕的手机有哪些淘宝隔壁老王家的OLED运动手环,非常的便宜2RMB一个。###Part0:可用器件列表0x00:OLDE屏幕:0.91inch,分辨率:12832,主控:SSD1306,接口:SPI,颜色:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

淘宝隔壁老王家的OLED运动手环,非常的便宜2RMB一个。
ssd1315驱动oled屏_oled屏幕的手机有哪些

Part0:可用器件列表

0x00: OLDE屏幕:0.91 inch,分辨率:128*32,主控:SSD1306,接口:SPI,颜色:亮白
ssd1315驱动oled屏_oled屏幕的手机有哪些

0x01: CP2104 USB转串口芯片,I/O电压:3V ~ 3.6V,功能:桥,USB 至 UART,数据速率:2Mbps
这个芯片,JLC单卖9元左右,可以说2元买来只要USB2UART芯片是好的就能回本的。
ssd1315驱动oled屏_oled屏幕的手机有哪些ssd1315驱动oled屏_oled屏幕的手机有哪些
ssd1315驱动oled屏_oled屏幕的手机有哪些

0x02: 24C256 EEPROM存储芯片,32KB,品牌未知,数据手册可以参考ISSI24C256,I2C接口。
ssd1315驱动oled屏_oled屏幕的手机有哪些
ssd1315驱动oled屏_oled屏幕的手机有哪些

0x03: 其他元件,8M晶振,三线震动开关(计步用?),LTH7 4.2V单节锂电充电芯片,单片机型号抹了丝印无从查起:(…
ssd1315驱动oled屏_oled屏幕的手机有哪些

Part1:0.91inch OLED驱动

先上效果图,5*7 ASCII字体显示温湿度信息。
ssd1315驱动oled屏_oled屏幕的手机有哪些

屏幕引脚定义:
ssd1315驱动oled屏_oled屏幕的手机有哪些
ssd1315驱动oled屏_oled屏幕的手机有哪些
飞线进行连接,需要连接的引脚有(VDDB、VDD接3.3V)、(VSS接地)、(CS#片选)、(RES#复位)、(D/C#数据/命令控制线)、(SCLK SPI时钟)、(SDIN SPI的MOSI)
C2P-C2N、C1P-C1N接1000nF无极性电容,IREF 串接400K欧姆电阻接地,VCOMH、VCC串接2uF无极性电容接地,屏幕驱动测试这些都可以用板子上的,参数仅作为后期制作转接板参考用。
ssd1315驱动oled屏_oled屏幕的手机有哪些
驱动程序见我的github:https://github.com/Yanye0xFF/ESP8266-SSD1306

SSD1306驱动解析
上电时序:
ssd1315驱动oled屏_oled屏幕的手机有哪些
第一步:给屏幕VDD脚加电,这里同时也给VDDB脚加电。
ssd1315驱动oled屏_oled屏幕的手机有哪些
第二步:拉低RES#脚至少3微秒,然后再拉高,产生一个上升沿复位脉冲。
第三步:执行初始化步骤,设置显示时钟,内置buffer偏移地址,屏幕亮度等,具体可以参考上方git代码与SSD1306手册。

/**
 * @brief 屏幕复位,拉低RES#至少3us后拉高。
 * */
void ICACHE_FLASH_ATTR ssd1306Reset() {
	GPIO_OUTPUT_SET(RESET_PIN_NUM, GPIO_PIN_LOW);
	os_delay_us(10);
	GPIO_OUTPUT_SET(RESET_PIN_NUM, GPIO_PIN_HIGH);
}
#define CMD_CONTRAST       (0x81u)
#define CMD_DISPLAY_ON     (0xAFu)
#define CMD_DISPLAY_OFF    (0xAEu)
#define CMD_DISPLAY_OFFSET    (0xD3u)
#define CMD_DISPLAY_CLK_DIV   (0xD5u)

static const uint32_t INIT_CMD_LEN = 22;
static const uint8_t INIT_COMMANDS[] = {CMD_DISPLAY_OFF, CMD_DISPLAY_CLK_DIV, 0x80, 0xA8, 0x1F, CMD_DISPLAY_OFFSET,
		0x00, 0x40, 0x8D, 0x14, 0xA0, 0xC0, 0xDA, 0x02, CMD_CONTRAST, 0x00, 0xD9, 0xF1, 0xDB, 0x64, 0xA4, 0xA6};
/**
 * @brief SSD1306初始化,先发送0xAE关闭显示,再则放初始化数据,然后填充数据清屏,最后发送0xAF打开显示。
 * */
void ICACHE_FLASH_ATTR ssd1306Init() {
	uint32_t i = 0, j = 0;
	// send init commands
	for(; i < INIT_CMD_LEN; i++) {
		ssd1306SendCmd(*(INIT_COMMANDS + i));
	}
	// clear oled display data;
	for(i = 0; i < 4; i++) {
		ssd1306SendCmd(0xB0 + i);
		for(j = 0; j < 128; j++) {
			ssd1306SendData(0x00);
		}
	}
	// turn on display
	ssd1306SendCmd(0xAF);
}

SSD1306 内置显存组织:
ssd1315驱动oled屏_oled屏幕的手机有哪些
由于该屏幕物理分辨率为128*32,因此片内显存只使用了Page0~Page3,扫描方式最小区域是一个Page,由于SSD1306支持显存地址重映射(方便实现镜像功能),在本文的驱动代码中使用的是默认地址,即上图黑色字体部分。
扫描方式:
ssd1315驱动oled屏_oled屏幕的手机有哪些
MCU内存刷新到显存方式:
monochrom模式 1bit颜色,一个字节表示8像素。

#define DISPLAY_WIDTH    128
#define DISPLAY_HEIGHT   32
#define DISPLAY_PAGE     4
static uint8_t *DISPLAY_BUFFER;
DISPLAY_BUFFER = (uint8_t *)os_malloc(sizeof(uint8_t) * (DISPLAY_WIDTH >> 3) * DISPLAY_HEIGHT);

/**
 * @brief Page0的地址为B0,一个page为128*8像素,单个page内纵向扫描,一次发送一字节;由此依次进行Page1,Page2...
 * */
void ssd1306Flush() {
	uint32_t page, column, i;
	uint8_t data, byte;
	for(page = 0; page < DISPLAY_PAGE; page++) {
		ssd1306SendCmd(0xB0 + page);
		for(column = 0; column < DISPLAY_WIDTH; column++) {
			// cat data
			for(i = 0, data = 0x00; i < 8; i++) {
				byte = *(DISPLAY_BUFFER + (page * 128) + (i << 4) + (column >> 3));
				data |= (((byte >> (column % 8)) & 0x1) << i);
			}
			ssd1306SendData(data);
		}
	}
}

Part2:制作USB2UART转接小板

这一步非常简单,按照CP2104原理图飞线即可,这里我仅接出了TXD、RXD和必要的电源与地,需要流控信号的还可以从芯片引脚上飞出DTR、DSR、RTS…
ssd1315驱动oled屏_oled屏幕的手机有哪些

Part3:SSD1306、CP2104技术手册下载

ssd1315驱动oled屏_oled屏幕的手机有哪些
https://files.cnblogs.com/files/yanye0xff/doc.zip

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167746.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月4日 下午8:36
下一篇 2022年8月4日 下午8:36


相关推荐

  • python有向图遍历_用Networkx进行有向图遍历

    python有向图遍历_用Networkx进行有向图遍历好吧 我要介绍的解决方案有点老套 但我愿意接受更多优化建议 在首先 我们将创建一个用于测试的虚拟图 importnetwor nx balanced tree 2 4 create using nx DiGraph 接下来 我们将使用 networkx 的 dfs treeAPI 使用最新版本 并使用 depth limit 属性来提取深度为 n 和 的树 其中 n 1 是用户输入的深

    2026年3月17日
    2
  • oracle中case when_oracle case when 嵌套

    oracle中case when_oracle case when 嵌套Case具有两种格式。简单Case函数和Case搜索函数。–简单Case函数CASEsexWHEN’1’THEN’男’WHEN’2’THEN’女’ELSE’其他’END–Case搜索函数CASEWHENsex=’1’THEN’男’WHENsex=’2’THEN’女’ELSE’其他’END…

    2022年10月5日
    6
  • MySQL 字符串数字转换

    MySQL 字符串数字转换1方法一:SELECTCAST(‘123’ASSIGNED);2方法二:SELECTCONVERT(‘123’,SIGNED);3方法三:SELECT’123’+0; 1//数字转字符串2CONCAT()

    2022年5月30日
    39
  • ride运行报错_chrome OS

    ride运行报错_chrome OShttp://chromedriver.storage.proxy.ustclug.org/index.html下载地址,注意需要与chrome版本对应chromedriver下载解压后,放在chrome安装目录下,查看安装目录chrome://version/最后配置环境变量,chrome安装目录配置在path后重启(我是win10,开始配置在系统变量中重启后无效,后来在用户变量…

    2025年6月3日
    6
  • C++后台开发之我见

    C++后台开发之我见C 后台开发之我见 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 2017 2 6 nbsp nbsp nbsp nbsp nbsp 工作也快两年了 偶然看到自己以前写过的一些技术博客 发现自己自毕业后一直没有更新过自己的技术博

    2026年3月18日
    2
  • Java编程新手入门要多久[通俗易懂]

    Java编程新手入门要多久[通俗易懂]1.Java是什么?Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。J…

    2022年5月21日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号