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

Committer:
CQpub0Mikami
Date:
Sun Dec 14 08:19:21 2014 +0000
Revision:
3:8e405cedea99
Parent:
2:56a2f5e674e4
4

Who changed what in which revision?

UserRevisionLine numberNew 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