Library for LCD ACM1602NI connected using I2C interface on Nucleo F401/411. Nucleo F401/411RE で使える I2C 接続の LCD ACM1602NI 用のライブラリ.
Dependents: ACM1602NI_NucleoF4_Demo ACM1602NI_NucleoF4_Demo
ACM1602NI.hpp@3:8e405cedea99, 2014-12-14 (annotated)
- Committer:
- CQpub0Mikami
- Date:
- Sun Dec 14 08:19:21 2014 +0000
- Revision:
- 3:8e405cedea99
- Parent:
- 2:56a2f5e674e4
4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CQpub0Mikami | 0:ea06bd02d438 | 1 | //------------------------------------------------------- |
CQpub0Mikami | 0:ea06bd02d438 | 2 | // Class for LCD, ACM1602Ni (Header) |
CQpub0Mikami | 0:ea06bd02d438 | 3 | // |
CQpub0Mikami | 0:ea06bd02d438 | 4 | // Default pin assignments |
CQpub0Mikami | 0:ea06bd02d438 | 5 | // D14 SDA ---- to pin5 of LCD module |
CQpub0Mikami | 0:ea06bd02d438 | 6 | // D15 SCL ---- to pin4 of LCD module |
CQpub0Mikami | 0:ea06bd02d438 | 7 | // |
CQpub0Mikami | 0:ea06bd02d438 | 8 | // Assignment of I2C ports |
CQpub0Mikami | 0:ea06bd02d438 | 9 | // SDA SCL |
CQpub0Mikami | 0:ea06bd02d438 | 10 | // I2C1 PB_7 or PB_9(D14) PB_6(D10) or PB_8(D15) |
CQpub0Mikami | 0:ea06bd02d438 | 11 | // I2C2 PB_3(D3) PB_10(D6) |
CQpub0Mikami | 0:ea06bd02d438 | 12 | // I2C3 PB_4(D5) or PC_9 PA_8(D7) |
CQpub0Mikami | 0:ea06bd02d438 | 13 | // |
CQpub0Mikami | 2:56a2f5e674e4 | 14 | // 2014/12/14, Copyright (c) 2014 MIKAMI, Naoki |
CQpub0Mikami | 0:ea06bd02d438 | 15 | //------------------------------------------------------- |
CQpub0Mikami | 0:ea06bd02d438 | 16 | // I2C_TypeDef: See stm32f401xe.h on following URL |
CQpub0Mikami | 0:ea06bd02d438 | 17 | // http://mbed.org/users/mbed_official/code/mbed/file/ |
CQpub0Mikami | 0:ea06bd02d438 | 18 | // 552587b429a1/TARGET_NUCLEO_F401RE |
CQpub0Mikami | 0:ea06bd02d438 | 19 | //------------------------------------------------------- |
CQpub0Mikami | 0:ea06bd02d438 | 20 | |
CQpub0Mikami | 0:ea06bd02d438 | 21 | #ifndef ACM1602NI_HPP |
CQpub0Mikami | 0:ea06bd02d438 | 22 | #define ACM1602NI_HPP |
CQpub0Mikami | 0:ea06bd02d438 | 23 | |
CQpub0Mikami | 0:ea06bd02d438 | 24 | #include "mbed.h" |
CQpub0Mikami | 1:0a38ce51b9b8 | 25 | #include <string> |
CQpub0Mikami | 0:ea06bd02d438 | 26 | |
CQpub0Mikami | 0:ea06bd02d438 | 27 | namespace Mikami |
CQpub0Mikami | 0:ea06bd02d438 | 28 | { |
CQpub0Mikami | 0:ea06bd02d438 | 29 | class Acm1602Ni |
CQpub0Mikami | 0:ea06bd02d438 | 30 | { |
CQpub0Mikami | 0:ea06bd02d438 | 31 | public: |
CQpub0Mikami | 0:ea06bd02d438 | 32 | // Constructor |
CQpub0Mikami | 0:ea06bd02d438 | 33 | Acm1602Ni(PinName sda = D14, // SDA |
CQpub0Mikami | 0:ea06bd02d438 | 34 | PinName scl = D15, // SCL |
CQpub0Mikami | 0:ea06bd02d438 | 35 | uint32_t clock = 100000, // clock: 100 kHz |
CQpub0Mikami | 0:ea06bd02d438 | 36 | bool cursor = false, // cursor: off |
CQpub0Mikami | 0:ea06bd02d438 | 37 | bool blink = false); // blink: off |
CQpub0Mikami | 0:ea06bd02d438 | 38 | // Return false if LCD is not connected |
CQpub0Mikami | 0:ea06bd02d438 | 39 | bool GetOk() { return connected_; } |
CQpub0Mikami | 0:ea06bd02d438 | 40 | // All clear |
CQpub0Mikami | 0:ea06bd02d438 | 41 | bool Clear(); |
CQpub0Mikami | 1:0a38ce51b9b8 | 42 | |
CQpub0Mikami | 0:ea06bd02d438 | 43 | // Send command |
CQpub0Mikami | 0:ea06bd02d438 | 44 | bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); } |
CQpub0Mikami | 1:0a38ce51b9b8 | 45 | |
CQpub0Mikami | 0:ea06bd02d438 | 46 | // Write character |
CQpub0Mikami | 0:ea06bd02d438 | 47 | void WriteChar(char data) { LcdTx(0x80, data); } |
CQpub0Mikami | 0:ea06bd02d438 | 48 | // Specify display position, x: 0 - 15, y: 0, 1 |
CQpub0Mikami | 1:0a38ce51b9b8 | 49 | |
CQpub0Mikami | 0:ea06bd02d438 | 50 | void SetXY(uint8_t x = 0, uint8_t y = 0) |
CQpub0Mikami | 0:ea06bd02d438 | 51 | { WriteCmd(x + y*0x40 | 0x80);} |
CQpub0Mikami | 1:0a38ce51b9b8 | 52 | |
CQpub0Mikami | 0:ea06bd02d438 | 53 | // Write string |
CQpub0Mikami | 0:ea06bd02d438 | 54 | void WriteString(const char str[]); |
CQpub0Mikami | 1:0a38ce51b9b8 | 55 | void WriteString(const string str) { WriteString(str.c_str()); } |
CQpub0Mikami | 1:0a38ce51b9b8 | 56 | |
CQpub0Mikami | 0:ea06bd02d438 | 57 | // Write string from specified position |
CQpub0Mikami | 1:0a38ce51b9b8 | 58 | void WriteStringXY(const char str[], uint8_t x, uint8_t y); |
CQpub0Mikami | 1:0a38ce51b9b8 | 59 | void WriteStringXY(const string str, uint8_t x, uint8_t y) |
CQpub0Mikami | 1:0a38ce51b9b8 | 60 | { WriteStringXY(str.c_str(), x, y); } |
CQpub0Mikami | 1:0a38ce51b9b8 | 61 | |
CQpub0Mikami | 0:ea06bd02d438 | 62 | // Clear of specified line |
CQpub0Mikami | 0:ea06bd02d438 | 63 | void ClearLine(uint8_t line) |
CQpub0Mikami | 1:0a38ce51b9b8 | 64 | { WriteStringXY(" ", 0, line); } |
CQpub0Mikami | 0:ea06bd02d438 | 65 | |
CQpub0Mikami | 0:ea06bd02d438 | 66 | private: |
CQpub0Mikami | 0:ea06bd02d438 | 67 | // Slave address of ACM1602NI (0x50) |
CQpub0Mikami | 0:ea06bd02d438 | 68 | // left-justified 7-bit address |
CQpub0Mikami | 0:ea06bd02d438 | 69 | static const uint8_t LCD_ADDRESS_ = 0x50 << 1; |
CQpub0Mikami | 0:ea06bd02d438 | 70 | |
CQpub0Mikami | 0:ea06bd02d438 | 71 | I2C i2c_; // Object of I2C |
CQpub0Mikami | 0:ea06bd02d438 | 72 | I2C_TypeDef* myI2c_; // Pointer of I2C |
CQpub0Mikami | 0:ea06bd02d438 | 73 | |
CQpub0Mikami | 0:ea06bd02d438 | 74 | bool connected_; // false: LCD is not connected |
CQpub0Mikami | 0:ea06bd02d438 | 75 | |
CQpub0Mikami | 0:ea06bd02d438 | 76 | bool LcdTx(uint8_t cmdData, uint8_t data); |
CQpub0Mikami | 0:ea06bd02d438 | 77 | bool Start(); |
CQpub0Mikami | 0:ea06bd02d438 | 78 | |
CQpub0Mikami | 0:ea06bd02d438 | 79 | // Forbid to use copy constructor |
CQpub0Mikami | 0:ea06bd02d438 | 80 | Acm1602Ni(const Acm1602Ni&); |
CQpub0Mikami | 0:ea06bd02d438 | 81 | // Forbid to use substitution operator |
CQpub0Mikami | 0:ea06bd02d438 | 82 | Acm1602Ni& operator=(const Acm1602Ni&); |
CQpub0Mikami | 0:ea06bd02d438 | 83 | |
CQpub0Mikami | 0:ea06bd02d438 | 84 | // For check contents of SR2 |
CQpub0Mikami | 0:ea06bd02d438 | 85 | bool CheckSR2(uint16_t value) |
CQpub0Mikami | 0:ea06bd02d438 | 86 | { return value == (myI2c_->SR2 & value); } |
CQpub0Mikami | 0:ea06bd02d438 | 87 | |
CQpub0Mikami | 0:ea06bd02d438 | 88 | // For check contents of SR1 and SR2 |
CQpub0Mikami | 0:ea06bd02d438 | 89 | bool CheckSR12(uint16_t v1, uint16_t v2) |
CQpub0Mikami | 0:ea06bd02d438 | 90 | { return (v1 == (myI2c_->SR1 & v1)) && |
CQpub0Mikami | 0:ea06bd02d438 | 91 | (v2 == (myI2c_->SR2 & v2)); } |
CQpub0Mikami | 0:ea06bd02d438 | 92 | |
CQpub0Mikami | 0:ea06bd02d438 | 93 | void TxDR(uint8_t data) { myI2c_->DR = data; } |
CQpub0Mikami | 0:ea06bd02d438 | 94 | void SetCR1(uint16_t data) { myI2c_->CR1 |= data; } |
CQpub0Mikami | 0:ea06bd02d438 | 95 | }; |
CQpub0Mikami | 0:ea06bd02d438 | 96 | } |
CQpub0Mikami | 0:ea06bd02d438 | 97 | #endif // ACM1602NI_HPP |