I2C LCD SPLC792A
SPLC792A_I2C.h@0:070d3d0b6f37, 2017-03-18 (annotated)
- Committer:
- Yajirushi
- Date:
- Sat Mar 18 01:41:30 2017 +0000
- Revision:
- 0:070d3d0b6f37
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Yajirushi | 0:070d3d0b6f37 | 1 | #include "mbed.h" |
Yajirushi | 0:070d3d0b6f37 | 2 | |
Yajirushi | 0:070d3d0b6f37 | 3 | #ifndef LCD_SPLC792A_I2C |
Yajirushi | 0:070d3d0b6f37 | 4 | #define LCD_SPLC792A_I2C |
Yajirushi | 0:070d3d0b6f37 | 5 | |
Yajirushi | 0:070d3d0b6f37 | 6 | /* USER SETTINGS =================== */ |
Yajirushi | 0:070d3d0b6f37 | 7 | #define LCD_COLS 16 //16 digits |
Yajirushi | 0:070d3d0b6f37 | 8 | #define LCD_ROWS 2 //2 Line |
Yajirushi | 0:070d3d0b6f37 | 9 | #define LCD_LOOP_MODE 2 |
Yajirushi | 0:070d3d0b6f37 | 10 | //LCD_LOOP_MODE |
Yajirushi | 0:070d3d0b6f37 | 11 | // 0: カーソルが16桁よりはみ出しても、そのまま出力し続けます(はみ出した文字は見えません) |
Yajirushi | 0:070d3d0b6f37 | 12 | // 1: カーソルが16桁に達した場合、同じ行の先頭に戻り、出力を継続します |
Yajirushi | 0:070d3d0b6f37 | 13 | // 2: カーソルが16桁に達した場合、別の行の先頭に移動し、出力を継続します |
Yajirushi | 0:070d3d0b6f37 | 14 | |
Yajirushi | 0:070d3d0b6f37 | 15 | #define SPLC792A_DEFAULT_CONTRAST 45 //6bit Contrast(0 to 63) |
Yajirushi | 0:070d3d0b6f37 | 16 | //SPLC792A_DEFAULT_CONTRAST |
Yajirushi | 0:070d3d0b6f37 | 17 | // 液晶の初期化時に使用される表示濃度を指定 |
Yajirushi | 0:070d3d0b6f37 | 18 | // 表示濃度はいつでも変更することが可能です(setContrastを使用) |
Yajirushi | 0:070d3d0b6f37 | 19 | |
Yajirushi | 0:070d3d0b6f37 | 20 | #define SPLC792A_I2C_SLAVEADDR 0x3E //7bit I2C slave address |
Yajirushi | 0:070d3d0b6f37 | 21 | //SPLC792A_I2C_SLAVEADDR |
Yajirushi | 0:070d3d0b6f37 | 22 | // I2Cで使用するスレーブアドレスです Arduinoなどで使用される7bitのものを指定 |
Yajirushi | 0:070d3d0b6f37 | 23 | // mbedはスレーブアドレスが8bitですが、プログラム内で1bit左シフトしていますので問題ありません |
Yajirushi | 0:070d3d0b6f37 | 24 | // aitendoで販売されているすべてのSPLC792A液晶は0x3Eだと思います |
Yajirushi | 0:070d3d0b6f37 | 25 | |
Yajirushi | 0:070d3d0b6f37 | 26 | #define SPLC792A_I2C_FREQ 100000 //Min:80,000Hz - Max:400,000Hz |
Yajirushi | 0:070d3d0b6f37 | 27 | //SPLC792A_I2C_FREQ |
Yajirushi | 0:070d3d0b6f37 | 28 | // I2Cの規格によると、100KHzがノーマルモード、400KHzがハイスピードモードです |
Yajirushi | 0:070d3d0b6f37 | 29 | // それ以外の周波数は記載されていませんが、動作することは確認しています |
Yajirushi | 0:070d3d0b6f37 | 30 | // プルアップ抵抗の値は重要です 10K-ohmで80KHz - 300KHzでの動作を確認しています |
Yajirushi | 0:070d3d0b6f37 | 31 | /* ================================= */ |
Yajirushi | 0:070d3d0b6f37 | 32 | |
Yajirushi | 0:070d3d0b6f37 | 33 | class LCDI2C_SPLC792A{ |
Yajirushi | 0:070d3d0b6f37 | 34 | private: |
Yajirushi | 0:070d3d0b6f37 | 35 | I2C *lcd; |
Yajirushi | 0:070d3d0b6f37 | 36 | |
Yajirushi | 0:070d3d0b6f37 | 37 | char lcdCols; |
Yajirushi | 0:070d3d0b6f37 | 38 | char lcdRows; |
Yajirushi | 0:070d3d0b6f37 | 39 | char nowCol; |
Yajirushi | 0:070d3d0b6f37 | 40 | char nowRow; |
Yajirushi | 0:070d3d0b6f37 | 41 | char loopMode; |
Yajirushi | 0:070d3d0b6f37 | 42 | char nowContrast; |
Yajirushi | 0:070d3d0b6f37 | 43 | char nowVoltage; |
Yajirushi | 0:070d3d0b6f37 | 44 | char box[2]; |
Yajirushi | 0:070d3d0b6f37 | 45 | char i2c_addr; |
Yajirushi | 0:070d3d0b6f37 | 46 | |
Yajirushi | 0:070d3d0b6f37 | 47 | void sendCmd(char Lbyte); |
Yajirushi | 0:070d3d0b6f37 | 48 | void sendVal(char Lbyte); |
Yajirushi | 0:070d3d0b6f37 | 49 | |
Yajirushi | 0:070d3d0b6f37 | 50 | public: |
Yajirushi | 0:070d3d0b6f37 | 51 | /** Create a SPLC792A instance connected to I2C pins |
Yajirushi | 0:070d3d0b6f37 | 52 | * default LCD cols = 16, rows = 2 |
Yajirushi | 0:070d3d0b6f37 | 53 | * |
Yajirushi | 0:070d3d0b6f37 | 54 | * @param i2c_SDA I2C-bus SDA pin |
Yajirushi | 0:070d3d0b6f37 | 55 | * @param i2c_SCL I2C-bus SCL pin |
Yajirushi | 0:070d3d0b6f37 | 56 | * @param lcd_LOOP LCD display loop-mode |
Yajirushi | 0:070d3d0b6f37 | 57 | * 0: Continue to output, If it overflowing 16 digits.(The overflowing characters disappear) |
Yajirushi | 0:070d3d0b6f37 | 58 | * 1: Back to the beginning of the same line, If it overflowing 16 digits |
Yajirushi | 0:070d3d0b6f37 | 59 | * 2: Back to the beginning of the different line, If it overflowing 16 digits |
Yajirushi | 0:070d3d0b6f37 | 60 | */ |
Yajirushi | 0:070d3d0b6f37 | 61 | LCDI2C_SPLC792A(PinName i2c_SDA, PinName i2c_SCL, unsigned char lcd_LOOP=LCD_LOOP_MODE); |
Yajirushi | 0:070d3d0b6f37 | 62 | |
Yajirushi | 0:070d3d0b6f37 | 63 | /** Create a SPLC792A instance connected to I2C pins |
Yajirushi | 0:070d3d0b6f37 | 64 | * |
Yajirushi | 0:070d3d0b6f37 | 65 | * @param lcd_Cols LCD display cols |
Yajirushi | 0:070d3d0b6f37 | 66 | * @param lcd_Rows LCD display rows |
Yajirushi | 0:070d3d0b6f37 | 67 | * @param i2c_SDA I2C-bus SDA pin |
Yajirushi | 0:070d3d0b6f37 | 68 | * @param i2c_SCL I2C-bus SCL pin |
Yajirushi | 0:070d3d0b6f37 | 69 | * @param lcd_LOOP LCD display loop-mode |
Yajirushi | 0:070d3d0b6f37 | 70 | * 0: Continue to output, If it overflowing 16 digits.(The overflowing characters disappear) |
Yajirushi | 0:070d3d0b6f37 | 71 | * 1: Back to the beginning of the same line, If it overflowing 16 digits |
Yajirushi | 0:070d3d0b6f37 | 72 | * 2: Back to the beginning of the different line, If it overflowing 16 digits |
Yajirushi | 0:070d3d0b6f37 | 73 | */ |
Yajirushi | 0:070d3d0b6f37 | 74 | LCDI2C_SPLC792A(unsigned char lcd_Cols, unsigned char lcd_Rows, PinName i2c_SDA, PinName i2c_SCL, unsigned char lcd_LOOP=LCD_LOOP_MODE); |
Yajirushi | 0:070d3d0b6f37 | 75 | |
Yajirushi | 0:070d3d0b6f37 | 76 | /** Destructor |
Yajirushi | 0:070d3d0b6f37 | 77 | */ |
Yajirushi | 0:070d3d0b6f37 | 78 | ~LCDI2C_SPLC792A(); |
Yajirushi | 0:070d3d0b6f37 | 79 | |
Yajirushi | 0:070d3d0b6f37 | 80 | /** LCD initialize |
Yajirushi | 0:070d3d0b6f37 | 81 | */ |
Yajirushi | 0:070d3d0b6f37 | 82 | void init(); |
Yajirushi | 0:070d3d0b6f37 | 83 | |
Yajirushi | 0:070d3d0b6f37 | 84 | /** LCD clear (すべての表示を消すが、カーソル位置は保持する) |
Yajirushi | 0:070d3d0b6f37 | 85 | */ |
Yajirushi | 0:070d3d0b6f37 | 86 | void clear(); |
Yajirushi | 0:070d3d0b6f37 | 87 | |
Yajirushi | 0:070d3d0b6f37 | 88 | /** LCD clear : alias clear() (すべての表示を消すが、カーソル位置は保持する) |
Yajirushi | 0:070d3d0b6f37 | 89 | */ |
Yajirushi | 0:070d3d0b6f37 | 90 | void cls(); |
Yajirushi | 0:070d3d0b6f37 | 91 | |
Yajirushi | 0:070d3d0b6f37 | 92 | /** LCD Homing of the cursor |
Yajirushi | 0:070d3d0b6f37 | 93 | */ |
Yajirushi | 0:070d3d0b6f37 | 94 | void home(); |
Yajirushi | 0:070d3d0b6f37 | 95 | |
Yajirushi | 0:070d3d0b6f37 | 96 | /** LCD re-initialize : alias init() |
Yajirushi | 0:070d3d0b6f37 | 97 | */ |
Yajirushi | 0:070d3d0b6f37 | 98 | void reset(); |
Yajirushi | 0:070d3d0b6f37 | 99 | |
Yajirushi | 0:070d3d0b6f37 | 100 | /** Display single-character |
Yajirushi | 0:070d3d0b6f37 | 101 | * |
Yajirushi | 0:070d3d0b6f37 | 102 | * @param characterCode display single-character code |
Yajirushi | 0:070d3d0b6f37 | 103 | */ |
Yajirushi | 0:070d3d0b6f37 | 104 | void setCharCode(const char characterCode); |
Yajirushi | 0:070d3d0b6f37 | 105 | |
Yajirushi | 0:070d3d0b6f37 | 106 | /** Display contrast setting |
Yajirushi | 0:070d3d0b6f37 | 107 | * |
Yajirushi | 0:070d3d0b6f37 | 108 | * @param voltage_0to7 Voltage Regulator amplified ratio |
Yajirushi | 0:070d3d0b6f37 | 109 | * 0: 1.818V |
Yajirushi | 0:070d3d0b6f37 | 110 | * 1: 2.222V |
Yajirushi | 0:070d3d0b6f37 | 111 | * 2: 2.667V |
Yajirushi | 0:070d3d0b6f37 | 112 | * 3: 3.333V (SPLC792A default) |
Yajirushi | 0:070d3d0b6f37 | 113 | * 4: 3.636V (This Library - initialize default) |
Yajirushi | 0:070d3d0b6f37 | 114 | * 5: 4.000V |
Yajirushi | 0:070d3d0b6f37 | 115 | * 6: 4.444V |
Yajirushi | 0:070d3d0b6f37 | 116 | * 7: 5.000V |
Yajirushi | 0:070d3d0b6f37 | 117 | * |
Yajirushi | 0:070d3d0b6f37 | 118 | * @param contrast_0to64 Contrast adjust fot internal Voltage Regulator |
Yajirushi | 0:070d3d0b6f37 | 119 | * 38: (default?) |
Yajirushi | 0:070d3d0b6f37 | 120 | * 45: best!!(3.636V) |
Yajirushi | 0:070d3d0b6f37 | 121 | */ |
Yajirushi | 0:070d3d0b6f37 | 122 | void setContrast(char voltage_0to7, char contrast_0to64); |
Yajirushi | 0:070d3d0b6f37 | 123 | |
Yajirushi | 0:070d3d0b6f37 | 124 | /** LCD cursor set |
Yajirushi | 0:070d3d0b6f37 | 125 | * |
Yajirushi | 0:070d3d0b6f37 | 126 | * @param cursorAddr LCD cursor address |
Yajirushi | 0:070d3d0b6f37 | 127 | * 0x00 - 0x27 (Row 1) |
Yajirushi | 0:070d3d0b6f37 | 128 | * 0x40 - 0x67 (Row 2) |
Yajirushi | 0:070d3d0b6f37 | 129 | */ |
Yajirushi | 0:070d3d0b6f37 | 130 | void setCursorfromAddr(char cursorAddr); |
Yajirushi | 0:070d3d0b6f37 | 131 | |
Yajirushi | 0:070d3d0b6f37 | 132 | /** LCD cursor set (from Row,Col) |
Yajirushi | 0:070d3d0b6f37 | 133 | * |
Yajirushi | 0:070d3d0b6f37 | 134 | * @param col LCD column 1 to 16 |
Yajirushi | 0:070d3d0b6f37 | 135 | * @param row LCD row 1 or 2 |
Yajirushi | 0:070d3d0b6f37 | 136 | */ |
Yajirushi | 0:070d3d0b6f37 | 137 | void setCursorfromColRow(unsigned char col, unsigned char row); |
Yajirushi | 0:070d3d0b6f37 | 138 | |
Yajirushi | 0:070d3d0b6f37 | 139 | /** LCD cursor set: alias setCursorfromColRow |
Yajirushi | 0:070d3d0b6f37 | 140 | * |
Yajirushi | 0:070d3d0b6f37 | 141 | * @param x LCD column 1 to 16 |
Yajirushi | 0:070d3d0b6f37 | 142 | * @param y LCD row 1 or 2 |
Yajirushi | 0:070d3d0b6f37 | 143 | */ |
Yajirushi | 0:070d3d0b6f37 | 144 | void setCursor(unsigned char x, unsigned char y); |
Yajirushi | 0:070d3d0b6f37 | 145 | |
Yajirushi | 0:070d3d0b6f37 | 146 | /** Display mode set |
Yajirushi | 0:070d3d0b6f37 | 147 | * |
Yajirushi | 0:070d3d0b6f37 | 148 | * @param display_on 0(false):Display Off, 1(true):Display On |
Yajirushi | 0:070d3d0b6f37 | 149 | * @param cursor_underbar_on 0(false):cursor underbar Off, 1(true):cursor underbar On |
Yajirushi | 0:070d3d0b6f37 | 150 | * @param blink_on 0(false):cursor blinking Off, 1(true):cursor blinking On |
Yajirushi | 0:070d3d0b6f37 | 151 | */ |
Yajirushi | 0:070d3d0b6f37 | 152 | void setDisplay(bool display_on, bool cursor_underbar_on, bool blink_on); |
Yajirushi | 0:070d3d0b6f37 | 153 | |
Yajirushi | 0:070d3d0b6f37 | 154 | /** Entry mode set |
Yajirushi | 0:070d3d0b6f37 | 155 | * |
Yajirushi | 0:070d3d0b6f37 | 156 | * @param shift_on 0(false):shift Off, 1(true):shift On |
Yajirushi | 0:070d3d0b6f37 | 157 | * @param isIncrement |
Yajirushi | 0:070d3d0b6f37 | 158 | * 0(false):Decrement cursor(printing RTL) |
Yajirushi | 0:070d3d0b6f37 | 159 | * 1(true):Inclement cursor(printing LTR) |
Yajirushi | 0:070d3d0b6f37 | 160 | */ |
Yajirushi | 0:070d3d0b6f37 | 161 | void setEntryMode(bool shift_on, bool isIncrement); |
Yajirushi | 0:070d3d0b6f37 | 162 | |
Yajirushi | 0:070d3d0b6f37 | 163 | /** Entry mode set (よくわからない) |
Yajirushi | 0:070d3d0b6f37 | 164 | * |
Yajirushi | 0:070d3d0b6f37 | 165 | * @param isTwoLineLCD I do not know |
Yajirushi | 0:070d3d0b6f37 | 166 | * @param isDoubleHeightMode I do not know |
Yajirushi | 0:070d3d0b6f37 | 167 | */ |
Yajirushi | 0:070d3d0b6f37 | 168 | void setFunction(bool isTwoLineLCD, bool isDoubleHeightMode); |
Yajirushi | 0:070d3d0b6f37 | 169 | |
Yajirushi | 0:070d3d0b6f37 | 170 | /** Entry(shift?) mode set (よくわからない) |
Yajirushi | 0:070d3d0b6f37 | 171 | * |
Yajirushi | 0:070d3d0b6f37 | 172 | * @param cursor_shift_on I do not know |
Yajirushi | 0:070d3d0b6f37 | 173 | * @param display_shift_on I do not know |
Yajirushi | 0:070d3d0b6f37 | 174 | */ |
Yajirushi | 0:070d3d0b6f37 | 175 | void setShift(bool cursor_shift_on, bool display_shift_on); |
Yajirushi | 0:070d3d0b6f37 | 176 | |
Yajirushi | 0:070d3d0b6f37 | 177 | /** Print String |
Yajirushi | 0:070d3d0b6f37 | 178 | * |
Yajirushi | 0:070d3d0b6f37 | 179 | * @param *str string characters |
Yajirushi | 0:070d3d0b6f37 | 180 | * example: |
Yajirushi | 0:070d3d0b6f37 | 181 | * |
Yajirushi | 0:070d3d0b6f37 | 182 | * char str[]="this is str."; |
Yajirushi | 0:070d3d0b6f37 | 183 | * lcd.writeString(str); |
Yajirushi | 0:070d3d0b6f37 | 184 | * |
Yajirushi | 0:070d3d0b6f37 | 185 | * 標準関数のprintfのような使い方をしたい場合は、sprintfを使ってください |
Yajirushi | 0:070d3d0b6f37 | 186 | * If you want to use, such as "printf", use "sprintf" |
Yajirushi | 0:070d3d0b6f37 | 187 | * |
Yajirushi | 0:070d3d0b6f37 | 188 | * int my_No = 5; |
Yajirushi | 0:070d3d0b6f37 | 189 | * char str[20]; |
Yajirushi | 0:070d3d0b6f37 | 190 | * sprtinf(str, "my number is %d", my_No); |
Yajirushi | 0:070d3d0b6f37 | 191 | * lcd.writeString(str); |
Yajirushi | 0:070d3d0b6f37 | 192 | * |
Yajirushi | 0:070d3d0b6f37 | 193 | * @param dispWaitTime_ms delay time |
Yajirushi | 0:070d3d0b6f37 | 194 | * 1文字表示するごとに、何ミリ秒休むかを指定します |
Yajirushi | 0:070d3d0b6f37 | 195 | * 空白 ' '(Blank-space)は2倍の時間休みます |
Yajirushi | 0:070d3d0b6f37 | 196 | * Consume mili-second to 1 character display |
Yajirushi | 0:070d3d0b6f37 | 197 | * character ' '(Blank-space): Consume (mili-second * 2) to 1 character display |
Yajirushi | 0:070d3d0b6f37 | 198 | */ |
Yajirushi | 0:070d3d0b6f37 | 199 | void writeString(const char *str, unsigned short dispWaitTime_ms=0); |
Yajirushi | 0:070d3d0b6f37 | 200 | |
Yajirushi | 0:070d3d0b6f37 | 201 | /** Print String : alias writeString |
Yajirushi | 0:070d3d0b6f37 | 202 | * @param *str string characters |
Yajirushi | 0:070d3d0b6f37 | 203 | * @param dispWaitTime_ms delay time |
Yajirushi | 0:070d3d0b6f37 | 204 | */ |
Yajirushi | 0:070d3d0b6f37 | 205 | void print(const char *str, unsigned short dispWaitTime_ms=0); |
Yajirushi | 0:070d3d0b6f37 | 206 | |
Yajirushi | 0:070d3d0b6f37 | 207 | /** Print String : alias writeString |
Yajirushi | 0:070d3d0b6f37 | 208 | * @param *str string characters |
Yajirushi | 0:070d3d0b6f37 | 209 | * @param dispWaitTime_ms delay time |
Yajirushi | 0:070d3d0b6f37 | 210 | */ |
Yajirushi | 0:070d3d0b6f37 | 211 | void write(const char *str, unsigned short dispWaitTime_ms=0); |
Yajirushi | 0:070d3d0b6f37 | 212 | |
Yajirushi | 0:070d3d0b6f37 | 213 | /** Print String : alias writeString |
Yajirushi | 0:070d3d0b6f37 | 214 | * @param *str string characters |
Yajirushi | 0:070d3d0b6f37 | 215 | * @param dispWaitTime_ms delay time |
Yajirushi | 0:070d3d0b6f37 | 216 | */ |
Yajirushi | 0:070d3d0b6f37 | 217 | void o(const char *str, unsigned short dispWaitTime_ms=0); |
Yajirushi | 0:070d3d0b6f37 | 218 | |
Yajirushi | 0:070d3d0b6f37 | 219 | |
Yajirushi | 0:070d3d0b6f37 | 220 | //get functions |
Yajirushi | 0:070d3d0b6f37 | 221 | char getCol(); |
Yajirushi | 0:070d3d0b6f37 | 222 | char getContrast(); |
Yajirushi | 0:070d3d0b6f37 | 223 | char getRow(); |
Yajirushi | 0:070d3d0b6f37 | 224 | char getVoltage0to7(); |
Yajirushi | 0:070d3d0b6f37 | 225 | float getVoltageValue(); |
Yajirushi | 0:070d3d0b6f37 | 226 | |
Yajirushi | 0:070d3d0b6f37 | 227 | }; |
Yajirushi | 0:070d3d0b6f37 | 228 | |
Yajirushi | 0:070d3d0b6f37 | 229 | #endif //LCD_SPLC792A_I2C |