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:
Sun Dec 14 07:43:01 2014 +0000
Revision:
6:b911485a6f4d
Parent:
5:b4f73f5851fb
Child:
7:fd23d2941f36
7

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