hui

Dependencies:   mbed

Fork of mbed_L3_Timer by Adrian Renner

Committer:
moritzmahler
Date:
Sat Dec 06 14:46:14 2014 +0000
Revision:
1:a02777ef7e5c
Parent:
0:8a1dbfbe5c66
some major problems . Don't know why.;

Who changed what in which revision?

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