IO不足, 又不允许用SPI, 需要将 LCD12864 (控制器ST7920) 从 8-bits界面, 改成 4-bits。
基于 8bits 稳定使用的情况下,硬件断开 D[3:0]。
修改 Function, 从 0x3x -> 0x2x
初始化不稳定, 花屏机率高!
void vSt7920_Init(void)
{
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);
}
但初始化不稳定, 错误有这几种
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);
-------------- 这是分隔线 -------------
再看看規格書:
依规格书建议, 原 R/C Reset, 加上用I/O控制 Reset。