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 Mar 26 01:34:27 2015 +0000
Revision:
8:6f28524bcb29
Parent:
7:fd23d2941f36
Child:
9:8894909e18d7
9

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 8:6f28524bcb29 14 // 2015/03/26, 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 // Send command
MikamiUitOpen 0:d8048b36d982 46 bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); }
MikamiUitOpen 5:b4f73f5851fb 47
MikamiUitOpen 0:d8048b36d982 48 // Write character
MikamiUitOpen 0:d8048b36d982 49 void WriteChar(char data) { LcdTx(0x80, data); }
MikamiUitOpen 7:fd23d2941f36 50
MikamiUitOpen 0:d8048b36d982 51 // Specify display position, x: 0 - 15, y: 0, 1
MikamiUitOpen 0:d8048b36d982 52 void SetXY(uint8_t x = 0, uint8_t y = 0)
MikamiUitOpen 0:d8048b36d982 53 { WriteCmd(x + y*0x40 | 0x80);}
MikamiUitOpen 5:b4f73f5851fb 54
MikamiUitOpen 1:7c6b2df4e60b 55 // Write string
MikamiUitOpen 1:7c6b2df4e60b 56 void WriteString(const char str[]);
MikamiUitOpen 5:b4f73f5851fb 57 void WriteString(const string str) { WriteString(str.c_str()); }
MikamiUitOpen 5:b4f73f5851fb 58
MikamiUitOpen 0:d8048b36d982 59 // Write string from specified position
MikamiUitOpen 4:fac0c70570b6 60 void WriteStringXY(const char str[], uint8_t x, uint8_t y);
MikamiUitOpen 5:b4f73f5851fb 61 void WriteStringXY(const string str, uint8_t x, uint8_t y)
MikamiUitOpen 5:b4f73f5851fb 62 { WriteStringXY(str.c_str(), x, y); }
MikamiUitOpen 5:b4f73f5851fb 63
MikamiUitOpen 0:d8048b36d982 64 // Clear of specified line
MikamiUitOpen 0:d8048b36d982 65 void ClearLine(uint8_t line)
MikamiUitOpen 3:0d8a7f5abce7 66 { WriteStringXY(" ", 0, line); }
MikamiUitOpen 0:d8048b36d982 67
MikamiUitOpen 0:d8048b36d982 68 private:
MikamiUitOpen 0:d8048b36d982 69 // Slave address of ACM1602NI (0x50)
MikamiUitOpen 0:d8048b36d982 70 // left-justified 7-bit address
MikamiUitOpen 0:d8048b36d982 71 static const uint8_t LCD_ADDRESS_ = 0x50 << 1;
MikamiUitOpen 0:d8048b36d982 72
MikamiUitOpen 1:7c6b2df4e60b 73 I2C i2c_; // Object of I2C
MikamiUitOpen 1:7c6b2df4e60b 74 I2C_TypeDef* myI2c_; // Pointer of I2C
MikamiUitOpen 1:7c6b2df4e60b 75
MikamiUitOpen 1:7c6b2df4e60b 76 bool connected_; // false: LCD is not connected
MikamiUitOpen 0:d8048b36d982 77
MikamiUitOpen 0:d8048b36d982 78 // Forbid to use copy constructor
MikamiUitOpen 0:d8048b36d982 79 Acm1602Ni(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 80 // Forbid to use substitution operator
MikamiUitOpen 0:d8048b36d982 81 Acm1602Ni& operator=(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 82
MikamiUitOpen 8:6f28524bcb29 83 bool LcdTx(uint8_t cmdData, uint8_t data);
MikamiUitOpen 8:6f28524bcb29 84 bool IsTxMode();
MikamiUitOpen 8:6f28524bcb29 85
MikamiUitOpen 1:7c6b2df4e60b 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