I2C 接続の LCD AQM1602XA-RN-GBW 用のライブラリ. Library for LCD 1602XA-RN-GBW connected using I2C interface.

Dependents:   UIT2_MovingAv_Intr UIT2_VariableFIR UIT2_VowelSynthesizer UIT2_ALE_LeakyLMS ... more

Committer:
MikamiUitOpen
Date:
Sun Nov 15 06:32:29 2015 +0000
Revision:
7:5375acc9a74a
Parent:
4:c943f05b7843
Child:
8:854c244a7863
8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:f177013dc4fc 1 //-------------------------------------------------------
MikamiUitOpen 0:f177013dc4fc 2 // Class for LCD, AQM1602XA-RN-GBW
MikamiUitOpen 7:5375acc9a74a 3 // Do not use mbed Rev.109, using Nucleo-F401/441
MikamiUitOpen 0:f177013dc4fc 4 //
MikamiUitOpen 7:5375acc9a74a 5 // 2015/11/15, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:f177013dc4fc 6 //-------------------------------------------------------
MikamiUitOpen 0:f177013dc4fc 7
MikamiUitOpen 0:f177013dc4fc 8 #include "AQM1602.hpp"
MikamiUitOpen 0:f177013dc4fc 9
MikamiUitOpen 0:f177013dc4fc 10 namespace Mikami
MikamiUitOpen 0:f177013dc4fc 11 {
MikamiUitOpen 0:f177013dc4fc 12 // Constructor
MikamiUitOpen 0:f177013dc4fc 13 Aqm1602::Aqm1602(PinName sda, PinName scl, uint32_t clock,
MikamiUitOpen 0:f177013dc4fc 14 bool cursor, bool blink)
MikamiUitOpen 0:f177013dc4fc 15 : i2c_(sda, scl)
MikamiUitOpen 0:f177013dc4fc 16 {
MikamiUitOpen 0:f177013dc4fc 17 if (clock != 100000) i2c_.frequency(clock);
MikamiUitOpen 0:f177013dc4fc 18
MikamiUitOpen 7:5375acc9a74a 19 wait_ms(50);
MikamiUitOpen 7:5375acc9a74a 20 connected_ = WriteCmd(0x38);
MikamiUitOpen 3:414f98234c94 21 if (!connected_)
MikamiUitOpen 3:414f98234c94 22 {
MikamiUitOpen 3:414f98234c94 23 fprintf(stderr, "\r\nLCD AQM1602 not connected\r\n");
MikamiUitOpen 3:414f98234c94 24 return;
MikamiUitOpen 3:414f98234c94 25 }
MikamiUitOpen 7:5375acc9a74a 26 WriteCmd(0x39); // To extended command
MikamiUitOpen 7:5375acc9a74a 27 WriteCmd(0x14); // Internal OSC frequency
MikamiUitOpen 7:5375acc9a74a 28 WriteCmd(0x70 | 0x00); // Contrast set
MikamiUitOpen 7:5375acc9a74a 29 WriteCmd(0x54 | 0x02); // Power/ICON/Contrast control
MikamiUitOpen 7:5375acc9a74a 30 WriteCmd(0x6C); // Follower control
MikamiUitOpen 0:f177013dc4fc 31 wait_ms(200);
MikamiUitOpen 0:f177013dc4fc 32
MikamiUitOpen 7:5375acc9a74a 33 WriteCmd(0x01);
MikamiUitOpen 0:f177013dc4fc 34 WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots
MikamiUitOpen 0:f177013dc4fc 35 WriteCmd(0x0C | (cursor << 1) | blink);
MikamiUitOpen 0:f177013dc4fc 36 }
MikamiUitOpen 0:f177013dc4fc 37
MikamiUitOpen 0:f177013dc4fc 38 // All clear
MikamiUitOpen 7:5375acc9a74a 39 void Aqm1602::Clear()
MikamiUitOpen 0:f177013dc4fc 40 {
MikamiUitOpen 7:5375acc9a74a 41 WriteCmd(0x01);
MikamiUitOpen 7:5375acc9a74a 42 wait_ms(2);
MikamiUitOpen 0:f177013dc4fc 43 }
MikamiUitOpen 0:f177013dc4fc 44
MikamiUitOpen 0:f177013dc4fc 45 // Write string
MikamiUitOpen 0:f177013dc4fc 46 void Aqm1602::WriteString(const char str[])
MikamiUitOpen 0:f177013dc4fc 47 {
MikamiUitOpen 0:f177013dc4fc 48 for (int n=0; n<N_CHR; n++)
MikamiUitOpen 0:f177013dc4fc 49 if (str[n] == 0) break;
MikamiUitOpen 0:f177013dc4fc 50 else WriteChar(str[n]);
MikamiUitOpen 0:f177013dc4fc 51 }
MikamiUitOpen 0:f177013dc4fc 52
MikamiUitOpen 0:f177013dc4fc 53 // Write string from specified position
MikamiUitOpen 0:f177013dc4fc 54 void Aqm1602::WriteStringXY(const char str[],
MikamiUitOpen 0:f177013dc4fc 55 uint8_t x, uint8_t y)
MikamiUitOpen 0:f177013dc4fc 56 {
MikamiUitOpen 0:f177013dc4fc 57 SetXY(x, y);
MikamiUitOpen 0:f177013dc4fc 58 WriteString(str);
MikamiUitOpen 0:f177013dc4fc 59 }
MikamiUitOpen 0:f177013dc4fc 60
MikamiUitOpen 0:f177013dc4fc 61 // Clear of specified line
MikamiUitOpen 0:f177013dc4fc 62 void Aqm1602::ClearLine(uint8_t line)
MikamiUitOpen 0:f177013dc4fc 63 {
MikamiUitOpen 0:f177013dc4fc 64 SetXY(0, line);
MikamiUitOpen 0:f177013dc4fc 65 for (int n=0; n<N_CHR; n++)
MikamiUitOpen 0:f177013dc4fc 66 WriteString(" ");
MikamiUitOpen 0:f177013dc4fc 67 }
MikamiUitOpen 0:f177013dc4fc 68
MikamiUitOpen 0:f177013dc4fc 69 // Set contrast
MikamiUitOpen 0:f177013dc4fc 70 void Aqm1602::SetContrast(uint8_t c)
MikamiUitOpen 0:f177013dc4fc 71 {
MikamiUitOpen 0:f177013dc4fc 72 WriteCmd(0x39);
MikamiUitOpen 0:f177013dc4fc 73 WriteCmd(0x70 | (c & 0x0f)); // Lower 4 bits
MikamiUitOpen 0:f177013dc4fc 74 WriteCmd(0x5C | ((c >> 4) & 0x03)); // Higher 2 bits
MikamiUitOpen 0:f177013dc4fc 75 WriteCmd(0x38);
MikamiUitOpen 0:f177013dc4fc 76 }
MikamiUitOpen 0:f177013dc4fc 77
MikamiUitOpen 0:f177013dc4fc 78 //---------------------------------------------------
MikamiUitOpen 0:f177013dc4fc 79 // Following functions: private
MikamiUitOpen 0:f177013dc4fc 80
MikamiUitOpen 0:f177013dc4fc 81 // Send command and data
MikamiUitOpen 3:414f98234c94 82 bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data)
MikamiUitOpen 0:f177013dc4fc 83 {
MikamiUitOpen 0:f177013dc4fc 84 char tx[2] = { cmdData, data };
MikamiUitOpen 3:414f98234c94 85 int rt = i2c_.write(LCD_ADDRESS_, tx, 2);
MikamiUitOpen 7:5375acc9a74a 86 wait_us(30);
MikamiUitOpen 3:414f98234c94 87 return (rt == 0) ? true : false;
MikamiUitOpen 0:f177013dc4fc 88 }
MikamiUitOpen 0:f177013dc4fc 89 }
MikamiUitOpen 0:f177013dc4fc 90