UC8176 的数据手册中不包含 LUT 相关指令的说明,但是 UC8151 的手册里有,且格式是一样的,故把 UC8151 的手册也放了上来。 OTP 目录为从屏幕中读取出的 OTP 数据: - `bw.txt`: 黑白屏 - `3c.txt`: 黑白红三色屏 可从 OTP 数据中提取屏幕内置的 LUT 波形作为参考,以方便自定义 LUT 波形。 以下是从 OTP 中提取出的 LUT 波形例子(均已测试和本项目支持的 2 个屏幕不加载外部 LUT 时在 20 度左右室温下显示效果一致): **黑白屏:** ```c // OTP location: 0x300 static const unsigned char LUTC[] = { 0x60, 0x19, 0x19, 0x00, 0x00, 0x01, 0x00, 0x19, 0x19, 0x00, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x25, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char LUTWW[] = { 0x50, 0x19, 0x19, 0x00, 0x00, 0x01, 0x90, 0x19, 0x19, 0x00, 0x00, 0x02, 0x40, 0x19, 0x00, 0x00, 0x00, 0x01, 0xA0, 0x25, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char LUTBW[] = { 0x50, 0x19, 0x19, 0x00, 0x00, 0x01, 0x90, 0x19, 0x19, 0x00, 0x00, 0x02, 0x40, 0x19, 0x00, 0x00, 0x00, 0x01, 0xA0, 0x25, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char LUTWB[] = { 0xA0, 0x19, 0x19, 0x00, 0x00, 0x01, 0x90, 0x19, 0x19, 0x00, 0x00, 0x02, 0x80, 0x19, 0x00, 0x00, 0x00, 0x01, 0x50, 0x25, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char LUTBB[] = { 0xA0, 0x19, 0x19, 0x00, 0x00, 0x01, 0x90, 0x19, 0x19, 0x00, 0x00, 0x02, 0x80, 0x19, 0x00, 0x00, 0x00, 0x01, 0x50, 0x25, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, }; ``` **三色屏:** ```c // OTP location: 0x400 static const unsigned char LUTC[] = { 0x00, 0x3F, 0x01, 0x3F, 0x05, 0x01, 0x48, 0x78, 0x01, 0x78, 0x01, 0x01, 0x48, 0x10, 0x01, 0x10, 0x01, 0x0B, 0x48, 0x78, 0x01, 0x78, 0x01, 0x01, 0x40, 0x03, 0x01, 0x21, 0x0A, 0x04, 0x00, 0x04, 0x01, 0x17, 0x0A, 0x09, 0x00, 0x07, 0x90, 0x07, 0x05, 0x01, 0x00, 0x00, }; static const unsigned char LUTWW[] = { 0x44, 0x3F, 0x3F, 0x3F, 0x05, 0x01, 0x84, 0x78, 0x01, 0x78, 0x01, 0x01, 0x88, 0x10, 0x01, 0x10, 0x01, 0x0B, 0x40, 0x78, 0x01, 0x78, 0x01, 0x01, 0x00, 0x03, 0x01, 0x21, 0x0A, 0x04, 0x00, 0x04, 0x01, 0x17, 0x0A, 0x09, 0x88, 0x07, 0x01, 0x07, 0x05, 0x01, }; static const unsigned char LUTR[] = { 0x48, 0x3F, 0x3F, 0x3F, 0x05, 0x01, 0x84, 0x78, 0x01, 0x78, 0x01, 0x01, 0x84, 0x10, 0x01, 0x10, 0x01, 0x0B, 0x8C, 0x78, 0x01, 0x78, 0x01, 0x01, 0x8C, 0x03, 0x01, 0x21, 0x0A, 0x04, 0xCC, 0x04, 0x01, 0x17, 0x0A, 0x09, 0x90, 0x07, 0x01, 0x07, 0x05, 0x01, }; static const unsigned char LUTW[] = { 0x44, 0x3F, 0x3F, 0x3F, 0x05, 0x01, 0x84, 0x78, 0x01, 0x78, 0x01, 0x01, 0x88, 0x10, 0x01, 0x10, 0x01, 0x0B, 0x40, 0x78, 0x01, 0x78, 0x01, 0x01, 0x00, 0x03, 0x01, 0x21, 0x0A, 0x04, 0x00, 0x04, 0x01, 0x17, 0x0A, 0x09, 0x90, 0x07, 0x01, 0x07, 0x05, 0x01, }; static const unsigned char LUTB[] = { 0x48, 0x3F, 0x3F, 0x3F, 0x05, 0x01, 0x84, 0x78, 0x01, 0x78, 0x01, 0x01, 0x84, 0x10, 0x01, 0x10, 0x01, 0x0B, 0x40, 0x78, 0x01, 0x78, 0x01, 0x01, 0x00, 0x03, 0x01, 0x21, 0x0A, 0x04, 0x00, 0x04, 0x01, 0x17, 0x0A, 0x09, 0xFF, 0x07, 0x01, 0x07, 0x05, 0x01, }; ``` 使用以下 LUT 且把驱动设置为 BW 模式可把三色屏当作黑白屏使用,刷新时间能从 15s 降到 2-3s 左右: > - 有待继续优化,显示效果比默认三色的 LUT 淡一些 > - 刷新时间应该还有优化的空间,理论上来说应该还可以做一个支持局刷的 LUT ```c // OTP location: 0x200, from bw.txt static const unsigned char LUTC[] = { 0x00, 0x28, 0x28, 0x00, 0x00, 0x01, 0x60, 0x32, 0x32, 0x00, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x32, 0x32, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, }; static const unsigned char LUTWW[] = { 0x50, 0x28, 0x32, 0x00, 0x00, 0x01, 0x90, 0x32, 0x00, 0x00, 0x00, 0x02, 0x40, 0x14, 0x32, 0x00, 0x00, 0x01, 0xA0, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, }; static const unsigned char LUTBW[] = { 0x50, 0x28, 0x32, 0x00, 0x00, 0x01, 0x90, 0x32, 0x00, 0x00, 0x00, 0x02, 0x40, 0x14, 0x32, 0x00, 0x00, 0x01, 0xA0, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, }; static const unsigned char LUTWB[] = { 0xA0, 0x28, 0x32, 0x00, 0x00, 0x01, 0x90, 0x32, 0x00, 0x00, 0x00, 0x02, 0x80, 0x14, 0x32, 0x00, 0x00, 0x01, 0x50, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, }; static const unsigned char LUTBB[] = { 0xA0, 0x28, 0x32, 0x00, 0x00, 0x01, 0x90, 0x32, 0x00, 0x00, 0x00, 0x02, 0x80, 0x14, 0x32, 0x00, 0x00, 0x01, 0x50, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, }; ```