今天调试国内一家液晶屏厂家生产的I2C液晶屏时,出了一些状况,记录下来,作为经验。
这块液晶屏是之前被验证过的,因此觉得没问题,准备使用ESP8266,快速移植过去。代码改造完成后,结果没有正常显示出字符。对比程序,感觉代码逻辑没有问题啊。
接线来用Arduino中的程序又移植到其他51单片机上,也没有问题。
然后在Arduino中以软件模拟的方式,重新测试,显示就正常了。真是很奇怪的事情。
Arduino下的源代码:
#include <Wire.h> // 包含I2C库
#define USEI2C
//Rom_IN /*字库 IC 接口定义:Rom_IN 就是字库 IC 的 SI*/
//Rom_OUT /*字库 IC 接口定义:Rom_OUT 就是字库 IC 的 SO*/
//Rom_CS /*字库 IC 接口定义 Rom_CS 就是字库 IC 的 CS#*/
//Rom_SCK /*字库 IC 接口定义:Rom_SCK 就是字库 IC 的 SCK*/
#define DEVICE_ADDR 0x3C // 目标设备的I2C地址(7位)
#define LCD_RST 13 // GPI13 D7
#define LCD_SCL 5 // GPIO5 D1
#define LCD_SDA 4 // GPIO5 D2
// 字库引脚
#define Rom_IN 0 // GPIO0 D3
#define Rom_OUT 2 // GPIO2 D4
#define Rom_SCK 14 // GPIO14 D5
#define Rom_CS 12 // GPIO12 D6
char bmp1[]= //雄鹰
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,
0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x0F,0x3F,0x78,0x80,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x01,0x07,0x0F,0x1F,0x1F,0x7F,0xFF,0xFE,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x07,0x07,0x0F,0x2F,0x1F,0x3F,0x7F,0xFF,0xFF,
0xFF,0xFE,0xFC,0xF0,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x0F,0x0F,0x01,0x01,0x03,0x03,0x1C,0x0C,0x07,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x09,0x0F,
0x0B,0x2A,0x3F,0x1A,0x1F,0x17,0x15,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x07,0x0F,0x39,0x1F,0x07,0x05,0x01,
0x01,0x01,0x01,0x02,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x03,0x1D,0x0C,0x01,0x03,0x01,0x02,0x03,
0x02,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,
0x0F,0x0E,0x1E,0x1E,0x38,0x78,0x70,0xE1,0xE1,0xC1,0x87,0x07,0x0F,0x0F,0x1F,0x1F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xF8,0xF0,0xF0,0xC1,0x83,
0x07,0x1E,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0x96,0x9C,
0xE7,0xFE,0xBA,0x0E,0x46,0xAF,0xFF,0x84,0xF5,0xFF,0xAD,0x95,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x5E,0xF0,0x80,0xED,
0xBD,0xBF,0xE9,0x37,0xDF,0xCD,0xE1,0x43,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x13,0x33,0x9D,0xFD,0x77,0xFB,0x29,0x2E,0x26,
0xB5,0xFF,0x42,0x6C,0x0C,0xFF,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x06,0xD6,0xB6,0xFF,0xAC,0x8A,0x66,0x2C,0x59,0xFF,0x4C,0x6C,
0x18,0x5E,0xFF,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x1C,0x19,0x39,0x73,0x73,0xE3,0xC7,0xCF,0xCF,0x8F,
0x1F,0x3F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFC,0xFC,0xF0,0xF8,0xE0,0xE0,0xE0,0x80,0x81,0x03,0x03,0x0F,0x0F,0x1F,0x7E,0x7C,0xF0,0xD0,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x78,0xA0,0x80,0x80,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xC0,0xC0,0x00,0x60,0x40,0xA0,
0xC0,0x40,0x40,0x40,0x40,0x70,0x30,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0xF0,0xA0,0x00,0x00,0x00,0x80,
0xC0,0xE0,0x00,0x00,0xC0,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x00,0x00,
0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x07,0x0E,0x0F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0xBF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0xFE,
0xF8,0xF9,0xF1,0xF1,0xE3,0xE3,0xC7,0xC7,0xCB,0x8E,0x0C,0x08,0x18,0x03,0x03,0x03,0x0F,0x1F,0x17,0x3F,0x7E,0xFE,0xFC,0xF4,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x07,0x07,0x0F,0x1F,0x1F,0x1F,
0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xE1,0xC3,0xC3,0x86,0x8F,0x1E,0x1C,0x3E,0x3C,0x78,0x79,
0xF1,0x73,0xE3,0xE7,0xE7,0x8F,0x9F,0x1F,0x3F,0x3F,0x7E,0xFF,0xFC,0xF8,0xF9,0xF1,0xE3,0xE7,0x8F,0x9E,0x3E,0x30,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF0,
0xF0,0xE1,0xE1,0xC1,0x83,0xC2,0x80,0x80,0x01,0x03,0x07,0x0F,0x1E,0x1C,0x30,0x63,0x03,0x0F,0x07,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFC,0xFC,
0xF9,0xF9,0xF1,0xE3,0xE7,0xE7,0xCF,0x8F,0x9F,0x1F,0x3E,0x7E,0x79,0xF8,0xF0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x78,0x3C,0x1F,0x0F,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF0,0xC0,0x80,0x00,0x01,0x07,0x0F,0x3F,0x3F,
0x7E,0xF0,0xF1,0xE3,0x0F,0x1F,0x7F,0xFF,0xFF,0xF0,0xE0,0x01,0x07,0x07,0xE7,0xE7,0xE7,0xE7,0xCF,0xCF,0xCF,0xCF,0x9F,0x9F,0xFF,0xFE,0xFE,0xFE,0xFE,0x6C,0xF9,0xF9,
0xF9,0xF3,0xE3,0xE7,0xEB,0xCF,0xCE,0x9C,0x1C,0x70,0x20,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0x7F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x07,0x03,0x03,0x03,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFA,0xF0,0xC0,0x00,0x01,0x01,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,
0x00,0x61,0xDF,0xFF,0xFF,0xFF,0xFE,0xE0,0x00,0x01,0x0F,0xCF,0xCF,0xCF,0xCF,0xDF,0xDF,0x9F,0x9F,0x9F,0xBF,0xFF,0x7C,0xFC,0xFC,0x7C,0x79,0x79,0xF9,0xF3,0xF3,0xE7,
0xE6,0xCC,0xCC,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC1,0xE0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,
0xFF,0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x0F,0x07,0x05,0x07,0x07,0x07,0x03,0x07,0x03,0x03,0x07,0x03,0x03,0x03,
0x07,0x0F,0x1F,0x1F,0x3F,0x7F,0x77,0x77,0x03,0x07,0x07,0x07,0x07,0x07,0x0F,0x07,0x0F,0x0E,0x1C,0x0C,0x09,0x01,0x07,0x1F,0x1F,0x3F,0x3F,0x1F,0x0F,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF0,0xC0,0x80,0x00,0x00,0x0E,0x78,0x71,0xCB,0xFF,0xFF,0xFF,0xFF,0xF4,0x40,0x00,0x00,
0x9E,0xFE,0xFC,0xFD,0xF8,0xC0,0x00,0x07,0x3F,0x1F,0x9F,0xBF,0x1E,0xBF,0x3E,0x3E,0x3C,0x7E,0xFC,0xFC,0xF8,0xFD,0x78,0xF1,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x60,0x38,0x3C,0x1C,0x0F,0x0F,0x07,0x07,0x07,
0x83,0xC3,0x83,0xC1,0xC1,0xE1,0xE0,0xE1,0xF0,0xF0,0xF1,0xF0,0xF1,0xF8,0xF1,0xF9,0xF9,0xF9,0xFB,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xF9,
0xF9,0xF8,0xF9,0xF9,0xF9,0xF8,0xF8,0xF0,0xF0,0xF2,0xE2,0xE7,0xE6,0xEF,0x8F,0x9F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFC,0xF8,0xF1,0xF3,0xE3,0xE7,0xC3,0x8B,0x99,0x3C,0x3E,
0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x07,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x01,0x01,0x43,0xE3,0xC7,0xC7,0x8F,0x0F,0x1F,0x0F,0x3F,0x1F,
0x7F,0x77,0xE7,0xCF,0x8E,0x0E,0x1E,0x9E,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7E,0x7E,0xFC,0x78,0xF0,0xE0,0xE0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
};
void setup() {
Serial.begin(115200); // 初始化串口通信
while (!Serial); // 等待串口连接(仅对某些开发板需要)
Serial.println("\nI2C LCD");
//Wire.begin(); // 初始化I2C总线,SDA和SCL使用默认引脚
// 对于ESP8266,默认I2C引脚是:
// SDA - GPIO4 (D2)
// SCL - GPIO5 (D1)
// 如果需要使用其他引脚,可以这样指定:
// Wire.begin(SDA_PIN, SCL_PIN);
#ifdef USEI2C
Wire.begin(LCD_SDA, LCD_SCL); // 初始化I2C总线,SDA和SCL使用默认引脚
#else
pinMode(LCD_SCL, OUTPUT);
pinMode(LCD_SDA, OUTPUT);
#endif
pinMode(LCD_RST, OUTPUT);
pinMode(Rom_IN, OUTPUT);
pinMode(Rom_OUT, INPUT);
pinMode(Rom_CS, OUTPUT);
pinMode(Rom_SCK, OUTPUT);
initial_lcd(); //对液晶模块进行初始化设置
}
void loop() {
clear_screen();
display_GB2312_24x24_string(1, 10, (uint8_t *)"ABCDEFGHIJKLMNOPQRSTU");
delay(4000);
clear_screen(); //清屏
disp_256x96(1,1,bmp1); //显示一幅 256*96 点阵的黑白图。
delay(5000); // 每5秒扫描一次
}
#ifdef USEI2C
//写命令到液晶显示模块
void transfer_command_lcd(uint8_t cmd) {
Wire.beginTransmission(DEVICE_ADDR);
Wire.write(0x80);
Wire.write(cmd);
Wire.endTransmission();
}
//写数据到液晶显示模块
void transfer_data_lcd(uint8_t dat) {
Wire.beginTransmission(DEVICE_ADDR);
Wire.write(0xC0);
Wire.write(dat);
Wire.endTransmission();
}
#else
/*START FLAG*/
void start_flag() {
digitalWrite(LCD_SCL, 1);
digitalWrite(LCD_SDA, 1);
digitalWrite(LCD_SDA, 0);
}
/*STOP FLAG*/
void stop_flag() {
digitalWrite(LCD_SCL, 1);
digitalWrite(LCD_SDA, 0);
digitalWrite(LCD_SDA, 1);
}
void transfer(int data1) {
int i;
for(i=0;i<8;i++) {
digitalWrite(LCD_SCL, 0);
if(data1&0x80)
digitalWrite(LCD_SDA, 1);
else
digitalWrite(LCD_SDA, 0);
digitalWrite(LCD_SCL, 1);
digitalWrite(LCD_SCL, 0);
data1=data1<<1;
}
digitalWrite(LCD_SDA, 0);
digitalWrite(LCD_SCL, 1);
digitalWrite(LCD_SCL, 0);
}
//写命令到液晶显示模块
void transfer_command_lcd(uint8_t cmd) {
start_flag();
transfer(0x78);
transfer(0x80);
transfer(cmd);
stop_flag();
}
//写数据到液晶显示模块
void transfer_data_lcd(uint8_t dat) {
start_flag();
transfer(0x78);
transfer(0xC0);
transfer(dat);
stop_flag();
}
#endif
void initial_lcd() {
digitalWrite(LCD_RST, 0);
delay(100);
digitalWrite(LCD_RST, 1);
delay (100);
transfer_command_lcd(0x30); //EXT=0
transfer_command_lcd(0x94); //Sleep out
transfer_command_lcd(0x31); //EXT=1
transfer_command_lcd(0xD7); //Autoread disable
transfer_data_lcd(0X9F); //
transfer_command_lcd(0x32); //Analog SET
transfer_data_lcd(0x00); //OSC Frequency adjustment
transfer_data_lcd(0x01); //Frequency on booster capacitors->6KHz
transfer_data_lcd(0x03); //Bias=1/11
transfer_command_lcd(0x20); // Gray Level
transfer_command_lcd(0x31); //Analog SET
transfer_command_lcd(0xf2); //温度补偿
transfer_data_lcd(0x1e); //OSC Frequency adjustment
transfer_data_lcd(0x28); //Frequency on booster capacitors->6KHz
transfer_data_lcd(0x32); //
transfer_data_lcd(0x01);
transfer_data_lcd(0x03);
transfer_data_lcd(0x05);
transfer_data_lcd(0x07);
transfer_data_lcd(0x09);
transfer_data_lcd(0x0b);
transfer_data_lcd(0x0d);
transfer_data_lcd(0x10);
transfer_data_lcd(0x11);
transfer_data_lcd(0x13);
transfer_data_lcd(0x15);
transfer_data_lcd(0x17);
transfer_data_lcd(0x19);
transfer_data_lcd(0x1b);
transfer_data_lcd(0x1d);
transfer_data_lcd(0x1f);
transfer_command_lcd(0x30); //EXT=0
transfer_command_lcd(0x75); //Page Address setting
transfer_data_lcd(0X00); // XS=0
transfer_data_lcd(0X14); // XE=159 0x28
transfer_command_lcd(0x15); //Clumn Address setting
transfer_data_lcd(0X00); // XS=0
transfer_data_lcd(0Xff); // XE=256
transfer_command_lcd(0xBC); //Data scan direction
transfer_data_lcd(0x00); //MX.MY=Normal
transfer_data_lcd(0xA6);
transfer_command_lcd(0xCA); //Display Control
transfer_data_lcd(0X00); //
transfer_data_lcd(0X9F); //Duty=160
transfer_data_lcd(0X20); //Nline=off
transfer_command_lcd(0xF0); //Display Mode
transfer_data_lcd(0X10); //10=Monochrome Mode,11=4Gray
transfer_command_lcd(0x81); //EV control
transfer_data_lcd(0x0a); //VPR[5-0] //可设置范围 0x00~0x3f,每格电压是 0.04V
transfer_data_lcd(0x04); //VPR[8-6] //可设置范围 0x00~0x07
transfer_command_lcd(0x20); //Power control
transfer_data_lcd(0x0B); //D0=regulator ; D1=follower ; D3=booste, on:1 off:0
delay(1);
transfer_command_lcd(0xAF); //Display on
}
/*写 LCD 行列地址:X 为起始的列地址,Y 为起始的行地址,x_total,y_total 分别为列地址及行地址的起点到终点的差值 */
void lcd_address(int x, int y, int x_total, int y_total) {
x=x-1;
y=y+7;
transfer_command_lcd(0x15); //Set Column Address
transfer_data_lcd(x);
transfer_data_lcd(x+x_total-1);
transfer_command_lcd(0x75); //Set Page Address
transfer_data_lcd(y);
transfer_data_lcd(y+y_total-1);
transfer_command_lcd(0x30);
transfer_command_lcd(0x5c);
}
/*清屏*/
void clear_screen() {
int i,j;
lcd_address(1,1,256,17);
for(i=0;i<17;i++) {
for(j=0;j<256;j++) {
transfer_data_lcd(0x00);
}
}
}
/****送指令到晶联讯字库 IC***/
void send_command_to_ROM( uint8_t datu ) {
uint8_t i;
for(i=0;i<8;i++ ) {
digitalWrite(Rom_SCK, 0);
if(datu&0x80)
digitalWrite(Rom_IN, 1);
else
digitalWrite(Rom_IN, 0);
datu = datu<<1;
digitalWrite(Rom_SCK, 1);
//delay_us(1);
}
}
/****从晶联讯字库 IC 中取汉字或字符数据(1 个字节)***/
static uint8_t get_data_from_ROM(void) {
uint8_t i;
uint8_t ret_data=0;
digitalWrite(Rom_SCK, 1);
for(i=0;i<8;i++) {
//digitalWrite(Rom_OUT, 1);
digitalWrite(Rom_SCK, 0);
ret_data>>=1;
if( digitalRead(Rom_OUT))
ret_data+=0x80;
else
ret_data=ret_data+0;
digitalWrite(Rom_SCK, 1);
//delay_us(1);
}
return(ret_data);
}
//从指定地址读出数据写到液晶屏指定(page,column)座标中
void get_and_write_8x16(ulong fontaddr, uint8_t column, uint8_t page) {
uint8_t i,j,disp_data;
digitalWrite(Rom_CS, LOW); //Rom_CS = 0;
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16); //地址的高 8 位,共 24 位
send_command_to_ROM((fontaddr&0xff00)>>8); //地址的中 8 位,共 24 位
send_command_to_ROM(fontaddr&0xff); //地址的低 8 位,共 24 位
lcd_address(column,page,8,2);
for(j=0;j<2;j++) {
for(i=0; i<8; i++ ) {
disp_data=get_data_from_ROM();
transfer_data_lcd(disp_data); //写数据到 LCD,每写完 1 字节的数据后列地址自动加 1
}
}
digitalWrite(Rom_CS, HIGH);
}
void get_and_write_12x24(ulong fontaddr, uint8_t column, uint8_t page) {
uint8_t i,j,disp_data;
digitalWrite(Rom_CS, LOW);
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16); //地址的高 8 位,共 24 位
send_command_to_ROM((fontaddr&0xff00)>>8); //地址的中 8 位,共 24 位
send_command_to_ROM(fontaddr&0xff); //地址的低 8 位,共 24 位
lcd_address(column,page,16,3);
for(j=0;j<3;j++) {
for(i=0; i<16; i++ ) {
disp_data=get_data_from_ROM();
transfer_data_lcd(disp_data); //写数据到 LCD,每写完 1 字节的数据后列地址自动加 1
}
}
digitalWrite(Rom_CS, HIGH);
}
void get_and_write_16x32(ulong fontaddr, uint8_t column, uint8_t page) {
uint8_t i,j,disp_data;
digitalWrite(Rom_CS, LOW);
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16); //地址的高 8 位,共 24 位
send_command_to_ROM((fontaddr&0xff00)>>8); //地址的中 8 位,共 24 位
send_command_to_ROM(fontaddr&0xff); //地址的低 8 位,共 24 位
lcd_address(column,page,16,4);
for(j=0;j<4;j++) {
for(i=0; i<16; i++ ) {
disp_data=get_data_from_ROM();
transfer_data_lcd(disp_data); //写数据到 LCD,每写完 1 字节的数据后列地址自动加 1
}
}
digitalWrite(Rom_CS, HIGH);
}
//从指定地址读出数据写到液晶屏指定(page,column)座标中
void get_and_write_16x16(ulong fontaddr, uint8_t column, uint8_t page) {
uint8_t i,j,disp_data;
digitalWrite(Rom_CS, LOW);
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16); //地址的高 8 位,共 24 位
send_command_to_ROM((fontaddr&0xff00)>>8); //地址的中 8 位,共 24 位
send_command_to_ROM(fontaddr&0xff); //地址的低 8 位,共 24 位
lcd_address(column,page,16,2);
for(j=0;j<2;j++) {
for(i=0; i<16; i++ ) {
disp_data=get_data_from_ROM();
transfer_data_lcd(disp_data); //写数据到 LCD,每写完 1 字节的数据后列地址自动加 1
}
} digitalWrite(Rom_CS, HIGH);
}
//从指定地址读出数据写到液晶屏指定(page,column)座标中
void get_and_write_24x24(ulong fontaddr, uint8_t column, uint8_t page) {
uint8_t i,j,disp_data;
digitalWrite(Rom_CS, LOW);
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16); //地址的高 8 位,共 24 位
send_command_to_ROM((fontaddr&0xff00)>>8); //地址的中 8 位,共 24 位
send_command_to_ROM(fontaddr&0xff); //地址的低 8 位,共 24 位
lcd_address(column,page,24,3);
for(j=0;j<3;j++) {
for(i=0; i<24; i++ ) {
disp_data=get_data_from_ROM();
transfer_data_lcd(disp_data); //写数据到 LCD,每写完 1 字节的数据后列地址自动加 1
}
}
digitalWrite(Rom_CS, HIGH);
}
//从指定地址读出数据写到液晶屏指定(page,column)座标中
void get_and_write_32x32(ulong fontaddr,uint8_t column, uint8_t page) {
uint8_t i,j,disp_data;
digitalWrite(Rom_CS, LOW);
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16); //地址的高 8 位,共 24 位
send_command_to_ROM((fontaddr&0xff00)>>8); //地址的中 8 位,共 24 位
send_command_to_ROM(fontaddr&0xff); //地址的低 8 位,共 24 位
lcd_address(column,page,32,4);
for(j=0;j<4;j++) {
for(i=0; i<32; i++ ) {
disp_data=get_data_from_ROM();
transfer_data_lcd(disp_data); //写数据到 LCD,每写完 1 字节的数据后列地址自动加 1
}
}
digitalWrite(Rom_CS, HIGH);
}
//****************************************************************
ulong fontaddr=0;
void display_GB2312_16x16_string(uint8_t column, uint8_t page, uint8_t *text) {
uint8_t i= 0;uint temp1,temp2;
temp1=column;
temp2=page;
while((text[i]>0x00)) {
if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1)) {
//国标简体(GB2312)汉字在晶联讯字库 IC 中的地址由以下公式来计算:
//Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0
//由于担心 8 位单片机有乘法溢出问题,所以分三部取地址
fontaddr = (text[i]- 0xb0)*94;
fontaddr += (text[i+1]-0xa1)+846;
fontaddr = (ulong)(fontaddr*32);
fontaddr = (ulong)(fontaddr+0x2c9d0);
get_and_write_16x16(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=2;
column+=16;
if ((temp2<=15&&temp1<=256)&&column>248) {
//自动换行,当遇到奇数个字母或符号就提前 8 个点
//设成符>256 时当有奇数个字符时就会显半个汉字,因为一个字符只占 8 个点(一个字节)
column=1;
page+=2;
if (page>15)column=1;
}
} else if(((text[i]>=0xa1) &&(text[i]<=0xa3))&&(text[i+1]>=0xa1)) {
//国标简体(GB2312)15x16 点的字符在晶联讯字库 IC 中的地址由以下公式来计算:
//Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0
//由于担心 8 位单片机有乘法溢出问题,所以分三部取地址
fontaddr = (text[i]- 0xa1)*94;
fontaddr += (text[i+1]-0xa1);
fontaddr = (ulong)(fontaddr*32);
fontaddr = (ulong)(fontaddr+0x2c9d0);
get_and_write_16x16(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=2;
column+=16;
if ((temp2<=15&&temp1<=256)&&column>248) {
//自动换行,当遇到奇数个字母或符号就提前 8 个点
//设成符>128 时当有奇数个字符时就会显半个汉字,因为一个字符只占 8 个点(一个字节)
column=1;
page+=2;
if (page>15)column=1;
}
} else if((text[i]>=0x20) &&(text[i]<=0x7e)) {
fontaddr = (text[i]- 0x20);
fontaddr = (unsigned long)(fontaddr*16);
fontaddr = (unsigned long)(fontaddr+0x1dd780);
get_and_write_8x16(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=1;
column+=8;
if ((temp1<=15&&temp2<=256)&&column>248) {
//自动换行,当遇到奇数个字母或符号就提前 8 个点
//设成符>128 时当有奇数个字符时就会显半个汉字,因为一个字符只占 8 个点(一个字节)
column=1;
page+=2;
if (page>15)column=1;
}
} else {
i++;
}
}
}
//****************************************************************
void display_GB2312_24x24_string(uint8_t column,uint8_t page,uint8_t *text) {
uint8_t i= 0;uint temp1,temp2;
temp1=column;
temp2=page;
while((text[i]>0x00)) {
if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1)) {
//国标简体(GB2312)汉字在晶联讯字库 IC 中的地址由以下公式来计算:
//Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0
//由于担心 8 位单片机有乘法溢出问题,所以分三部取地址
fontaddr = (text[i]- 0xb0)*94;
fontaddr += (text[i+1]-0xa1)+846;
fontaddr = (ulong)(fontaddr*72);
fontaddr = (ulong)(fontaddr+0X068190);
get_and_write_24x24(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=2;
column+=24;
} else if(((text[i]>=0xa1) &&(text[i]<=0xa9))&&(text[i+1]>=0xa1)) {
//国标简体(GB2312)15x16 点的字符在晶联讯字库 IC 中的地址由以下公式来计算:
//Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0
//由于担心 8 位单片机有乘法溢出问题,所以分三部取地址
fontaddr = (text[i]- 0xa1)*94;
fontaddr += (text[i+1]-0xa1);
fontaddr = (ulong)(fontaddr*72);
fontaddr = (ulong)(fontaddr+0X068190);
get_and_write_24x24(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=2;
column+=24;
} else if((text[i]>=0x20) &&(text[i]<=0x7e)) {
fontaddr = (text[i]- 0x20);
fontaddr = (unsigned long)(fontaddr*48);
fontaddr = (unsigned long)(fontaddr+0x1dff00);
get_and_write_12x24(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=1;
column+=12;
} else {
i++;
}
}
}
//****************************************************************
void display_GB2312_32x32_string(uint8_t column,uint8_t page,uint8_t *text) {
uint8_t i= 0;uint temp1,temp2;
temp1=column;
temp2=page;
while((text[i]>0x00)) {
if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1)) {
//国标简体(GB2312)汉字在晶联讯字库 IC 中的地址由以下公式来计算:
//Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0
//由于担心 8 位单片机有乘法溢出问题,所以分三部取地址
fontaddr = (text[i]- 0xb0)*94;
fontaddr += (text[i+1]-0xa1)+846;
fontaddr = (ulong)(fontaddr*128);
fontaddr = (ulong)(fontaddr+0xedf00);
get_and_write_32x32(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=2;
column+=32;
} else if(((text[i]>=0xa1) &&(text[i]<=0xa9))&&(text[i+1]>=0xa1)) {
//国标简体(GB2312)15x16 点的字符在晶联讯字库 IC 中的地址由以下公式来计算:
//Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0
//由于担心 8 位单片机有乘法溢出问题,所以分三部取地址
fontaddr = (text[i]- 0xa1)*94;
fontaddr += (text[i+1]-0xa1);
fontaddr = (ulong)(fontaddr*128);
fontaddr = (ulong)(fontaddr+0xedf00);
get_and_write_32x32(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=2;
column+=32;
} else if((text[i]>=0x20) &&(text[i]<=0x7e)) {
fontaddr = (text[i]- 0x20);
fontaddr = (unsigned long)(fontaddr*64);
fontaddr = (unsigned long)(fontaddr+0x1e5a50);
get_and_write_16x32(fontaddr,column,page); //从指定地址读出数据写到液晶屏指定(page,column)座标中
i+=1;
column+=16;
} else {
i++;
}
}
}
/*显示 256*96 点阵的图像*/
void disp_256x96(int x,int y,char *dp) {
int i,j;
lcd_address(x,y,256,12);
for(i=0;i<12;i++) {
for(j=0;j<256;j++) {
transfer_data_lcd(*dp);
dp++;
}
}
} 代码 #define USEI2C
被注释掉的话,就是软件模拟I2C的方式,显示正常;使用I2C外设的话,就什么也不显示。下面是逻辑信号的对比:
1、软件模拟的方式:

2、使用I2C外设的方式

从信号上看,在使用I2C外设场合,LCD就没有响应,ESP8266测没有收到ACK信号。在发出子机地址信息后,由于没有收到响应信号,后面的指令、数据就没有继续发出去,所以就不可能显示了。
而模拟方式下,不管是否收到相应,依旧发送指令、数据,所以能正常显示。
在操作上,Wire外设能否选择忽略ACK信号呢?还是说,这个LCD没有及时响应,是LCD的问题呢?官方提供的LCD资料很少。
我要赚赏金
