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

Committer:
MikamiUitOpen
Date:
Thu Apr 16 08:49:04 2015 +0000
Revision:
9:8894909e18d7
Parent:
8:6f28524bcb29
Child:
10:49e6a8f8fe4f
Child:
11:bbf31054cfd8
10

Who changed what in which revision?

UserRevisionLine numberNew 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 9:8894909e18d7 14 // 2015/04/16, Copyright (c) 2015 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 0:d8048b36d982 40 bool GetOk() { 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 0:d8048b36d982 62 private:
MikamiUitOpen 0:d8048b36d982 63 // Slave address of ACM1602NI (0x50)
MikamiUitOpen 0:d8048b36d982 64 // left-justified 7-bit address
MikamiUitOpen 0:d8048b36d982 65 static const uint8_t LCD_ADDRESS_ = 0x50 << 1;
MikamiUitOpen 0:d8048b36d982 66
MikamiUitOpen 1:7c6b2df4e60b 67 I2C i2c_; // Object of I2C
MikamiUitOpen 1:7c6b2df4e60b 68 I2C_TypeDef* myI2c_; // Pointer of I2C
MikamiUitOpen 1:7c6b2df4e60b 69
MikamiUitOpen 1:7c6b2df4e60b 70 bool connected_; // false: LCD is not connected
MikamiUitOpen 0:d8048b36d982 71
MikamiUitOpen 0:d8048b36d982 72 // Forbid to use copy constructor
MikamiUitOpen 0:d8048b36d982 73 Acm1602Ni(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 74 // Forbid to use substitution operator
MikamiUitOpen 0:d8048b36d982 75 Acm1602Ni& operator=(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 76
MikamiUitOpen 8:6f28524bcb29 77 bool LcdTx(uint8_t cmdData, uint8_t data);
MikamiUitOpen 8:6f28524bcb29 78 bool IsTxMode();
MikamiUitOpen 9:8894909e18d7 79
MikamiUitOpen 9:8894909e18d7 80 // Send command
MikamiUitOpen 9:8894909e18d7 81 bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); }
MikamiUitOpen 9:8894909e18d7 82
MikamiUitOpen 9:8894909e18d7 83 // Write character
MikamiUitOpen 9:8894909e18d7 84 void WriteChar(char data) { LcdTx(0x80, data); }
MikamiUitOpen 8:6f28524bcb29 85
MikamiUitOpen 9:8894909e18d7 86 // For check contents of SR1 and SR2
MikamiUitOpen 1:7c6b2df4e60b 87 bool CheckSR12(uint16_t v1, uint16_t v2)
MikamiUitOpen 1:7c6b2df4e60b 88 { return (v1 == (myI2c_->SR1 & v1)) &&
MikamiUitOpen 1:7c6b2df4e60b 89 (v2 == (myI2c_->SR2 & v2)); }
MikamiUitOpen 0:d8048b36d982 90
MikamiUitOpen 0:d8048b36d982 91 void TxDR(uint8_t data) { myI2c_->DR = data; }
MikamiUitOpen 0:d8048b36d982 92 };
MikamiUitOpen 0:d8048b36d982 93 }
MikamiUitOpen 0:d8048b36d982 94 #endif // ACM1602NI_HPP