An I2C text LCD library for Displaytronic ACM1602NI-FLW-FBW-M01

Dependents:   ACM1602NI_Demo ROBOT_v01 ROBOT_v02 Boku-Transmit ... more

Committer:
takuo
Date:
Tue Jan 14 02:16:15 2014 +0000
Revision:
5:c1dbbc2af9dd
Parent:
4:33a8ca14e0e0
Child:
7:728c03b52b79
Added a constructor that takes I2C pins instead of I2C object.; The init() method is now public.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takuo 3:bac80efb323e 1 /* An I2C text LCD library for Displaytronic ACM1602NI-FLW-FBW-M01
takuo 3:bac80efb323e 2 * Copyright 2013, Takuo WATANABE (wtakuo)
takuo 1:84527dcd3fcc 3 *
takuo 1:84527dcd3fcc 4 * Licensed under the Apache License, Version 2.0 (the "License");
takuo 1:84527dcd3fcc 5 * you may not use this file except in compliance with the License.
takuo 1:84527dcd3fcc 6 * You may obtain a copy of the License at
takuo 1:84527dcd3fcc 7 *
takuo 1:84527dcd3fcc 8 * http://www.apache.org/licenses/LICENSE-2.0
takuo 1:84527dcd3fcc 9 *
takuo 1:84527dcd3fcc 10 * Unless required by applicable law or agreed to in writing, software
takuo 1:84527dcd3fcc 11 * distributed under the License is distributed on an "AS IS" BASIS,
takuo 1:84527dcd3fcc 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
takuo 1:84527dcd3fcc 13 * See the License for the specific language governing permissions and
takuo 1:84527dcd3fcc 14 * limitations under the License.
takuo 1:84527dcd3fcc 15 */
takuo 1:84527dcd3fcc 16
takuo 0:aac87cbfc229 17 #include "mbed.h"
takuo 0:aac87cbfc229 18 #include "ACM1602NI.h"
takuo 0:aac87cbfc229 19
takuo 4:33a8ca14e0e0 20 #define I2C_SUCCESS 0
takuo 4:33a8ca14e0e0 21 #define I2C_FAILURE 1
takuo 0:aac87cbfc229 22
takuo 5:c1dbbc2af9dd 23 ACM1602NI::ACM1602NI(PinName sda, PinName scl) : _i2c(sda, scl)
takuo 5:c1dbbc2af9dd 24 {
takuo 5:c1dbbc2af9dd 25 init();
takuo 5:c1dbbc2af9dd 26 }
takuo 5:c1dbbc2af9dd 27
takuo 5:c1dbbc2af9dd 28 ACM1602NI::ACM1602NI(I2C &i2c) : _i2c(i2c)
takuo 4:33a8ca14e0e0 29 {
takuo 0:aac87cbfc229 30 init();
takuo 0:aac87cbfc229 31 }
takuo 0:aac87cbfc229 32
takuo 4:33a8ca14e0e0 33 void ACM1602NI::init()
takuo 4:33a8ca14e0e0 34 {
takuo 0:aac87cbfc229 35 writeCommand(0x01);
takuo 0:aac87cbfc229 36 wait_ms(i2c_command_wait_ms);
takuo 0:aac87cbfc229 37 writeCommand(0x38);
takuo 0:aac87cbfc229 38 wait_ms(i2c_command_wait_ms);
takuo 0:aac87cbfc229 39 writeCommand(0x0f);
takuo 0:aac87cbfc229 40 wait_ms(i2c_command_wait_ms);
takuo 0:aac87cbfc229 41 writeCommand(0x06);
takuo 0:aac87cbfc229 42 wait_ms(i2c_command_wait_ms);
takuo 0:aac87cbfc229 43 locate(0, 0);
takuo 0:aac87cbfc229 44 }
takuo 0:aac87cbfc229 45
takuo 4:33a8ca14e0e0 46 int ACM1602NI::writeBytes(const char *data, int length, bool repeated)
takuo 4:33a8ca14e0e0 47 {
takuo 0:aac87cbfc229 48 wait_us(i2c_bit_wait_us);
takuo 0:aac87cbfc229 49 _i2c.start();
takuo 0:aac87cbfc229 50 for (int i = 0; i < length; i++) {
takuo 0:aac87cbfc229 51 wait_us(i2c_bit_wait_us);
takuo 0:aac87cbfc229 52 if (_i2c.write(data[i]) != 1) {
takuo 0:aac87cbfc229 53 wait_us(i2c_bit_wait_us);
takuo 0:aac87cbfc229 54 _i2c.stop();
takuo 4:33a8ca14e0e0 55 return I2C_FAILURE;
takuo 0:aac87cbfc229 56 }
takuo 0:aac87cbfc229 57 }
takuo 0:aac87cbfc229 58 if (!repeated) {
takuo 0:aac87cbfc229 59 wait_us(i2c_bit_wait_us);
takuo 0:aac87cbfc229 60 _i2c.stop();
takuo 0:aac87cbfc229 61 }
takuo 4:33a8ca14e0e0 62 return I2C_SUCCESS;
takuo 0:aac87cbfc229 63 }
takuo 0:aac87cbfc229 64
takuo 4:33a8ca14e0e0 65 void ACM1602NI::character(int column, int row, int c)
takuo 4:33a8ca14e0e0 66 {
takuo 4:33a8ca14e0e0 67 writeCommand(address(column, row));
takuo 0:aac87cbfc229 68 writeData(c);
takuo 0:aac87cbfc229 69 }
takuo 0:aac87cbfc229 70
takuo 4:33a8ca14e0e0 71 void ACM1602NI::cls()
takuo 4:33a8ca14e0e0 72 {
takuo 0:aac87cbfc229 73 writeCommand(0x01);
takuo 0:aac87cbfc229 74 wait_ms(i2c_command_wait_ms);
takuo 0:aac87cbfc229 75 locate(0, 0);
takuo 0:aac87cbfc229 76 }
takuo 0:aac87cbfc229 77
takuo 4:33a8ca14e0e0 78 void ACM1602NI::locate(int column, int row)
takuo 4:33a8ca14e0e0 79 {
takuo 0:aac87cbfc229 80 _column = column;
takuo 0:aac87cbfc229 81 _row = row;
takuo 0:aac87cbfc229 82 }
takuo 0:aac87cbfc229 83
takuo 4:33a8ca14e0e0 84 int ACM1602NI::_putc(int value)
takuo 4:33a8ca14e0e0 85 {
takuo 0:aac87cbfc229 86 if (value == '\n') {
takuo 0:aac87cbfc229 87 _column = 0;
takuo 0:aac87cbfc229 88 _row = (_row + 1) % rows();
takuo 4:33a8ca14e0e0 89 } else {
takuo 0:aac87cbfc229 90 character(_column, _row, value);
takuo 0:aac87cbfc229 91 _column++;
takuo 0:aac87cbfc229 92 if (_column >= columns()) {
takuo 0:aac87cbfc229 93 _column = 0;
takuo 0:aac87cbfc229 94 _row = (_row + 1) % rows();
takuo 0:aac87cbfc229 95 }
takuo 0:aac87cbfc229 96 }
takuo 0:aac87cbfc229 97 return value;
takuo 0:aac87cbfc229 98 }
takuo 0:aac87cbfc229 99
takuo 4:33a8ca14e0e0 100 int ACM1602NI::_getc()
takuo 4:33a8ca14e0e0 101 {
takuo 0:aac87cbfc229 102 return -1;
takuo 0:aac87cbfc229 103 }
takuo 0:aac87cbfc229 104
takuo 4:33a8ca14e0e0 105 void ACM1602NI::writeCommand(int command)
takuo 4:33a8ca14e0e0 106 {
takuo 0:aac87cbfc229 107 char bs[3] = { i2c_addr, 0x00, command };
takuo 0:aac87cbfc229 108 writeBytes(bs, 3);
takuo 0:aac87cbfc229 109 }
takuo 0:aac87cbfc229 110
takuo 4:33a8ca14e0e0 111 void ACM1602NI::writeData(int data)
takuo 4:33a8ca14e0e0 112 {
takuo 0:aac87cbfc229 113 char bs[3] = { i2c_addr, 0x80, data };
takuo 0:aac87cbfc229 114 writeBytes(bs, 3);
takuo 0:aac87cbfc229 115 }
takuo 0:aac87cbfc229 116
takuo 4:33a8ca14e0e0 117 int ACM1602NI::address(int column, int row)
takuo 4:33a8ca14e0e0 118 {
takuo 0:aac87cbfc229 119 return 0x80 + row * 0x40 + column;
takuo 0:aac87cbfc229 120 }
takuo 0:aac87cbfc229 121
takuo 4:33a8ca14e0e0 122 int ACM1602NI::columns()
takuo 4:33a8ca14e0e0 123 {
takuo 0:aac87cbfc229 124 return display_columns;
takuo 0:aac87cbfc229 125 }
takuo 0:aac87cbfc229 126
takuo 4:33a8ca14e0e0 127 int ACM1602NI::rows()
takuo 4:33a8ca14e0e0 128 {
takuo 0:aac87cbfc229 129 return display_rows;
takuo 0:aac87cbfc229 130 }