Class library for LCD character display ACM1602NI using I2C on Nucleo. Nucleo 用 I2C 接続の LCD キャラクタ・ディスプレー ACM1602Ni 用のクラス・ライブラリ.
Dependents: UIT2_VariableFIR_LPFHPF UIT2_VariableFIR_LPF UIT2_InputSW_LCD ADDA_Prototype_PollingSW ... more
ACM1602NI.hpp@13:68b93c16fd1d, 2016-04-01 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Apr 01 04:28:15 2016 +0000
- Revision:
- 13:68b93c16fd1d
- Parent:
- 12:b7c761c179c9
14
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:d8048b36d982 | 1 | //------------------------------------------------------- |
MikamiUitOpen | 1:7c6b2df4e60b | 2 | // Class for LCD, ACM1602Ni (Header) |
MikamiUitOpen | 0:d8048b36d982 | 3 | // |
MikamiUitOpen | 0:d8048b36d982 | 4 | // Default pin assignments |
MikamiUitOpen | 0:d8048b36d982 | 5 | // D14 SDA ---- to pin5 of LCD module |
MikamiUitOpen | 0:d8048b36d982 | 6 | // D15 SCL ---- to pin4 of LCD module |
MikamiUitOpen | 0:d8048b36d982 | 7 | // |
MikamiUitOpen | 0:d8048b36d982 | 8 | // Assignment of I2C ports |
MikamiUitOpen | 0:d8048b36d982 | 9 | // SDA SCL |
MikamiUitOpen | 0:d8048b36d982 | 10 | // I2C1 PB_7 or PB_9(D14) PB_6(D10) or PB_8(D15) |
MikamiUitOpen | 0:d8048b36d982 | 11 | // I2C2 PB_3(D3) PB_10(D6) |
MikamiUitOpen | 0:d8048b36d982 | 12 | // I2C3 PB_4(D5) or PC_9 PA_8(D7) |
MikamiUitOpen | 0:d8048b36d982 | 13 | // |
MikamiUitOpen | 13:68b93c16fd1d | 14 | // 2016/04/01, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:d8048b36d982 | 15 | //------------------------------------------------------- |
MikamiUitOpen | 0:d8048b36d982 | 16 | // I2C_TypeDef: See stm32f401xe.h on following URL |
MikamiUitOpen | 0:d8048b36d982 | 17 | // http://mbed.org/users/mbed_official/code/mbed/file/ |
MikamiUitOpen | 0:d8048b36d982 | 18 | // 552587b429a1/TARGET_NUCLEO_F401RE |
MikamiUitOpen | 0:d8048b36d982 | 19 | //------------------------------------------------------- |
MikamiUitOpen | 0:d8048b36d982 | 20 | |
MikamiUitOpen | 0:d8048b36d982 | 21 | #ifndef ACM1602NI_HPP |
MikamiUitOpen | 0:d8048b36d982 | 22 | #define ACM1602NI_HPP |
MikamiUitOpen | 0:d8048b36d982 | 23 | |
MikamiUitOpen | 0:d8048b36d982 | 24 | #include "mbed.h" |
MikamiUitOpen | 5:b4f73f5851fb | 25 | #include <string> |
MikamiUitOpen | 0:d8048b36d982 | 26 | |
MikamiUitOpen | 0:d8048b36d982 | 27 | namespace Mikami |
MikamiUitOpen | 0:d8048b36d982 | 28 | { |
MikamiUitOpen | 0:d8048b36d982 | 29 | class Acm1602Ni |
MikamiUitOpen | 0:d8048b36d982 | 30 | { |
MikamiUitOpen | 0:d8048b36d982 | 31 | public: |
MikamiUitOpen | 0:d8048b36d982 | 32 | // Constructor |
MikamiUitOpen | 0:d8048b36d982 | 33 | Acm1602Ni(PinName sda = D14, // SDA |
MikamiUitOpen | 0:d8048b36d982 | 34 | PinName scl = D15, // SCL |
MikamiUitOpen | 0:d8048b36d982 | 35 | uint32_t clock = 100000, // clock: 100 kHz |
MikamiUitOpen | 0:d8048b36d982 | 36 | bool cursor = false, // cursor: off |
MikamiUitOpen | 0:d8048b36d982 | 37 | bool blink = false); // blink: off |
MikamiUitOpen | 7:fd23d2941f36 | 38 | |
MikamiUitOpen | 0:d8048b36d982 | 39 | // Return false if LCD is not connected |
MikamiUitOpen | 10:49e6a8f8fe4f | 40 | bool IsConnected() { return connected_; } |
MikamiUitOpen | 7:fd23d2941f36 | 41 | |
MikamiUitOpen | 0:d8048b36d982 | 42 | // All clear |
MikamiUitOpen | 0:d8048b36d982 | 43 | bool Clear(); |
MikamiUitOpen | 5:b4f73f5851fb | 44 | |
MikamiUitOpen | 0:d8048b36d982 | 45 | // Specify display position, x: 0 - 15, y: 0, 1 |
MikamiUitOpen | 0:d8048b36d982 | 46 | void SetXY(uint8_t x = 0, uint8_t y = 0) |
MikamiUitOpen | 0:d8048b36d982 | 47 | { WriteCmd(x + y*0x40 | 0x80);} |
MikamiUitOpen | 5:b4f73f5851fb | 48 | |
MikamiUitOpen | 1:7c6b2df4e60b | 49 | // Write string |
MikamiUitOpen | 1:7c6b2df4e60b | 50 | void WriteString(const char str[]); |
MikamiUitOpen | 5:b4f73f5851fb | 51 | void WriteString(const string str) { WriteString(str.c_str()); } |
MikamiUitOpen | 5:b4f73f5851fb | 52 | |
MikamiUitOpen | 0:d8048b36d982 | 53 | // Write string from specified position |
MikamiUitOpen | 4:fac0c70570b6 | 54 | void WriteStringXY(const char str[], uint8_t x, uint8_t y); |
MikamiUitOpen | 5:b4f73f5851fb | 55 | void WriteStringXY(const string str, uint8_t x, uint8_t y) |
MikamiUitOpen | 5:b4f73f5851fb | 56 | { WriteStringXY(str.c_str(), x, y); } |
MikamiUitOpen | 5:b4f73f5851fb | 57 | |
MikamiUitOpen | 0:d8048b36d982 | 58 | // Clear of specified line |
MikamiUitOpen | 0:d8048b36d982 | 59 | void ClearLine(uint8_t line) |
MikamiUitOpen | 3:0d8a7f5abce7 | 60 | { WriteStringXY(" ", 0, line); } |
MikamiUitOpen | 0:d8048b36d982 | 61 | |
MikamiUitOpen | 13:68b93c16fd1d | 62 | // Write numerical value |
MikamiUitOpen | 13:68b93c16fd1d | 63 | template <typename T> void WriteValue(const char fmt[], T value) |
MikamiUitOpen | 13:68b93c16fd1d | 64 | { |
MikamiUitOpen | 13:68b93c16fd1d | 65 | char str[17]; |
MikamiUitOpen | 13:68b93c16fd1d | 66 | sprintf(str, fmt, value); |
MikamiUitOpen | 13:68b93c16fd1d | 67 | WriteString(str); |
MikamiUitOpen | 13:68b93c16fd1d | 68 | } |
MikamiUitOpen | 13:68b93c16fd1d | 69 | |
MikamiUitOpen | 13:68b93c16fd1d | 70 | // Write numerical value from specified position |
MikamiUitOpen | 13:68b93c16fd1d | 71 | template <typename T> |
MikamiUitOpen | 13:68b93c16fd1d | 72 | void WriteValueXY(const char fmt[], T value, uint8_t x, uint8_t y) |
MikamiUitOpen | 13:68b93c16fd1d | 73 | { |
MikamiUitOpen | 13:68b93c16fd1d | 74 | SetXY(x, y); |
MikamiUitOpen | 13:68b93c16fd1d | 75 | WriteValue(fmt, value); |
MikamiUitOpen | 13:68b93c16fd1d | 76 | } |
MikamiUitOpen | 13:68b93c16fd1d | 77 | |
MikamiUitOpen | 0:d8048b36d982 | 78 | private: |
MikamiUitOpen | 0:d8048b36d982 | 79 | // Slave address of ACM1602NI (0x50) |
MikamiUitOpen | 0:d8048b36d982 | 80 | // left-justified 7-bit address |
MikamiUitOpen | 0:d8048b36d982 | 81 | static const uint8_t LCD_ADDRESS_ = 0x50 << 1; |
MikamiUitOpen | 0:d8048b36d982 | 82 | |
MikamiUitOpen | 1:7c6b2df4e60b | 83 | I2C i2c_; // Object of I2C |
MikamiUitOpen | 1:7c6b2df4e60b | 84 | I2C_TypeDef* myI2c_; // Pointer of I2C |
MikamiUitOpen | 1:7c6b2df4e60b | 85 | |
MikamiUitOpen | 1:7c6b2df4e60b | 86 | bool connected_; // false: LCD is not connected |
MikamiUitOpen | 0:d8048b36d982 | 87 | |
MikamiUitOpen | 0:d8048b36d982 | 88 | // Forbid to use copy constructor |
MikamiUitOpen | 0:d8048b36d982 | 89 | Acm1602Ni(const Acm1602Ni&); |
MikamiUitOpen | 0:d8048b36d982 | 90 | // Forbid to use substitution operator |
MikamiUitOpen | 0:d8048b36d982 | 91 | Acm1602Ni& operator=(const Acm1602Ni&); |
MikamiUitOpen | 0:d8048b36d982 | 92 | |
MikamiUitOpen | 8:6f28524bcb29 | 93 | bool LcdTx(uint8_t cmdData, uint8_t data); |
MikamiUitOpen | 8:6f28524bcb29 | 94 | bool IsTxMode(); |
MikamiUitOpen | 9:8894909e18d7 | 95 | |
MikamiUitOpen | 9:8894909e18d7 | 96 | // Send command |
MikamiUitOpen | 9:8894909e18d7 | 97 | bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); } |
MikamiUitOpen | 9:8894909e18d7 | 98 | |
MikamiUitOpen | 9:8894909e18d7 | 99 | // Write character |
MikamiUitOpen | 9:8894909e18d7 | 100 | void WriteChar(char data) { LcdTx(0x80, data); } |
MikamiUitOpen | 8:6f28524bcb29 | 101 | |
MikamiUitOpen | 9:8894909e18d7 | 102 | // For check contents of SR1 and SR2 |
MikamiUitOpen | 1:7c6b2df4e60b | 103 | bool CheckSR12(uint16_t v1, uint16_t v2) |
MikamiUitOpen | 1:7c6b2df4e60b | 104 | { return (v1 == (myI2c_->SR1 & v1)) && |
MikamiUitOpen | 1:7c6b2df4e60b | 105 | (v2 == (myI2c_->SR2 & v2)); } |
MikamiUitOpen | 0:d8048b36d982 | 106 | |
MikamiUitOpen | 0:d8048b36d982 | 107 | void TxDR(uint8_t data) { myI2c_->DR = data; } |
MikamiUitOpen | 0:d8048b36d982 | 108 | }; |
MikamiUitOpen | 0:d8048b36d982 | 109 | } |
MikamiUitOpen | 0:d8048b36d982 | 110 | #endif // ACM1602NI_HPP |