Created
July 4, 2022 00:56
-
-
Save knight-ryu12/51b4e47046e446781508c45a29cb0a04 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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