#define HIGH 1 #define LOW 0 //#include //void DEV_WRITE(volatile uint32_t addr, volatile uint32_t val) { /* printf("%X\n", val); int i; for (i = 0; i < 32; i++) { volatile uint32_t num = val << i; printf("%i", (num & 0x80000000) >> 31); if (i%4 == 3 && i != 31) printf("_"); } printf("\n\n"); */ // *((volatile uint32_t *)(addr)) = val; //} volatile uint32_t SPIbuff; volatile uint8_t displaycontrol; void delay2(int n) { volatile int i; for (i = 0; i < n * 1000; i++) {} } void spi_write(volatile uint32_t cmd, volatile uint8_t DELAY){ /*printf("%X\n", cmd); int i; for (i = 0; i < 32; i++) { volatile uint32_t num = cmd << i; printf("%i", (num & 0x80000000) >> 31); if (i%4 == 3 && i != 31) printf("_"); } printf("\n\n"); */ DEV_WRITE(REG_SPICMD, cmd); //8 bits of CMD we want to send to LCD DEV_WRITE(REG_SPIADR, cmd); //8 bits of ADDR we want to send to LCD DEV_WRITE(REG_TXFIFO, cmd); DEV_WRITE(REG_STATUS, 0x00000102); //Enable the clk to peripheral (SPI clk). Bit [1] set to enable spi_wr mode, and bit [8] set to chip select LCD. delay2(DELAY); } void lcd_init(volatile uint8_t DELAY) { DEV_WRITE(REG_SPILEN, 0x00080808); //Setting length of DATA, ADDR, CMD DEV_WRITE(REG_CLKDIV, 0x000000AA); //Setting clock divider factor = 10 spi_write(0x80000000, DELAY); //_digitalWrite(_rs_pin, LOW); Line 188, Adafruit_LiquidCrystal.cpp spi_write(0x80000000, DELAY); //_digitalWrite(_enable_pin, LOW); Line 189, Adafruit_LiquidCrystal.cpp //write4bits(0x03); Line 200, Adafruit_LiquidCrystal.cpp spi_write(0xC0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE4000000, DELAY); spi_write(0xE0000000, DELAY); //delayMicroseconds(4500); Line 201, Adafruit_LiquidCrystal.cpp delay2(100); //write4bits(0x03); Line 204, Adafruit_LiquidCrystal.cpp spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE4000000, DELAY); spi_write(0xE0000000, DELAY); //delayMicroseconds(4500); Line 205, Adafruit_LiquidCrystal.cpp delay2(100); //write4bits(0x03); Line 208, Adafruit_LiquidCrystal.cpp spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE0000000, DELAY); spi_write(0xE4000000, DELAY); spi_write(0xE0000000, DELAY); //delayMicroseconds(150); Line 209. Delay given below (1000) is more than required, can be changed delay2(1000); //write4bits(0x02); Line 212, Adafruit_LiquidCrystal.cpp spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA4000000, DELAY); spi_write(0xA0000000, DELAY); delay2(100); //Needed??? //command(LCD_FUNCTIONSET | _displayfunction); Line 230, Adafruit_LiquidCrystal.cpp //LCD_FUNCTIONSET | _displayfunction evalutaes to 0x28 spi_write(0xA0000000, DELAY); //_digitalWrite(_rs_pin, mode); Line 401, Adafruit_LiquidCrystal.cpp spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA4000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x88000000, DELAY); spi_write(0x88000000, DELAY); spi_write(0x8C000000, DELAY); spi_write(0x88000000, DELAY); //display(); Line 234, Adafruit_LiquidCrystal.cpp spi_write(0x88000000, DELAY); //_digitalWrite(_rs_pin, mode); Line 401, Adafruit_LiquidCrystal.cpp spi_write(0x88000000, DELAY); spi_write(0x88000000, DELAY); spi_write(0x88000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x84000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x90000000, DELAY); spi_write(0x98000000, DELAY); spi_write(0x98000000, DELAY); spi_write(0x9C000000, DELAY); spi_write(0x98000000, DELAY); //clear(); Line 237, Adafruit_LiquidCrystal.cpp spi_write(0x98000000, DELAY); //_digitalWrite(_rs_pin, mode); Line 401, Adafruit_LiquidCrystal.cpp spi_write(0x98000000, DELAY); spi_write(0x98000000, DELAY); spi_write(0x88000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x84000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0xC0000000, DELAY); spi_write(0xC0000000, DELAY); spi_write(0xC0000000, DELAY); spi_write(0xC0000000, DELAY); spi_write(0xC0000000, DELAY); spi_write(0xC4000000, DELAY); spi_write(0xC0000000, DELAY); delay2(100); //delayMicroseconds(2000); Line 250, Adafruit_LiquidCrystal.cpp //command(LCD_ENTRYMODESET | _displaymode); Line 242, Adafruit_LiquidCrystal.cpp spi_write(0xC0000000, DELAY); //_digitalWrite(_rs_pin, mode); Line 401, Adafruit_LiquidCrystal.cpp spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x84000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0x80000000, DELAY); spi_write(0xA0000000, DELAY); spi_write(0xB0000000, DELAY); spi_write(0xB0000000, DELAY); spi_write(0xB0000000, DELAY); spi_write(0xB4000000, DELAY); spi_write(0xB0000000, DELAY); SPIbuff = 0x000000B0; displaycontrol = 0x04; //uint32_t cmd = 0xB2000000; // spi_write(cmd); //_digitalWrite(_rs_pin, mode); Line 401, Adafruit_LiquidCrystal.cpp, this command is called once per character sent //cmd = 0xB2000000; // spi_write(cmd); //write4bits(value >> 4); Line 411, Adafruit_LiquidCrystal.cpp //cmd = 0x92000000; // spi_write(cmd); //cmd = 0x92000000; // spi_write(cmd); //cmd = 0x92000000; // spi_write(cmd); //cmd = 0x92000000; // spi_write(cmd); //cmd = 0x96000000; // spi_write(cmd); //cmd = 0x92000000; // spi_write(cmd); //cmd = 0x92000000; // spi_write(cmd); //write4bits(value); Line 412, Adafruit_LiquidCrystal.cpp //cmd = 0x92000000; // spi_write(cmd); //cmd = 0x82000000; // spi_write(cmd); //cmd = 0x8A000000; // spi_write(cmd); //cmd = 0x8A000000; // spi_write(cmd); //cmd = 0x8E000000; // spi_write(cmd); //cmd = 0x8A000000; // spi_write(cmd); //printf("Buff is: %X\n", SPIbuff); } void digitalWrite(volatile uint8_t p, volatile uint8_t d, volatile uint8_t DELAY) { volatile uint32_t mask = 0xFF000000; if (d == HIGH) SPIbuff |= (1 << p); else SPIbuff &= ~(1 << p); //printf("Buff is: %X\n", SPIbuff); volatile uint32_t word = mask & (SPIbuff << 24); spi_write(word, DELAY); } void lcd_write(volatile uint8_t character, volatile uint8_t mode, volatile uint8_t DELAY) { // Implementing "send" function digitalWrite((uint8_t) 1, mode, DELAY); digitalWrite((uint8_t) 6, (uint8_t) ((character >> 4) & 0x01), DELAY); digitalWrite((uint8_t) 5, (uint8_t) ((character >> 5) & 0x01), DELAY); digitalWrite((uint8_t) 4, (uint8_t) ((character >> 6) & 0x01), DELAY); digitalWrite((uint8_t) 3, (uint8_t) ((character >> 7) & 0x01), DELAY); digitalWrite((uint8_t) 2, (uint8_t) LOW, DELAY); digitalWrite((uint8_t) 2, (uint8_t) HIGH, DELAY); digitalWrite((uint8_t) 2, (uint8_t) LOW, DELAY); digitalWrite((uint8_t) 6, (uint8_t) ((character >> 0) & 0x01), DELAY); digitalWrite((uint8_t) 5, (uint8_t) ((character >> 1) & 0x01), DELAY); digitalWrite((uint8_t) 4, (uint8_t) ((character >> 2) & 0x01), DELAY); digitalWrite((uint8_t) 3, (uint8_t) ((character >> 3) & 0x01), DELAY); digitalWrite((uint8_t) 2, (uint8_t) LOW, DELAY); digitalWrite((uint8_t) 2, (uint8_t) HIGH, DELAY); digitalWrite((uint8_t) 2, (uint8_t) LOW, DELAY); //printf("\n"); } void lcd_print(volatile char *string, volatile uint8_t DELAY) { volatile int i = 0; while (string[i] != '\n') { //printf("Character: %c\n", string[i]); lcd_write((uint8_t) string[i], (uint8_t) HIGH, DELAY); i++; } } void clear() { // VERIFIED lcd_write((uint8_t) 0x01, (uint8_t) LOW, 1); delay2(100); } void home() { lcd_write((uint8_t) 0x02, (uint8_t) LOW, 1); delay2(100); } void setCursor(volatile uint8_t col, volatile uint8_t row, volatile uint8_t DELAY) { if (row == 0) lcd_write((uint8_t) (0x80 | (col + 0x00)), (uint8_t) LOW, DELAY); else if (row == 1) lcd_write((uint8_t) (0x80 | (col + 0x40)), (uint8_t) LOW, DELAY); else if (row == 2) lcd_write((uint8_t) (0x80 | (col + 0x14)), (uint8_t) LOW, DELAY); else lcd_write((uint8_t) (0x80 | (col + 0x54)), (uint8_t) LOW, DELAY); } void noDisplay() { displaycontrol = 0x00; lcd_write((uint8_t) 0x08, (uint8_t) LOW, 1); } void display() { displaycontrol = 0x04; lcd_write((uint8_t) 0x0C, (uint8_t) LOW, 1); } void noCursor() { displaycontrol &= ~(0x02); lcd_write((uint8_t) (0x08 | displaycontrol), (uint8_t) LOW, 1); } void cursor() { displaycontrol |= 0x02; lcd_write((uint8_t) (0x08 | displaycontrol), (uint8_t) LOW, 1); } void noBlink() { displaycontrol &= ~(0x01); lcd_write((uint8_t) (0x08 | displaycontrol), (uint8_t) LOW, 1); } void blink() { displaycontrol |= 0x01; lcd_write((uint8_t) (0x08 | displaycontrol), (uint8_t) LOW, 1); } void scrollDisplayLeft() { lcd_write((uint8_t) 0x18, (uint8_t) LOW, 1); } void scrollDisplayRight() { lcd_write((uint8_t) 0x1C, (uint8_t) LOW, 1); } //void leftToRight() { // lcd_write(, (uint8_t) LOW); //} //void rightToLeft() { // lcd_write(, (uint8_t) LOW); //} //void autoscroll() { // lcd_write(, (uint8_t) LOW); //} //void noAutoscroll() { // lcd_write(, (uint8_t) LOW); //} //void createChar() { // lcd_write(, (uint8_t) LOW); //} void setBacklight (uint8_t value) { digitalWrite((uint8_t) 0x07, value, 1); }