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:
Sat Nov 08 09:28:45 2014 +0000
Revision:
1:7c6b2df4e60b
Parent:
0:d8048b36d982
Child:
2:0936ba74019a
2

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 1:7c6b2df4e60b 14 // 2014/10/14, Copyright (c) 2014 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 0:d8048b36d982 25
MikamiUitOpen 0:d8048b36d982 26 namespace Mikami
MikamiUitOpen 0:d8048b36d982 27 {
MikamiUitOpen 0:d8048b36d982 28 class Acm1602Ni
MikamiUitOpen 0:d8048b36d982 29 {
MikamiUitOpen 0:d8048b36d982 30 public:
MikamiUitOpen 0:d8048b36d982 31 // Constructor
MikamiUitOpen 0:d8048b36d982 32 Acm1602Ni(PinName sda = D14, // SDA
MikamiUitOpen 0:d8048b36d982 33 PinName scl = D15, // SCL
MikamiUitOpen 0:d8048b36d982 34 uint32_t clock = 100000, // clock: 100 kHz
MikamiUitOpen 0:d8048b36d982 35 bool cursor = false, // cursor: off
MikamiUitOpen 0:d8048b36d982 36 bool blink = false); // blink: off
MikamiUitOpen 0:d8048b36d982 37 // Return false if LCD is not connected
MikamiUitOpen 0:d8048b36d982 38 bool GetOk() { return connected_; }
MikamiUitOpen 0:d8048b36d982 39 // All clear
MikamiUitOpen 0:d8048b36d982 40 bool Clear();
MikamiUitOpen 0:d8048b36d982 41 // Send command
MikamiUitOpen 0:d8048b36d982 42 bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); }
MikamiUitOpen 0:d8048b36d982 43 // Write character
MikamiUitOpen 0:d8048b36d982 44 void WriteChar(char data) { LcdTx(0x80, data); }
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 1:7c6b2df4e60b 48 // Write string
MikamiUitOpen 1:7c6b2df4e60b 49 void WriteString(const char str[]);
MikamiUitOpen 0:d8048b36d982 50 // Write string from specified position
MikamiUitOpen 1:7c6b2df4e60b 51 void WriteStringXY(const char str[], uint8_t x, uint8_t);
MikamiUitOpen 0:d8048b36d982 52 // Clear of specified line
MikamiUitOpen 0:d8048b36d982 53 void ClearLine(uint8_t line)
MikamiUitOpen 1:7c6b2df4e60b 54 { WriteStringXY(" ", 0, line); }
MikamiUitOpen 0:d8048b36d982 55
MikamiUitOpen 0:d8048b36d982 56 private:
MikamiUitOpen 0:d8048b36d982 57 // Slave address of ACM1602NI (0x50)
MikamiUitOpen 0:d8048b36d982 58 // left-justified 7-bit address
MikamiUitOpen 0:d8048b36d982 59 static const uint8_t LCD_ADDRESS_ = 0x50 << 1;
MikamiUitOpen 0:d8048b36d982 60
MikamiUitOpen 1:7c6b2df4e60b 61 I2C i2c_; // Object of I2C
MikamiUitOpen 1:7c6b2df4e60b 62 I2C_TypeDef* myI2c_; // Pointer of I2C
MikamiUitOpen 1:7c6b2df4e60b 63
MikamiUitOpen 1:7c6b2df4e60b 64 bool connected_; // false: LCD is not connected
MikamiUitOpen 0:d8048b36d982 65
MikamiUitOpen 0:d8048b36d982 66 bool LcdTx(uint8_t cmdData, uint8_t data);
MikamiUitOpen 0:d8048b36d982 67 bool Start();
MikamiUitOpen 0:d8048b36d982 68
MikamiUitOpen 0:d8048b36d982 69 // Forbid to use copy constructor
MikamiUitOpen 0:d8048b36d982 70 Acm1602Ni(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 71 // Forbid to use substitution operator
MikamiUitOpen 0:d8048b36d982 72 Acm1602Ni& operator=(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 73
MikamiUitOpen 1:7c6b2df4e60b 74 // For check contents of SR2
MikamiUitOpen 1:7c6b2df4e60b 75 bool CheckSR2(uint16_t value)
MikamiUitOpen 1:7c6b2df4e60b 76 { return value == (myI2c_->SR2 & value); }
MikamiUitOpen 1:7c6b2df4e60b 77
MikamiUitOpen 1:7c6b2df4e60b 78 // For check contents of SR1 and SR2
MikamiUitOpen 1:7c6b2df4e60b 79 bool CheckSR12(uint16_t v1, uint16_t v2)
MikamiUitOpen 1:7c6b2df4e60b 80 { return (v1 == (myI2c_->SR1 & v1)) &&
MikamiUitOpen 1:7c6b2df4e60b 81 (v2 == (myI2c_->SR2 & v2)); }
MikamiUitOpen 0:d8048b36d982 82
MikamiUitOpen 0:d8048b36d982 83 void TxDR(uint8_t data) { myI2c_->DR = data; }
MikamiUitOpen 0:d8048b36d982 84 void SetCR1(uint16_t data) { myI2c_->CR1 |= data; }
MikamiUitOpen 0:d8048b36d982 85 };
MikamiUitOpen 0:d8048b36d982 86 }
MikamiUitOpen 0:d8048b36d982 87 #endif // ACM1602NI_HPP