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:
Mon Oct 20 03:01:24 2014 +0000
Revision:
0:d8048b36d982
Child:
1:7c6b2df4e60b
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:d8048b36d982 1 //-------------------------------------------------------
MikamiUitOpen 0:d8048b36d982 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 0:d8048b36d982 14 // 2014/09/13, 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 0:d8048b36d982 48 // Write string from specified position
MikamiUitOpen 0:d8048b36d982 49 void WriteString(const char str[],
MikamiUitOpen 0:d8048b36d982 50 uint8_t x = 0, uint8_t y = 0);
MikamiUitOpen 0:d8048b36d982 51 // Clear of specified line
MikamiUitOpen 0:d8048b36d982 52 void ClearLine(uint8_t line)
MikamiUitOpen 0:d8048b36d982 53 { WriteString(" ", 0, line); }
MikamiUitOpen 0:d8048b36d982 54
MikamiUitOpen 0:d8048b36d982 55 private:
MikamiUitOpen 0:d8048b36d982 56 // Object of I2C
MikamiUitOpen 0:d8048b36d982 57 I2C i2c_;
MikamiUitOpen 0:d8048b36d982 58
MikamiUitOpen 0:d8048b36d982 59 // Slave address of ACM1602NI (0x50)
MikamiUitOpen 0:d8048b36d982 60 // left-justified 7-bit address
MikamiUitOpen 0:d8048b36d982 61 static const uint8_t LCD_ADDRESS_ = 0x50 << 1;
MikamiUitOpen 0:d8048b36d982 62
MikamiUitOpen 0:d8048b36d982 63 // Set false if LCD is not connected
MikamiUitOpen 0:d8048b36d982 64 bool connected_;
MikamiUitOpen 0:d8048b36d982 65
MikamiUitOpen 0:d8048b36d982 66 // Pointer of I2C
MikamiUitOpen 0:d8048b36d982 67 I2C_TypeDef* myI2c_;
MikamiUitOpen 0:d8048b36d982 68
MikamiUitOpen 0:d8048b36d982 69 bool LcdTx(uint8_t cmdData, uint8_t data);
MikamiUitOpen 0:d8048b36d982 70 bool Start();
MikamiUitOpen 0:d8048b36d982 71
MikamiUitOpen 0:d8048b36d982 72 // Forbid to use copy constructor
MikamiUitOpen 0:d8048b36d982 73 Acm1602Ni(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 74 // Forbid to use substitution operator
MikamiUitOpen 0:d8048b36d982 75 Acm1602Ni& operator=(const Acm1602Ni&);
MikamiUitOpen 0:d8048b36d982 76
MikamiUitOpen 0:d8048b36d982 77 // For check contents of register
MikamiUitOpen 0:d8048b36d982 78 bool Check(uint32_t rg, uint16_t value)
MikamiUitOpen 0:d8048b36d982 79 { return value == (rg & value); }
MikamiUitOpen 0:d8048b36d982 80
MikamiUitOpen 0:d8048b36d982 81 void TxDR(uint8_t data) { myI2c_->DR = data; }
MikamiUitOpen 0:d8048b36d982 82 void SetCR1(uint16_t data) { myI2c_->CR1 |= data; }
MikamiUitOpen 0:d8048b36d982 83 };
MikamiUitOpen 0:d8048b36d982 84 }
MikamiUitOpen 0:d8048b36d982 85 #endif // ACM1602NI_HPP