Yoann Bonnard / TextLCD
Committer:
Bonnardy
Date:
Thu May 25 13:01:49 2017 +0000
Revision:
0:3d764ac53494
Add code ihm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bonnardy 0:3d764ac53494 1 /* mbed TextLCD Library, for a 4-bit LCD based on HD44780
Bonnardy 0:3d764ac53494 2 * Copyright (c) 2007-2010, sford, http://mbed.org
Bonnardy 0:3d764ac53494 3 *
Bonnardy 0:3d764ac53494 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
Bonnardy 0:3d764ac53494 5 * of this software and associated documentation files (the "Software"), to deal
Bonnardy 0:3d764ac53494 6 * in the Software without restriction, including without limitation the rights
Bonnardy 0:3d764ac53494 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Bonnardy 0:3d764ac53494 8 * copies of the Software, and to permit persons to whom the Software is
Bonnardy 0:3d764ac53494 9 * furnished to do so, subject to the following conditions:
Bonnardy 0:3d764ac53494 10 *
Bonnardy 0:3d764ac53494 11 * The above copyright notice and this permission notice shall be included in
Bonnardy 0:3d764ac53494 12 * all copies or substantial portions of the Software.
Bonnardy 0:3d764ac53494 13 *
Bonnardy 0:3d764ac53494 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Bonnardy 0:3d764ac53494 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Bonnardy 0:3d764ac53494 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Bonnardy 0:3d764ac53494 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Bonnardy 0:3d764ac53494 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Bonnardy 0:3d764ac53494 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Bonnardy 0:3d764ac53494 20 * THE SOFTWARE.
Bonnardy 0:3d764ac53494 21 */
Bonnardy 0:3d764ac53494 22
Bonnardy 0:3d764ac53494 23 #include "TextLCD.h"
Bonnardy 0:3d764ac53494 24 #include "mbed.h"
Bonnardy 0:3d764ac53494 25
Bonnardy 0:3d764ac53494 26 TextLCD::TextLCD(PinName rs, PinName e, PinName d4, PinName d5,
Bonnardy 0:3d764ac53494 27 PinName d6, PinName d7, LCDType type) : _rs(rs),
Bonnardy 0:3d764ac53494 28 _e(e), _d(d4, d5, d6, d7),
Bonnardy 0:3d764ac53494 29 _type(type) {
Bonnardy 0:3d764ac53494 30
Bonnardy 0:3d764ac53494 31 _e = 1;
Bonnardy 0:3d764ac53494 32 _rs = 0; // command mode
Bonnardy 0:3d764ac53494 33
Bonnardy 0:3d764ac53494 34 wait(0.015); // Wait 15ms to ensure powered up
Bonnardy 0:3d764ac53494 35
Bonnardy 0:3d764ac53494 36 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
Bonnardy 0:3d764ac53494 37 for (int i=0; i<3; i++) {
Bonnardy 0:3d764ac53494 38 writeByte(0x3);
Bonnardy 0:3d764ac53494 39 wait(0.00164); // this command takes 1.64ms, so wait for it
Bonnardy 0:3d764ac53494 40 }
Bonnardy 0:3d764ac53494 41 writeByte(0x2); // 4-bit mode
Bonnardy 0:3d764ac53494 42 wait(0.000040f); // most instructions take 40us
Bonnardy 0:3d764ac53494 43
Bonnardy 0:3d764ac53494 44 writeCommand(0x28); // Function set 001 BW N F - -
Bonnardy 0:3d764ac53494 45 writeCommand(0x0C);
Bonnardy 0:3d764ac53494 46 writeCommand(0x6); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
Bonnardy 0:3d764ac53494 47 cls();
Bonnardy 0:3d764ac53494 48 }
Bonnardy 0:3d764ac53494 49
Bonnardy 0:3d764ac53494 50 void TextLCD::character(int column, int row, int c) {
Bonnardy 0:3d764ac53494 51 int a = address(column, row);
Bonnardy 0:3d764ac53494 52 writeCommand(a);
Bonnardy 0:3d764ac53494 53 writeData(c);
Bonnardy 0:3d764ac53494 54 }
Bonnardy 0:3d764ac53494 55
Bonnardy 0:3d764ac53494 56 void TextLCD::cls() {
Bonnardy 0:3d764ac53494 57 writeCommand(0x01); // cls, and set cursor to 0
Bonnardy 0:3d764ac53494 58 wait(0.00164f); // This command takes 1.64 ms
Bonnardy 0:3d764ac53494 59 locate(0, 0);
Bonnardy 0:3d764ac53494 60 }
Bonnardy 0:3d764ac53494 61
Bonnardy 0:3d764ac53494 62 void TextLCD::locate(int column, int row) {
Bonnardy 0:3d764ac53494 63 _column = column;
Bonnardy 0:3d764ac53494 64 _row = row;
Bonnardy 0:3d764ac53494 65 }
Bonnardy 0:3d764ac53494 66
Bonnardy 0:3d764ac53494 67 int TextLCD::_putc(int value) {
Bonnardy 0:3d764ac53494 68 if (value == '\n') {
Bonnardy 0:3d764ac53494 69 _column = 0;
Bonnardy 0:3d764ac53494 70 _row++;
Bonnardy 0:3d764ac53494 71 if (_row >= rows()) {
Bonnardy 0:3d764ac53494 72 _row = 0;
Bonnardy 0:3d764ac53494 73 }
Bonnardy 0:3d764ac53494 74 } else {
Bonnardy 0:3d764ac53494 75 character(_column, _row, value);
Bonnardy 0:3d764ac53494 76 _column++;
Bonnardy 0:3d764ac53494 77 if (_column >= columns()) {
Bonnardy 0:3d764ac53494 78 _column = 0;
Bonnardy 0:3d764ac53494 79 _row++;
Bonnardy 0:3d764ac53494 80 if (_row >= rows()) {
Bonnardy 0:3d764ac53494 81 _row = 0;
Bonnardy 0:3d764ac53494 82 }
Bonnardy 0:3d764ac53494 83 }
Bonnardy 0:3d764ac53494 84 }
Bonnardy 0:3d764ac53494 85 return value;
Bonnardy 0:3d764ac53494 86 }
Bonnardy 0:3d764ac53494 87
Bonnardy 0:3d764ac53494 88 int TextLCD::_getc() {
Bonnardy 0:3d764ac53494 89 return -1;
Bonnardy 0:3d764ac53494 90 }
Bonnardy 0:3d764ac53494 91
Bonnardy 0:3d764ac53494 92 void TextLCD::writeByte(int value) {
Bonnardy 0:3d764ac53494 93 _d = value >> 4;
Bonnardy 0:3d764ac53494 94 wait(0.000040f); // most instructions take 40us
Bonnardy 0:3d764ac53494 95 _e = 0;
Bonnardy 0:3d764ac53494 96 wait(0.000040f);
Bonnardy 0:3d764ac53494 97 _e = 1;
Bonnardy 0:3d764ac53494 98 _d = value >> 0;
Bonnardy 0:3d764ac53494 99 wait(0.000040f);
Bonnardy 0:3d764ac53494 100 _e = 0;
Bonnardy 0:3d764ac53494 101 wait(0.000040f); // most instructions take 40us
Bonnardy 0:3d764ac53494 102 _e = 1;
Bonnardy 0:3d764ac53494 103 }
Bonnardy 0:3d764ac53494 104
Bonnardy 0:3d764ac53494 105 void TextLCD::writeCommand(int command) {
Bonnardy 0:3d764ac53494 106 _rs = 0;
Bonnardy 0:3d764ac53494 107 writeByte(command);
Bonnardy 0:3d764ac53494 108 }
Bonnardy 0:3d764ac53494 109
Bonnardy 0:3d764ac53494 110 void TextLCD::writeData(int data) {
Bonnardy 0:3d764ac53494 111 _rs = 1;
Bonnardy 0:3d764ac53494 112 writeByte(data);
Bonnardy 0:3d764ac53494 113 }
Bonnardy 0:3d764ac53494 114
Bonnardy 0:3d764ac53494 115 int TextLCD::address(int column, int row) {
Bonnardy 0:3d764ac53494 116 switch (_type) {
Bonnardy 0:3d764ac53494 117 case LCD20x4:
Bonnardy 0:3d764ac53494 118 switch (row) {
Bonnardy 0:3d764ac53494 119 case 0:
Bonnardy 0:3d764ac53494 120 return 0x80 + column;
Bonnardy 0:3d764ac53494 121 case 1:
Bonnardy 0:3d764ac53494 122 return 0xc0 + column;
Bonnardy 0:3d764ac53494 123 case 2:
Bonnardy 0:3d764ac53494 124 return 0x94 + column;
Bonnardy 0:3d764ac53494 125 case 3:
Bonnardy 0:3d764ac53494 126 return 0xd4 + column;
Bonnardy 0:3d764ac53494 127 }
Bonnardy 0:3d764ac53494 128 case LCD16x4:
Bonnardy 0:3d764ac53494 129 switch (row) {
Bonnardy 0:3d764ac53494 130 case 0:
Bonnardy 0:3d764ac53494 131 return 0x80 + column;
Bonnardy 0:3d764ac53494 132 case 1:
Bonnardy 0:3d764ac53494 133 return 0xc0 + column;
Bonnardy 0:3d764ac53494 134 case 2:
Bonnardy 0:3d764ac53494 135 return 0x90 + column;
Bonnardy 0:3d764ac53494 136 case 3:
Bonnardy 0:3d764ac53494 137 return 0xd0 + column;
Bonnardy 0:3d764ac53494 138 }
Bonnardy 0:3d764ac53494 139 case LCD16x2B:
Bonnardy 0:3d764ac53494 140 return 0x80 + (row * 40) + column;
Bonnardy 0:3d764ac53494 141 case LCD16x2:
Bonnardy 0:3d764ac53494 142 case LCD20x2:
Bonnardy 0:3d764ac53494 143 default:
Bonnardy 0:3d764ac53494 144 return 0x80 + (row * 0x40) + column;
Bonnardy 0:3d764ac53494 145 }
Bonnardy 0:3d764ac53494 146 }
Bonnardy 0:3d764ac53494 147
Bonnardy 0:3d764ac53494 148 int TextLCD::columns() {
Bonnardy 0:3d764ac53494 149 switch (_type) {
Bonnardy 0:3d764ac53494 150 case LCD20x4:
Bonnardy 0:3d764ac53494 151 case LCD20x2:
Bonnardy 0:3d764ac53494 152 return 20;
Bonnardy 0:3d764ac53494 153 case LCD16x2:
Bonnardy 0:3d764ac53494 154 case LCD16x4:
Bonnardy 0:3d764ac53494 155 case LCD16x2B:
Bonnardy 0:3d764ac53494 156 default:
Bonnardy 0:3d764ac53494 157 return 16;
Bonnardy 0:3d764ac53494 158 }
Bonnardy 0:3d764ac53494 159 }
Bonnardy 0:3d764ac53494 160
Bonnardy 0:3d764ac53494 161 int TextLCD::rows() {
Bonnardy 0:3d764ac53494 162 switch (_type) {
Bonnardy 0:3d764ac53494 163 case LCD20x4:
Bonnardy 0:3d764ac53494 164 case LCD16x4:
Bonnardy 0:3d764ac53494 165 return 4;
Bonnardy 0:3d764ac53494 166 case LCD16x2:
Bonnardy 0:3d764ac53494 167 case LCD16x2B:
Bonnardy 0:3d764ac53494 168 case LCD20x2:
Bonnardy 0:3d764ac53494 169 default:
Bonnardy 0:3d764ac53494 170 return 2;
Bonnardy 0:3d764ac53494 171 }
Bonnardy 0:3d764ac53494 172 }
Bonnardy 0:3d764ac53494 173