I2C LCD SPLC792A

Dependents:   SPLC792A_LCD

Committer:
Yajirushi
Date:
Sat Mar 18 01:41:30 2017 +0000
Revision:
0:070d3d0b6f37
first commit

Who changed what in which revision?

UserRevisionLine numberNew 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