LCD12864 (控制器ST7920) 从8-bits改成 4-bits界面, , 初始化不稳定, 求解!

现象和发生背景

IO不足, 又不允许用SPI, 需要将 LCD12864 (控制器ST7920) 从 8-bits界面, 改成 4-bits。
基于 8bits 稳定使用的情况下,硬件断开 D[3:0]。
修改 Function, 从 0x30 -> 0x20
但初始化不稳定, 花屏机率高!

代码
  hwSt7920_Reset = 0; 
  vDelayXms(1);
  hwSt7920_Reset = 1; 
  vDelayXms(200);  // Delay for Power On Reset
  vst7920write( CMD, 0x30);
  vDelayXms(5);
  vst7920write( CMD, 0x20);
  vDelayXms(5);
  vst7920write( CMD, 0x0C);
  vDelayXms(5);
  vst7920write( CMD, 0x01);
  vDelayXms(2);
运行结果

但初始化不稳定, 错误有这几种

  1. 花屏机率高! >> RESET重启无效, 需重新上电
  2. 出现色斑 >> RESET重启, 概率上可以成功
  3. 位置错误, >> 重新写入OK
我的解答思路和尝试过的方法

尝试:

  1. 加Power On Delay : 1000ms 无明显改善
  2. 软件顺序改变
    方式一
    vst7920write( CMD, 0x30); vDelayXms(5);
    vst7920write( CMD, 0x30); vDelayXms(5);
    vst7920write( CMD, 0x20); vDelayXms(5);
    vst7920write( CMD, 0x0C); vDelayXms(5);
    vst7920write( CMD, 0x01); vDelayXms(5);
    
    方式二
    vst7920write( CMD, 0x33); vDelayXms(5);
    vst7920write( CMD, 0x32); vDelayXms(5);
    vst7920write( CMD, 0x20); vDelayXms(5);
    vst7920write( CMD, 0x0C); vDelayXms(5);
    vst7920write( CMD, 0x01); vDelayXms(5);
    
    方式三
    vst7920write( CMD, 0x30); vDelayXms(5);
    vst7920write( CMD, 0x22); vDelayXms(5);
    vst7920write( CMD, 0x20); vDelayXms(5);
    vst7920write( CMD, 0x0C); vDelayXms(5);
    vst7920write( CMD, 0x01); vDelayXms(5);
    
    无明显改善

是不是我漏了什么环节没注意到呢?



2022/12/01 22:30 问题已找到方案:
依规格书建议, 用I/O控制 RST取代原 R/C Reset。

断开的那几个脚是不是要拉高或拉低?