I2C 接続の LCD AQM1602XA-RN-GBW 用のライブラリ. Library for LCD 1602XA-RN-GBW connected using I2C interface.

Dependents:   UIT2_MovingAv_Intr UIT2_VariableFIR UIT2_VowelSynthesizer UIT2_ALE_LeakyLMS ... more

Committer:
MikamiUitOpen
Date:
Sat Jul 22 01:56:41 2017 +0000
Revision:
11:f650f1e809a9
Parent:
10:6e6c0f24e81f
Child:
12:21830002e12d
12, mbed Rev.130 ???????????????????????DISCO-F746 ?????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 10:6e6c0f24e81f 1 //---------------------------------------------------------------
MikamiUitOpen 0:f177013dc4fc 2 // Class for LCD, AQM1602XA-RN-GBW (Header)
MikamiUitOpen 10:6e6c0f24e81f 3 // Use mbed Rev.129 for Nucleo-F401/446/746 and DISCO-F746
MikamiUitOpen 0:f177013dc4fc 4 //
MikamiUitOpen 10:6e6c0f24e81f 5 // Default pin assignments for Nucleo and DISCO-F746
MikamiUitOpen 0:f177013dc4fc 6 // D14 SDA ---- to pin4 of LCD module
MikamiUitOpen 0:f177013dc4fc 7 // D15 SCL ---- to pin3 of LCD module
MikamiUitOpen 0:f177013dc4fc 8 //
MikamiUitOpen 11:f650f1e809a9 9 // mbed Rev.130 以降で起こる,割り込み処理での動作不良を修正
MikamiUitOpen 11:f650f1e809a9 10 // DISCO-F746 では動作不良は修正できないようだ
MikamiUitOpen 11:f650f1e809a9 11 //
MikamiUitOpen 11:f650f1e809a9 12 // 2017/07/21, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 10:6e6c0f24e81f 13 //---------------------------------------------------------------
MikamiUitOpen 0:f177013dc4fc 14
MikamiUitOpen 0:f177013dc4fc 15 #ifndef AQM1602I2C_HPP
MikamiUitOpen 0:f177013dc4fc 16 #define AQM1602I2C_HPP
MikamiUitOpen 0:f177013dc4fc 17
MikamiUitOpen 0:f177013dc4fc 18 #include "mbed.h"
MikamiUitOpen 1:18cd1c4212c3 19 #include <string>
MikamiUitOpen 0:f177013dc4fc 20
MikamiUitOpen 0:f177013dc4fc 21 namespace Mikami
MikamiUitOpen 0:f177013dc4fc 22 {
MikamiUitOpen 0:f177013dc4fc 23 class Aqm1602
MikamiUitOpen 0:f177013dc4fc 24 {
MikamiUitOpen 0:f177013dc4fc 25 public:
MikamiUitOpen 0:f177013dc4fc 26 // Constructor
MikamiUitOpen 10:6e6c0f24e81f 27 #if defined(STM32F4) || defined(STM32L0) || defined(__STM32F3xx_H) || \
MikamiUitOpen 10:6e6c0f24e81f 28 defined(STM32F7)
MikamiUitOpen 10:6e6c0f24e81f 29 #define STM_USER_BUTTON
MikamiUitOpen 0:f177013dc4fc 30 Aqm1602(PinName sda = D14, // SDA
MikamiUitOpen 0:f177013dc4fc 31 PinName scl = D15, // SCL
MikamiUitOpen 0:f177013dc4fc 32 uint32_t clock = 100000, // clock: 100 kHz
MikamiUitOpen 0:f177013dc4fc 33 bool cursor = false, // cursor: off
MikamiUitOpen 0:f177013dc4fc 34 bool blink = false); // blink: off
MikamiUitOpen 5:c44a3beb21f2 35 // Default constructor is defined for only Nucleo
MikamiUitOpen 5:c44a3beb21f2 36 #else
MikamiUitOpen 5:c44a3beb21f2 37 Aqm1602(PinName sda, // SDA
MikamiUitOpen 5:c44a3beb21f2 38 PinName scl, // SCL
MikamiUitOpen 5:c44a3beb21f2 39 uint32_t clock = 100000, // clock: 100 kHz
MikamiUitOpen 5:c44a3beb21f2 40 bool cursor = false, // cursor: off
MikamiUitOpen 5:c44a3beb21f2 41 bool blink = false); // blink: off
MikamiUitOpen 5:c44a3beb21f2 42 #endif
MikamiUitOpen 8:854c244a7863 43 Aqm1602(I2C &i2c, // Reference of I2C object
MikamiUitOpen 8:854c244a7863 44 uint32_t clock = 100000, // clock: 100 kHz
MikamiUitOpen 8:854c244a7863 45 bool cursor = false, // cursor: off
MikamiUitOpen 8:854c244a7863 46 bool blink = false); // blink: off
MikamiUitOpen 8:854c244a7863 47
MikamiUitOpen 10:6e6c0f24e81f 48 virtual ~Aqm1602()
MikamiUitOpen 8:854c244a7863 49 { if (NULL != i2cPtr_) delete i2cPtr_; }
MikamiUitOpen 8:854c244a7863 50
MikamiUitOpen 3:414f98234c94 51 // Return false if LCD is not connected
MikamiUitOpen 3:414f98234c94 52 bool IsConnected() { return connected_; }
MikamiUitOpen 3:414f98234c94 53
MikamiUitOpen 0:f177013dc4fc 54 // All clear
MikamiUitOpen 8:854c244a7863 55 bool Clear();
MikamiUitOpen 1:18cd1c4212c3 56
MikamiUitOpen 0:f177013dc4fc 57 // Send command
MikamiUitOpen 3:414f98234c94 58 bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); }
MikamiUitOpen 1:18cd1c4212c3 59
MikamiUitOpen 0:f177013dc4fc 60 // Write character (Not 0x80 but 0x40)
MikamiUitOpen 3:414f98234c94 61 bool WriteChar(char data) { return LcdTx(0x40, data); }
MikamiUitOpen 1:18cd1c4212c3 62
MikamiUitOpen 0:f177013dc4fc 63 // Specify display position, x: 0 - 7, y: 0, 1
MikamiUitOpen 0:f177013dc4fc 64 void SetXY(uint8_t x = 0, uint8_t y = 0)
MikamiUitOpen 0:f177013dc4fc 65 { WriteCmd(x + y*0x40 | 0x80);}
MikamiUitOpen 1:18cd1c4212c3 66
MikamiUitOpen 0:f177013dc4fc 67 // Write string
MikamiUitOpen 0:f177013dc4fc 68 void WriteString(const char str[]);
MikamiUitOpen 1:18cd1c4212c3 69 void WriteString(const string str) { WriteString(str.c_str()); }
MikamiUitOpen 1:18cd1c4212c3 70
MikamiUitOpen 0:f177013dc4fc 71 // Write string from specified position
MikamiUitOpen 2:f496f85ce6f2 72 void WriteStringXY(const char str[], uint8_t x, uint8_t y);
MikamiUitOpen 1:18cd1c4212c3 73 void WriteStringXY(const string str, uint8_t x, uint8_t y)
MikamiUitOpen 1:18cd1c4212c3 74 { WriteStringXY(str.c_str(), x, y); }
MikamiUitOpen 1:18cd1c4212c3 75
MikamiUitOpen 9:74a845df6e7a 76 // Write numerical value
MikamiUitOpen 9:74a845df6e7a 77 template <typename T> void WriteValue(const char fmt[], T value)
MikamiUitOpen 9:74a845df6e7a 78 {
MikamiUitOpen 9:74a845df6e7a 79 char str[17];
MikamiUitOpen 9:74a845df6e7a 80 sprintf(str, fmt, value);
MikamiUitOpen 9:74a845df6e7a 81 WriteString(str);
MikamiUitOpen 9:74a845df6e7a 82 }
MikamiUitOpen 9:74a845df6e7a 83
MikamiUitOpen 9:74a845df6e7a 84 // Write numerical value from specified position
MikamiUitOpen 9:74a845df6e7a 85 template <typename T>
MikamiUitOpen 9:74a845df6e7a 86 void WriteValueXY(const char fmt[], T value, uint8_t x, uint8_t y)
MikamiUitOpen 9:74a845df6e7a 87 {
MikamiUitOpen 9:74a845df6e7a 88 SetXY(x, y);
MikamiUitOpen 9:74a845df6e7a 89 WriteValue(fmt, value);
MikamiUitOpen 9:74a845df6e7a 90 }
MikamiUitOpen 9:74a845df6e7a 91
MikamiUitOpen 0:f177013dc4fc 92 // Clear of specified line
MikamiUitOpen 0:f177013dc4fc 93 void ClearLine(uint8_t line);
MikamiUitOpen 1:18cd1c4212c3 94
MikamiUitOpen 0:f177013dc4fc 95 void SetContrast(uint8_t c);
MikamiUitOpen 0:f177013dc4fc 96
MikamiUitOpen 0:f177013dc4fc 97 private:
MikamiUitOpen 3:414f98234c94 98 // Slave address of AQM1602A
MikamiUitOpen 0:f177013dc4fc 99 // left-justified 7-bit address
MikamiUitOpen 0:f177013dc4fc 100 static const uint8_t LCD_ADDRESS_ = 0x7C;
MikamiUitOpen 0:f177013dc4fc 101 static const uint8_t N_CHR = 16;
MikamiUitOpen 0:f177013dc4fc 102
MikamiUitOpen 8:854c244a7863 103 I2C *i2cPtr_; // Pointer of I2C object
MikamiUitOpen 8:854c244a7863 104 I2C &i2c_; // Reference of I2C object
MikamiUitOpen 7:5375acc9a74a 105 bool connected_; // false: LCD is not connected
MikamiUitOpen 0:f177013dc4fc 106
MikamiUitOpen 8:854c244a7863 107 void Init(uint32_t clock, bool cursor, bool blink);
MikamiUitOpen 8:854c244a7863 108
MikamiUitOpen 3:414f98234c94 109 bool LcdTx(uint8_t cmdData, uint8_t data);
MikamiUitOpen 0:f177013dc4fc 110
MikamiUitOpen 7:5375acc9a74a 111 // disallow copy constructor and assignment operator
MikamiUitOpen 0:f177013dc4fc 112 Aqm1602(const Aqm1602&);
MikamiUitOpen 0:f177013dc4fc 113 Aqm1602& operator=(const Aqm1602&);
MikamiUitOpen 0:f177013dc4fc 114 };
MikamiUitOpen 0:f177013dc4fc 115 }
MikamiUitOpen 3:414f98234c94 116 #endif // AQM1602I2C_HPP