LX COG 12864R1 LCD Sample Code

Posted igame2000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LX COG 12864R1 LCD Sample Code相关的知识,希望对你有一定的参考价值。

Introduction

Sample code for driving LX COG 12864R1 LCD.

NOTE

For arudino only.But it\'s very easy to apply on STM.
To run the code, you\'d better to have a Arduino Mega 2560 which can print the log.

Code

// The .ino file.
// Define PINs
#define CS  2
#define RST 3
#define DC  4
#define SCL 21
#define SDA 20

#define setPin(pin, x) digitalWrite(pin, (x) ? HIGH : LOW)
#define cs(x) setPin(CS, (x))
#define reset(x) setPin(RST, (x))
#define dc(x) setPin(DC, (x))
#define scl(x) setPin(SCL, (x))
#define sda(x) setPin(SDA, (x))

void log(const char* str) {
  Serial.println(str);
}

void spi_delay(uint16_t x) {
  while(x > 0) {
    x--;
  }
}

void spi_send(uint8_t val) {
  for(int i = 0; i < 8; i++) {
    if (val & 0x80) {
      sda(1);
    } else {
      sda(0);
    }
    spi_delay(1);
    
    scl(1);
    scl(0);
    val <<= 1;
  }
}

void lcd_cmd(uint8_t val) {
  cs(0);
  dc(0);
  spi_send(val);
  cs(1);
  dc(1);
}

void lcd_data(uint8_t val) {
  cs(0);
  dc(1);
  spi_send(val);
  cs(1);
  dc(1);
}

void lcd_init() {
  log("Reset 1"); reset(1); delay(1000);
  log("Reset 2"); reset(0); delay(1000);
  log("Reset 3"); reset(1); delay(1000);

  log("Reset internal");
  lcd_cmd(0xe2); // Internal reset
  lcd_cmd(0xe3);  // reset signal
  // delay(3000);

  log("Display off"); lcd_cmd(0xae); // display off
  // delay(3000);

  log("ADC select");
  lcd_cmd(0xa0);  // ADC select
  lcd_cmd(0xc8);  // command output select
  lcd_cmd(0x2f);  // power control
  // delay(3000);

  // SET dir
  // log("Set direction");
  // log("Reversed"); lcd_cmd(0xa1); //0b10100001); // Reverse
  // log("Normal"); lcd_cmd(0xa0); // 0b10100000); // Normal
  // delay(3000);


  log("Inverse display");
  // Inverse display
  // log("Reversed"); lcd_cmd(0xa7); // 0b10100111); // Reverse
  // log("No"); lcd_cmd(0xa6); // 0b10100110); // Normal
  // delay(3000);

  log("All pixels on");
  // // All pixels on
  // lcd_cmd(0xa5); // 0b10100101); // All on
  // lcd_cmd(0xa4); // 0b10100100); // Normal
  // delay(3000);

  log("Set bias");
  // bias
  log("1/9 bias"); lcd_cmd(0xa2);  //(0xa2 1/9 bias,1/65 duty )
  // log("1/7 bias"); lcd_cmd(0xa3);  // 1/7
  // delay(3000);

  // log("Page blink");
  // // Page Blink Page
  // lcd_cmd(0xd5);
  // lcd_cmd(0x0); // Blink all page: 0xF 
  // delay(3000);
  
  // Ratio is a key parameter which haverily affects the invisibility.
  log("Select resistor ratio");
  // select resistor ratio Rb/Ra: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27
  lcd_cmd(0x22);
  // delay(3000);

  log("Select volume");
  lcd_cmd(0x81);  // select volume
  // delay(3000);
  
  log("vop");
  lcd_cmd(0x29); // 0x15); //0x29);   // vop
  // delay(3000);
  
  lcd_cmd(0xf8);  // x4
  lcd_cmd(0x08);  // x4
  // delay(3000);

  log("Initial page");
  lcd_cmd(0xb0);//set page address
  lcd_cmd(0x10);//set column address
  lcd_cmd(0x00);

  for(int col=0; col < 128; col++) {
    lcd_data(0x00);
    // lcd_data(0b11110000);
  }
  // delay(3000);

  log("Display on"); lcd_cmd(0xaf);  //display on
  // delay(3000);
}

uint8_t img[] = {
  0xFF,0x01,0x01,0x01,0x01,0x01,0x09,0x09,0xFD,0xFD,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x10,0x1F,0x1F,0x10,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xFC,
0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xFC,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,
0x1F,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,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,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,
0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0xA0,0xBF,
0xBF,0xA0,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0xA0,0xA0,0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0xA0,
0xBF,0xBF,0xA0,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF
};

void lcd_display() {
  uint8_t* ptr = img;

  for(int row = 0xb0; row < 0xb8; row++) {
    lcd_cmd(row);
    lcd_cmd(0x10);
    lcd_cmd(0x00);
    for(int col = 0; col < 128; col++) {
      lcd_data(*ptr++);
    }
  }

  delay(2000);
}

void lcd_clean(uint8_t color = 0x00) {
  for(int row = 0xb0; row < 0xb8; row++) {
    lcd_cmd(row);
    lcd_cmd(0x10);
    lcd_cmd(0x00);

    for(int col = 0; col < 128; col++) {
      // lcd_data(0x81);
      // lcd_data(0x81);
      lcd_data(color);
    }
  }

  // delay(1000);
}

void setup() {
  // put your setup code here, to run once:
  pinMode(CS, OUTPUT);
  pinMode(RST, OUTPUT);
  pinMode(DC, OUTPUT);
  pinMode(SCL, OUTPUT);
  pinMode(SDA, OUTPUT);

  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(9600);
}

void loop() {

  // put your main code here, to run repeatedly:
  lcd_init();

  uint8_t color = 0x00;

  while(1) {
    // delay(1500);
    digitalWrite(LED_BUILTIN, HIGH);
    log("Clean"); lcd_clean(color++);
    // if (color == 0xFE) color = 0x00;
    log("Display"); lcd_display();
    // reset(0);
    delay(100);
    // lcd_display();
    digitalWrite(LED_BUILTIN, LOW);
    // reset(1);
    delay(100);
  }
}

Good Luck!

以上是关于LX COG 12864R1 LCD Sample Code的主要内容,如果未能解决你的问题,请参考以下文章

S3C2440 LCD驱动(FrameBuffer)实例开发<一>(转)

LCD单色的液晶屏怎么用!

工业级高抗干扰/抗噪LCD液晶段码屏显示驱动IC-VK2C23A/B LQFP64/48 FAE支持

加载 cog 时执行函数

geotrellis使用(三十九)COG 写入更新

geotrellis使用(三十七)COG 基础介绍