An I2C text LCD library for Displaytronic ACM1602NI-FLW-FBW-M01
Dependents: ACM1602NI_Demo ROBOT_v01 ROBOT_v02 Boku-Transmit ... more
Revision 4:33a8ca14e0e0, committed 2013-12-14
- Comitter:
- takuo
- Date:
- Sat Dec 14 14:45:38 2013 +0000
- Parent:
- 3:bac80efb323e
- Child:
- 5:c1dbbc2af9dd
- Commit message:
- Fixed the documents
Changed in this revision
ACM1602NI.cpp | Show annotated file Show diff for this revision Revisions of this file |
ACM1602NI.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/ACM1602NI.cpp Mon May 13 13:04:06 2013 +0000 +++ b/ACM1602NI.cpp Sat Dec 14 14:45:38 2013 +0000 @@ -17,14 +17,16 @@ #include "mbed.h" #include "ACM1602NI.h" -#define _i2cSUCCESS 0 -#define _i2cFAILURE 1 +#define I2C_SUCCESS 0 +#define I2C_FAILURE 1 -ACM1602NI::ACM1602NI(I2C &i2c): _i2c(i2c) { +ACM1602NI::ACM1602NI(I2C &i2c): _i2c(i2c) +{ init(); } -void ACM1602NI::init() { +void ACM1602NI::init() +{ writeCommand(0x01); wait_ms(i2c_command_wait_ms); writeCommand(0x38); @@ -36,7 +38,8 @@ locate(0, 0); } -int ACM1602NI::writeBytes(const char *data, int length, bool repeated) { +int ACM1602NI::writeBytes(const char *data, int length, bool repeated) +{ wait_us(i2c_bit_wait_us); _i2c.start(); for (int i = 0; i < length; i++) { @@ -44,39 +47,41 @@ if (_i2c.write(data[i]) != 1) { wait_us(i2c_bit_wait_us); _i2c.stop(); - return _i2cFAILURE; + return I2C_FAILURE; } } if (!repeated) { wait_us(i2c_bit_wait_us); _i2c.stop(); } - return _i2cSUCCESS; + return I2C_SUCCESS; } -void ACM1602NI::character(int column, int row, int c) { - int a = address(column, row); - writeCommand(a); +void ACM1602NI::character(int column, int row, int c) +{ + writeCommand(address(column, row)); writeData(c); } -void ACM1602NI::cls() { +void ACM1602NI::cls() +{ writeCommand(0x01); wait_ms(i2c_command_wait_ms); locate(0, 0); } -void ACM1602NI::locate(int column, int row) { +void ACM1602NI::locate(int column, int row) +{ _column = column; _row = row; } -int ACM1602NI::_putc(int value) { +int ACM1602NI::_putc(int value) +{ if (value == '\n') { _column = 0; _row = (_row + 1) % rows(); - } - else { + } else { character(_column, _row, value); _column++; if (_column >= columns()) { @@ -87,29 +92,34 @@ return value; } -int ACM1602NI::_getc() { +int ACM1602NI::_getc() +{ return -1; } -void ACM1602NI::writeCommand(int command) { +void ACM1602NI::writeCommand(int command) +{ char bs[3] = { i2c_addr, 0x00, command }; writeBytes(bs, 3); } -void ACM1602NI::writeData(int data) { +void ACM1602NI::writeData(int data) +{ char bs[3] = { i2c_addr, 0x80, data }; writeBytes(bs, 3); } -int ACM1602NI::address(int column, int row) { +int ACM1602NI::address(int column, int row) +{ return 0x80 + row * 0x40 + column; } -int ACM1602NI::columns() { +int ACM1602NI::columns() +{ return display_columns; } -int ACM1602NI::rows() { +int ACM1602NI::rows() +{ return display_rows; } -
--- a/ACM1602NI.h Mon May 13 13:04:06 2013 +0000 +++ b/ACM1602NI.h Sat Dec 14 14:45:38 2013 +0000 @@ -20,17 +20,21 @@ #include "mbed.h" /** An I2C text LCD library for Displaytronic ACM1602NI-FLW-FBW-M01. + * The device does not work with default I2C library due to its slow I2C responce. + * This library adds some extra waits so that the device can answer to the I2C commands. * The interface is basically the same as TextLCD by Simon Ford. * * @code * #include "mbed.h" * #include "ACM1602NI.h" - * + * + * // p9: sda, p10: scl * I2C i2c(p9, p10); * ACM1602NI lcd(i2c); * * int main() { * lcd.printf("Hello, World!\n"); + * lcd.printf("ACM1602NI\n"); * } * @endcode */