Skip to content

Instantly share code, notes, and snippets.

@knight-ryu12
Created July 4, 2022 00:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save knight-ryu12/51b4e47046e446781508c45a29cb0a04 to your computer and use it in GitHub Desktop.
Save knight-ryu12/51b4e47046e446781508c45a29cb0a04 to your computer and use it in GitHub Desktop.
#include "screen.hpp"
#ifdef __cplusplus
extern "C" {
#endif
void lcd_init(SoftWire *sw) {
delay(100);
Serial.printf(F("LCD Init.\n"));
for(uint8_t i=0; i<3; i++) {
sw->beginTransmission(0x27);
sw->write(0b00110100); // 7654 BT E RW RS
sw->write(0b00110000);
sw->endTransmission(true);
delay(4);
}
Serial.printf(F("Triple Faulted, sending 4bit init.\n"));
sw->beginTransmission(0x27);
sw->write(0b00100100); // 7654 BT E RW RS
sw->write(0b00100000);
sw->endTransmission(true);
delay(1);
Serial.printf(F("Sending Funcion Set\n"));
sw->beginTransmission(0x27); // sends 0010NF00
sw->write(0b00100100); // 7654 BT E RW RS
sw->write(0b00100000);
sw->write(0b10000100); // 7654 BT E RW RS
sw->write(0b10000000);
sw->endTransmission(true);
delayMicroseconds(60);
sw->beginTransmission(0x27); // Display On Off 00001000
sw->write(0b00000100); // 7654 BT E RW RS
sw->write(0b00000000);
sw->write(0b10000100); // 7654 BT E RW RS
sw->write(0b10000000);
sw->endTransmission(true);
delayMicroseconds(60);
sw->beginTransmission(0x27); // Cloer Display
sw->write(0b00000100); // 7654 BT E RW RS
sw->write(0b00000000);
sw->write(0b00010100); // 7654 BT E RW RS
sw->write(0b00010000);
sw->endTransmission(true);
delay(3);
sw->beginTransmission(0x27); // Entry Mode Set
sw->write(0b00000100); // 7654 BT E RW RS
sw->write(0b00000000);
sw->write(0b01100100); // 7654 BT E RW RS
sw->write(0b01100000);
sw->endTransmission(true);
delayMicroseconds(60);
/*
sw->beginTransmission(0x27); // Display Cntl
sw->write(0b00001100); // 7654 BT E RW RS
sw->write(0b00001000);
sw->write(0b11111100); // 7654 BT E RW RS
sw->write(0b11111000);
sw->endTransmission(true);
delayMicroseconds(60);
*/
sw->beginTransmission(0x27); // Display Cntl
sw->write(0b00001100); // 7654 BT E RW RS
sw->write(0b00001000);
sw->write(0b11111100); // 7654 BT E RW RS
sw->write(0b00001000);
sw->endTransmission(true);
}
void lcd_printstr(SoftWire *sw, const char *str, uint8_t len) {
uint8_t hi,lo;
for(uint8_t i=0; i<len; i++) {
hi = (str[i] >> 4);
lo = (str[i] & 0x0F);
sw->beginTransmission(0x27);
sw->write(0b00001101 | hi << 4);
sw->write(0b00001001 | hi << 4);
sw->write(0b00001101 | lo << 4);
sw->write(0b00001001 | lo << 4);
sw->endTransmission();
delay(1);
}
}
void lcd_setAddress(SoftWire *sw, uint8_t address) {
sw->beginTransmission(0x27);
address = address & 0x7F;
sw->write(0b10001100 | (address & 0x70));
sw->write(0b10001000 | (address & 0x70));
sw->write(0b00001100 | (address & 0x0F) << 4);
sw->write(0b00001000 | (address & 0x0F) << 4);
sw->endTransmission();
delay(1);
}
void lcd_resetDDRAM(SoftWire *sw) {
sw->beginTransmission(0x27);
sw->write(0b00001100);
sw->write(0b00001000);
sw->write(0b00011100);
sw->write(0b00011000);
sw->endTransmission();
delay(2);
}
#ifdef __cplusplus
}
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment