You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.2 KiB
C++
79 lines
2.2 KiB
C++
#ifndef __AMS_20x4LCD_HPP__
|
|
#define __AMS_20x4LCD_HPP__
|
|
|
|
#include <stdint.h>
|
|
#include <Arduino.h>
|
|
|
|
//https://electronicsforu.com/resources/learn-electronics/16x2-lcd-pinout-diagram
|
|
// Most LCDs contain Hitachi HD4478 controller.
|
|
// Arduino may already have a driver for this, but I need to learn
|
|
// to write my own drivers.
|
|
|
|
class lcd20x4
|
|
{
|
|
public:
|
|
|
|
lcd20x4();
|
|
~lcd20x4();
|
|
|
|
uint8_t cursx,cursy;
|
|
|
|
void setup(uint8_t RSpin, uint8_t RWpin, uint8_t Epin, const uint8_t* DBpins);
|
|
void loop();
|
|
|
|
//11 pin control for 16-pin LCD screen
|
|
uint8_t pin_RS; //pin 4 register-select
|
|
//-0 instruction register (read), 1 data register (read/write)
|
|
uint8_t pin_RW; //pin 5 (read-write)
|
|
//-0 write, 1 read
|
|
uint8_t pin_E; //pin 6 enable
|
|
//high - enable read/write (clock for read/write?)
|
|
uint8_t pin_DB[8]; //pins 7-14 on LCD
|
|
//data bus
|
|
|
|
//blocking read/write operations
|
|
uint8_t read_op(uint8_t b, uint8_t RS);
|
|
void write_op(uint8_t b, uint8_t RS);
|
|
|
|
//control commands
|
|
void display_clear();
|
|
void cursor_home();
|
|
void entrymode(bool ID, bool S); //cursor advance direction and shift mode
|
|
//I/D - 1:increment/0:decrement S:1 display shift 0:cursor shift?
|
|
void display_toggle(bool display, bool cursor, bool charblink);
|
|
void cursor_shift(bool screen_cursor, bool left_right);
|
|
|
|
void CGRAM_set(uint8_t Acg_6bits); //sets CGRAM address - subsequent data is CG data
|
|
//user generated characters
|
|
void DDRAM_set(uint8_t Add_7bits); //sets DDRAM address - subsequent data is DD data
|
|
//00 - 4F (when display not shifted)
|
|
|
|
//DL: data length: 0 - 4-bit, 1 - 8-bit
|
|
//N: display lines: 0 - 1-line-mode 1 - 2-line-mode
|
|
//F: font: 0 - 5x8 1 - 5x10
|
|
void function_set(bool DL,bool N,bool F);
|
|
|
|
|
|
|
|
//D: display
|
|
//C: cursor
|
|
//B: blink
|
|
void displayonoff(bool D, bool C, bool B);
|
|
|
|
|
|
|
|
void setmydefs(); //sets reasonable screen defaults and clears screen
|
|
//writes a char and advances cursor
|
|
|
|
void set_pos(uint8_t x, uint8_t y);
|
|
void write_char(char b, uint8_t x, uint8_t y);
|
|
void write_char(char b);
|
|
//clears screen and writes a string (32 bytes max)
|
|
void write_chars(const char *bytes);
|
|
void newline();
|
|
|
|
|
|
};
|
|
|
|
#endif
|