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
Diff: ACM1602NI.hpp
- Revision:
- 0:d8048b36d982
- Child:
- 1:7c6b2df4e60b
diff -r 000000000000 -r d8048b36d982 ACM1602NI.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ACM1602NI.hpp Mon Oct 20 03:01:24 2014 +0000 @@ -0,0 +1,85 @@ +//------------------------------------------------------- +// Class for LCD, ACM1602NI (Header) +// +// Default pin assignments +// D14 SDA ---- to pin5 of LCD module +// D15 SCL ---- to pin4 of LCD module +// +// Assignment of I2C ports +// SDA SCL +// I2C1 PB_7 or PB_9(D14) PB_6(D10) or PB_8(D15) +// I2C2 PB_3(D3) PB_10(D6) +// I2C3 PB_4(D5) or PC_9 PA_8(D7) +// +// 2014/09/13, Copyright (c) 2014 MIKAMI, Naoki +//------------------------------------------------------- +// I2C_TypeDef: See stm32f401xe.h on following URL +// http://mbed.org/users/mbed_official/code/mbed/file/ +// 552587b429a1/TARGET_NUCLEO_F401RE +//------------------------------------------------------- + +#ifndef ACM1602NI_HPP +#define ACM1602NI_HPP + +#include "mbed.h" + +namespace Mikami +{ + class Acm1602Ni + { + public: + // Constructor + Acm1602Ni(PinName sda = D14, // SDA + PinName scl = D15, // SCL + uint32_t clock = 100000, // clock: 100 kHz + bool cursor = false, // cursor: off + bool blink = false); // blink: off + // Return false if LCD is not connected + bool GetOk() { return connected_; } + // All clear + bool Clear(); + // Send command + bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); } + // Write character + void WriteChar(char data) { LcdTx(0x80, data); } + // Specify display position, x: 0 - 15, y: 0, 1 + void SetXY(uint8_t x = 0, uint8_t y = 0) + { WriteCmd(x + y*0x40 | 0x80);} + // Write string from specified position + void WriteString(const char str[], + uint8_t x = 0, uint8_t y = 0); + // Clear of specified line + void ClearLine(uint8_t line) + { WriteString(" ", 0, line); } + + private: + // Object of I2C + I2C i2c_; + + // Slave address of ACM1602NI (0x50) + // left-justified 7-bit address + static const uint8_t LCD_ADDRESS_ = 0x50 << 1; + + // Set false if LCD is not connected + bool connected_; + + // Pointer of I2C + I2C_TypeDef* myI2c_; + + bool LcdTx(uint8_t cmdData, uint8_t data); + bool Start(); + + // Forbid to use copy constructor + Acm1602Ni(const Acm1602Ni&); + // Forbid to use substitution operator + Acm1602Ni& operator=(const Acm1602Ni&); + + // For check contents of register + bool Check(uint32_t rg, uint16_t value) + { return value == (rg & value); } + + void TxDR(uint8_t data) { myI2c_->DR = data; } + void SetCR1(uint16_t data) { myI2c_->CR1 |= data; } + }; +} +#endif // ACM1602NI_HPP