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.cpp@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 |
MikamiUitOpen | 0:d8048b36d982 | 3 | // |
MikamiUitOpen | 13:68b93c16fd1d | 4 | // 2016/04/01, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:d8048b36d982 | 5 | //------------------------------------------------------- |
MikamiUitOpen | 0:d8048b36d982 | 6 | |
MikamiUitOpen | 0:d8048b36d982 | 7 | #include "ACM1602NI.hpp" |
MikamiUitOpen | 0:d8048b36d982 | 8 | |
MikamiUitOpen | 0:d8048b36d982 | 9 | namespace Mikami |
MikamiUitOpen | 0:d8048b36d982 | 10 | { |
MikamiUitOpen | 0:d8048b36d982 | 11 | // Constructor |
MikamiUitOpen | 0:d8048b36d982 | 12 | Acm1602Ni::Acm1602Ni(PinName sda, PinName scl, uint32_t clock, |
MikamiUitOpen | 0:d8048b36d982 | 13 | bool cursor, bool blink) |
MikamiUitOpen | 0:d8048b36d982 | 14 | : i2c_(sda, scl), myI2c_((I2C_TypeDef*)NULL) |
MikamiUitOpen | 0:d8048b36d982 | 15 | { |
MikamiUitOpen | 0:d8048b36d982 | 16 | if ( ((sda == PB_9) || (sda == PB_7)) && |
MikamiUitOpen | 0:d8048b36d982 | 17 | ((scl == PB_8) || (scl == PB_6)) ) |
MikamiUitOpen | 0:d8048b36d982 | 18 | myI2c_ = (I2C_TypeDef*)I2C_1; // I2C1 will be used |
MikamiUitOpen | 0:d8048b36d982 | 19 | if ( (sda == PB_3) && (scl == PB_10) ) |
MikamiUitOpen | 0:d8048b36d982 | 20 | myI2c_ = (I2C_TypeDef*)I2C_2; // I2C2 will be used |
MikamiUitOpen | 0:d8048b36d982 | 21 | if ( ((sda == PC_9) || (sda == PB_4)) && |
MikamiUitOpen | 0:d8048b36d982 | 22 | (scl == PA_8) ) |
MikamiUitOpen | 0:d8048b36d982 | 23 | myI2c_ = (I2C_TypeDef*)I2C_3; // I2C3 will be used |
MikamiUitOpen | 13:68b93c16fd1d | 24 | |
MikamiUitOpen | 10:49e6a8f8fe4f | 25 | if (clock != 100000) i2c_.frequency(clock); |
MikamiUitOpen | 10:49e6a8f8fe4f | 26 | |
MikamiUitOpen | 10:49e6a8f8fe4f | 27 | wait_ms(40); |
MikamiUitOpen | 0:d8048b36d982 | 28 | connected_ = Clear(); // Clear display |
MikamiUitOpen | 1:7c6b2df4e60b | 29 | if (!connected_) |
MikamiUitOpen | 1:7c6b2df4e60b | 30 | { |
MikamiUitOpen | 10:49e6a8f8fe4f | 31 | fprintf(stderr, "\r\nLCD ACM1602NI not connected\r\n"); |
MikamiUitOpen | 1:7c6b2df4e60b | 32 | return; |
MikamiUitOpen | 1:7c6b2df4e60b | 33 | } |
MikamiUitOpen | 0:d8048b36d982 | 34 | |
MikamiUitOpen | 0:d8048b36d982 | 35 | WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots |
MikamiUitOpen | 0:d8048b36d982 | 36 | WriteCmd(0x0C | (cursor << 1) | blink); |
MikamiUitOpen | 0:d8048b36d982 | 37 | WriteCmd(0x06); // cursor direction: rightward |
MikamiUitOpen | 0:d8048b36d982 | 38 | } |
MikamiUitOpen | 0:d8048b36d982 | 39 | |
MikamiUitOpen | 0:d8048b36d982 | 40 | // All clear |
MikamiUitOpen | 0:d8048b36d982 | 41 | bool Acm1602Ni::Clear() |
MikamiUitOpen | 0:d8048b36d982 | 42 | { |
MikamiUitOpen | 0:d8048b36d982 | 43 | bool ok = WriteCmd(0x01); |
MikamiUitOpen | 0:d8048b36d982 | 44 | wait_ms(50); |
MikamiUitOpen | 0:d8048b36d982 | 45 | return ok; |
MikamiUitOpen | 0:d8048b36d982 | 46 | } |
MikamiUitOpen | 0:d8048b36d982 | 47 | |
MikamiUitOpen | 2:0936ba74019a | 48 | // Write string |
MikamiUitOpen | 1:7c6b2df4e60b | 49 | void Acm1602Ni::WriteString(const char str[]) |
MikamiUitOpen | 1:7c6b2df4e60b | 50 | { |
MikamiUitOpen | 1:7c6b2df4e60b | 51 | for (int n=0; n<16; n++) |
MikamiUitOpen | 1:7c6b2df4e60b | 52 | if (str[n] == 0) break; |
MikamiUitOpen | 1:7c6b2df4e60b | 53 | else WriteChar(str[n]); |
MikamiUitOpen | 1:7c6b2df4e60b | 54 | } |
MikamiUitOpen | 1:7c6b2df4e60b | 55 | |
MikamiUitOpen | 1:7c6b2df4e60b | 56 | // Write string from specified position |
MikamiUitOpen | 1:7c6b2df4e60b | 57 | void Acm1602Ni::WriteStringXY(const char str[], |
MikamiUitOpen | 6:b911485a6f4d | 58 | uint8_t x, uint8_t y) |
MikamiUitOpen | 0:d8048b36d982 | 59 | { |
MikamiUitOpen | 0:d8048b36d982 | 60 | SetXY(x, y); |
MikamiUitOpen | 1:7c6b2df4e60b | 61 | WriteString(str); |
MikamiUitOpen | 0:d8048b36d982 | 62 | } |
MikamiUitOpen | 0:d8048b36d982 | 63 | |
MikamiUitOpen | 0:d8048b36d982 | 64 | //--------------------------------------------------- |
MikamiUitOpen | 7:fd23d2941f36 | 65 | // Following member functions: private |
MikamiUitOpen | 0:d8048b36d982 | 66 | |
MikamiUitOpen | 0:d8048b36d982 | 67 | // Send command and data |
MikamiUitOpen | 0:d8048b36d982 | 68 | bool Acm1602Ni::LcdTx(uint8_t cmdData, uint8_t data) |
MikamiUitOpen | 0:d8048b36d982 | 69 | { |
MikamiUitOpen | 8:6f28524bcb29 | 70 | // Generate start condition |
MikamiUitOpen | 8:6f28524bcb29 | 71 | i2c_.start(); |
MikamiUitOpen | 8:6f28524bcb29 | 72 | |
MikamiUitOpen | 8:6f28524bcb29 | 73 | // Send slave address |
MikamiUitOpen | 8:6f28524bcb29 | 74 | TxDR(LCD_ADDRESS_); |
MikamiUitOpen | 8:6f28524bcb29 | 75 | |
MikamiUitOpen | 8:6f28524bcb29 | 76 | if (!IsTxMode()) return false; |
MikamiUitOpen | 7:fd23d2941f36 | 77 | |
MikamiUitOpen | 8:6f28524bcb29 | 78 | // Define kind of "data" in next statement |
MikamiUitOpen | 0:d8048b36d982 | 79 | TxDR(cmdData); |
MikamiUitOpen | 0:d8048b36d982 | 80 | TxDR(data); |
MikamiUitOpen | 0:d8048b36d982 | 81 | wait_us(500); // indispensable |
MikamiUitOpen | 7:fd23d2941f36 | 82 | |
MikamiUitOpen | 0:d8048b36d982 | 83 | // Generate stop condition |
MikamiUitOpen | 7:fd23d2941f36 | 84 | i2c_.stop(); |
MikamiUitOpen | 7:fd23d2941f36 | 85 | |
MikamiUitOpen | 0:d8048b36d982 | 86 | return true; |
MikamiUitOpen | 0:d8048b36d982 | 87 | } |
MikamiUitOpen | 0:d8048b36d982 | 88 | |
MikamiUitOpen | 8:6f28524bcb29 | 89 | // Check on transmitter mode |
MikamiUitOpen | 8:6f28524bcb29 | 90 | bool Acm1602Ni::IsTxMode() |
MikamiUitOpen | 0:d8048b36d982 | 91 | { |
MikamiUitOpen | 8:6f28524bcb29 | 92 | for (int n=0; n<10; n++) |
MikamiUitOpen | 0:d8048b36d982 | 93 | { |
MikamiUitOpen | 7:fd23d2941f36 | 94 | wait_us(10); |
MikamiUitOpen | 1:7c6b2df4e60b | 95 | if (CheckSR12(I2C_SR1_TXE | I2C_SR1_ADDR, |
MikamiUitOpen | 1:7c6b2df4e60b | 96 | I2C_SR2_MSL | I2C_SR2_BUSY |
MikamiUitOpen | 8:6f28524bcb29 | 97 | | I2C_SR2_TRA)) |
MikamiUitOpen | 8:6f28524bcb29 | 98 | return true; |
MikamiUitOpen | 0:d8048b36d982 | 99 | } |
MikamiUitOpen | 8:6f28524bcb29 | 100 | |
MikamiUitOpen | 8:6f28524bcb29 | 101 | return false; |
MikamiUitOpen | 0:d8048b36d982 | 102 | } |
MikamiUitOpen | 0:d8048b36d982 | 103 | } |