这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ESP8266中的I2C外设处理LCD显示屏时发现的问题

共1条 1/1 1 跳转至

ESP8266中的I2C外设处理LCD显示屏时发现的问题

专家
2026-04-02 15:39:20     打赏

今天调试国内一家液晶屏厂家生产的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、软件模拟的方式:

图片1.png

2、使用I2C外设的方式

图片2.png

从信号上看,在使用I2C外设场合,LCD就没有响应,ESP8266测没有收到ACK信号。在发出子机地址信息后,由于没有收到响应信号,后面的指令、数据就没有继续发出去,所以就不可能显示了。

而模拟方式下,不管是否收到相应,依旧发送指令、数据,所以能正常显示。

在操作上,Wire外设能否选择忽略ACK信号呢?还是说,这个LCD没有及时响应,是LCD的问题呢?官方提供的LCD资料很少。







共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]