钻石会员
主题
帖子
积分16741
阅读权限50
注册时间2009-7-20
最后登录1970-1-1
在线时间 小时
|
本帖最后由 reiyawea 于 2022-2-2 19:18 编辑
前言
偶然从箱底找出一个OLED屏,经过几天研究,翻遍国外网站,终于成功点亮。现记录如下,以期能帮助后来人。
屏信息
玻璃基板背面印字:PG-9664GFDB.03A、E05B0087-04-J03
软排线正面铜层字:UT、0232-F02
软排线背面印字:UG-9664GFDBF04、E055301、CP05C0035
升压板正面印字:ALO-095BSLN-J9、070409
此屏为OLED加软排线,排线上有升压和其他外围电路,底部0.5mm 22pin接口直连MCU即可。
单3.3V供电,升压电路输出13.75V,上电即启动。未使用主控内置的升压电路。
引脚定义
结合多方资料与实物交叉对比分析得出,可信度很高。
为了方便观察,下图为背面照片的镜像翻转,引脚从右至左为1到22。
点亮效果
下图为65K色(5-6-5)模式。也支持256色(3-3-2)模式。
主控资料
SSD1332_OLED_96x64_COLOR.pdf
(926.02 KB, 下载次数: 4)
接口
BS1、BS2接地,变为串行接口(SPI模式0),此时使用的引脚为
D/C#为数据/指令
CS#为片选
RES#为复位
D0为时钟SCLK
D1为数据SDIN
D2悬空
D3到7、E、R/W接地
启动代码
以下为C风格伪代码表示的启动过程,实际使用要根据硬件平台补充相关底层函数。
图像数据表示法:每像素用2字节表示,高5位为蓝,中6位为绿,低5位为红,先发高字节再发低字节。
- #include <stdint.h>
- const uint8_t oled_init_table[] = {
- 0xae, //OLED display OFF
- 0xa0, //Set remap&data format 0111 0000
- 0x74,
- 0xa1, //set display star row RAM
- 0x00,
- 0xa2, //set dispaly offset
- 0x00,
- 0xa4, //Set Display Mode
- 0xa8, //Set Multiplex Ratio
- 0x3f,
- 0xad, //Set Master Configuration
- 0x8f, //(External VCC Supply Selected)
- 0xB0, //Set Power Saving Mode
- 0x1a,
- 0xB1, //Set Phase 1 & 2 Period Adjustment
- 0x74,
- 0xb3, //Set Display Clock Divide Ratio / Oscillator Frequency
- 0xd0,
- 0x8A, //Set Second Pre-charge Speed of Color A
- 0x81,
- 0x8B, //Set Second Pre-charge Speed of Color B
- 0x82,
- 0x8C, //Set Second Pre-charge Speed of Color C
- 0x83,
- 0xBB, //Set Pre-charge Level
- 0x3e,
- 0xBE, //Set VCOMH
- 0x3e,
- 0x87, //Set Master Current Control
- 0x0f,
- 0x81, //Set Contrast Control for Color “A”
- 0x80,
- 0x82, //Set Contrast Control for Color “B”
- 0x80,
- 0x83, //Set Contrast Control for Color “C”
- 0x80,
- 0xaf, //dispaly ON
- };
- void OLED_init()
- {
- RST = 0;
- Delay_ms(20);
- RST = 1;
- Delay_ms(80);
- DC = 0;
- for (i = 0; i < sizeof oled_init_table; i++)
- {
- oled_write_cmd(oled_init_table[i]);
- }
- }
- void OLED_display()
- {
- uint16_t i;
- oled_write_cmd(0x75); // Set Row Address
- oled_write_cmd(0x00); // Start = 0
- oled_write_cmd(0x3f); // End = 63
- oled_write_cmd(0x15); // Set Column Address
- oled_write_cmd(0x00); // Start = 0
- oled_write_cmd(0x5F); // End = 96
- for (i = 0; i < 96 * 64 * 2; i++)
- {
- oled_write_data(image[i]);
- }
- }
- void main()
- {
- GPIO_init();
- SPI_init();
- OLED_init();
- OLED_display();
- while(1);
- }
复制代码
|
|