web server sur carte testbed . données PC>testbed et testbed> PC lecture tensions analogique , site web dans fichier pageswebsd

Dependencies:   mbed

Committer:
geiineuville
Date:
Thu Sep 22 15:59:17 2011 +0000
Revision:
0:3c32eeb9292a
V4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
geiineuville 0:3c32eeb9292a 1 /* mbed TextLCD Library, for a 4-bit LCD based on HD44780
geiineuville 0:3c32eeb9292a 2 * Copyright (c) 2007-2010, sford, http://mbed.org
geiineuville 0:3c32eeb9292a 3 * Changes by Erik Kerger
geiineuville 0:3c32eeb9292a 4 *
geiineuville 0:3c32eeb9292a 5 *
geiineuville 0:3c32eeb9292a 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
geiineuville 0:3c32eeb9292a 7 * of this software and associated documentation files (the "Software"), to deal
geiineuville 0:3c32eeb9292a 8 * in the Software without restriction, including without limitation the rights
geiineuville 0:3c32eeb9292a 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
geiineuville 0:3c32eeb9292a 10 * copies of the Software, and to permit persons to whom the Software is
geiineuville 0:3c32eeb9292a 11 * furnished to do so, subject to the following conditions:
geiineuville 0:3c32eeb9292a 12 *
geiineuville 0:3c32eeb9292a 13 * The above copyright notice and this permission notice shall be included in
geiineuville 0:3c32eeb9292a 14 * all copies or substantial portions of the Software.
geiineuville 0:3c32eeb9292a 15 *
geiineuville 0:3c32eeb9292a 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
geiineuville 0:3c32eeb9292a 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
geiineuville 0:3c32eeb9292a 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
geiineuville 0:3c32eeb9292a 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
geiineuville 0:3c32eeb9292a 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
geiineuville 0:3c32eeb9292a 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
geiineuville 0:3c32eeb9292a 22 * THE SOFTWARE.
geiineuville 0:3c32eeb9292a 23 */
geiineuville 0:3c32eeb9292a 24
geiineuville 0:3c32eeb9292a 25 #include "NewTextLCD.h"
geiineuville 0:3c32eeb9292a 26 #include "mbed.h"
geiineuville 0:3c32eeb9292a 27
geiineuville 0:3c32eeb9292a 28 TextLCD::TextLCD(PinName rs, PinName rw, PinName e, PinName d4, PinName d5,
geiineuville 0:3c32eeb9292a 29 PinName d6, PinName d7, LCDType type) : _rs(rs), _rw(rw), _e(e),
geiineuville 0:3c32eeb9292a 30 _d(d4, d5, d6, d7), _type(type) {
geiineuville 0:3c32eeb9292a 31 _rs = 0; // command mode
geiineuville 0:3c32eeb9292a 32 _rw = 0; // r/w in defined state
geiineuville 0:3c32eeb9292a 33 _e = 0; // 0 --> inactive (most important change to original TextLCD)
geiineuville 0:3c32eeb9292a 34
geiineuville 0:3c32eeb9292a 35 if (_type != LCDuser)
geiineuville 0:3c32eeb9292a 36 setLCDparam(_type); // otherwise rows, colums, comdelay, adresses must be set before
geiineuville 0:3c32eeb9292a 37
geiineuville 0:3c32eeb9292a 38 wait(0.050f); // Wait 50ms to ensure powered up
geiineuville 0:3c32eeb9292a 39
geiineuville 0:3c32eeb9292a 40 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
geiineuville 0:3c32eeb9292a 41 // this sets controler into 8 bit mode, so we have a defined state
geiineuville 0:3c32eeb9292a 42 for (int i=0; i<3; i++) {
geiineuville 0:3c32eeb9292a 43 _e = 1;
geiineuville 0:3c32eeb9292a 44 __nop();
geiineuville 0:3c32eeb9292a 45 __nop();
geiineuville 0:3c32eeb9292a 46 _d = 0x3;
geiineuville 0:3c32eeb9292a 47 __nop(); // data setup time at least 60 ns
geiineuville 0:3c32eeb9292a 48 _e = 0;
geiineuville 0:3c32eeb9292a 49 wait(0.005f); // 5ms
geiineuville 0:3c32eeb9292a 50 }
geiineuville 0:3c32eeb9292a 51 _e = 1;
geiineuville 0:3c32eeb9292a 52 __nop();
geiineuville 0:3c32eeb9292a 53 __nop();
geiineuville 0:3c32eeb9292a 54 _d = 0x2; // 4 Bit mode (after this command, we have to send 2 nibbles)
geiineuville 0:3c32eeb9292a 55 __nop();
geiineuville 0:3c32eeb9292a 56 _e = 0;
geiineuville 0:3c32eeb9292a 57 wait_us(LCDparam.delay);
geiineuville 0:3c32eeb9292a 58
geiineuville 0:3c32eeb9292a 59 writeCommand(0x28); // Function set 4 Bit, 2Line, 5*7
geiineuville 0:3c32eeb9292a 60 writeCommand(0x08); // Display off
geiineuville 0:3c32eeb9292a 61 cls(); // clear display, reset _column and _row
geiineuville 0:3c32eeb9292a 62 writeCommand(0x04); // cursor right, Display is not shifted
geiineuville 0:3c32eeb9292a 63 writeCommand(0x0C); // Display on , Cursor off
geiineuville 0:3c32eeb9292a 64 }
geiineuville 0:3c32eeb9292a 65
geiineuville 0:3c32eeb9292a 66 void TextLCD::character(int column, int row, int c) {
geiineuville 0:3c32eeb9292a 67 int a = 0x80 | (LCDparam.adresses[row & 3] + column);
geiineuville 0:3c32eeb9292a 68 writeCommand(a); // set cursor address
geiineuville 0:3c32eeb9292a 69 writeData(c); // write char
geiineuville 0:3c32eeb9292a 70 }
geiineuville 0:3c32eeb9292a 71
geiineuville 0:3c32eeb9292a 72 void TextLCD::cls() {
geiineuville 0:3c32eeb9292a 73 writeCommand(0x01); // cls, and set cursor to 0
geiineuville 0:3c32eeb9292a 74 locate(0, 0); // set internal position
geiineuville 0:3c32eeb9292a 75 wait_us(45 * LCDparam.delay); // CLS need much time
geiineuville 0:3c32eeb9292a 76 }
geiineuville 0:3c32eeb9292a 77
geiineuville 0:3c32eeb9292a 78 void TextLCD::locate(int column, int row) {
geiineuville 0:3c32eeb9292a 79 _column = column; // set position for next char
geiineuville 0:3c32eeb9292a 80 _row = row; // note: cursor is not set yet
geiineuville 0:3c32eeb9292a 81 }
geiineuville 0:3c32eeb9292a 82
geiineuville 0:3c32eeb9292a 83
geiineuville 0:3c32eeb9292a 84
geiineuville 0:3c32eeb9292a 85 int TextLCD::_putc(int value) {
geiineuville 0:3c32eeb9292a 86 if (value == '\n') {
geiineuville 0:3c32eeb9292a 87 _column = 0;
geiineuville 0:3c32eeb9292a 88 _row++;
geiineuville 0:3c32eeb9292a 89 if (_row >= LCDparam.rows) {
geiineuville 0:3c32eeb9292a 90 _row = 0;
geiineuville 0:3c32eeb9292a 91 }
geiineuville 0:3c32eeb9292a 92 } else {
geiineuville 0:3c32eeb9292a 93 character(_column, _row, value);
geiineuville 0:3c32eeb9292a 94 _column++;
geiineuville 0:3c32eeb9292a 95 if (_column >= LCDparam.columns) {
geiineuville 0:3c32eeb9292a 96 _column = 0;
geiineuville 0:3c32eeb9292a 97 _row++;
geiineuville 0:3c32eeb9292a 98 if (_row >= LCDparam.rows) {
geiineuville 0:3c32eeb9292a 99 _row = 0;
geiineuville 0:3c32eeb9292a 100 }
geiineuville 0:3c32eeb9292a 101 }
geiineuville 0:3c32eeb9292a 102 }
geiineuville 0:3c32eeb9292a 103 return value;
geiineuville 0:3c32eeb9292a 104 }
geiineuville 0:3c32eeb9292a 105
geiineuville 0:3c32eeb9292a 106 // Dummy function - read not supported
geiineuville 0:3c32eeb9292a 107 int TextLCD::_getc() {
geiineuville 0:3c32eeb9292a 108 return -1;
geiineuville 0:3c32eeb9292a 109 }
geiineuville 0:3c32eeb9292a 110
geiineuville 0:3c32eeb9292a 111 void TextLCD::writeByte(int value) {
geiineuville 0:3c32eeb9292a 112 _e = 1;
geiineuville 0:3c32eeb9292a 113 __nop();
geiineuville 0:3c32eeb9292a 114 _d = value >> 4; // higher nibble first
geiineuville 0:3c32eeb9292a 115 __nop();
geiineuville 0:3c32eeb9292a 116 _e = 0;
geiineuville 0:3c32eeb9292a 117 __nop();
geiineuville 0:3c32eeb9292a 118 __nop();
geiineuville 0:3c32eeb9292a 119 _e = 1;
geiineuville 0:3c32eeb9292a 120 __nop();
geiineuville 0:3c32eeb9292a 121 _d = value >> 0; // then lower
geiineuville 0:3c32eeb9292a 122 __nop();
geiineuville 0:3c32eeb9292a 123 _e = 0;
geiineuville 0:3c32eeb9292a 124 }
geiineuville 0:3c32eeb9292a 125
geiineuville 0:3c32eeb9292a 126 void TextLCD::writeCommand(int command) {
geiineuville 0:3c32eeb9292a 127 _rs = 0;
geiineuville 0:3c32eeb9292a 128 writeByte(command);
geiineuville 0:3c32eeb9292a 129 wait_us(LCDparam.delay);
geiineuville 0:3c32eeb9292a 130 }
geiineuville 0:3c32eeb9292a 131
geiineuville 0:3c32eeb9292a 132
geiineuville 0:3c32eeb9292a 133 void TextLCD::writeData(int data) {
geiineuville 0:3c32eeb9292a 134 _rs = 1;
geiineuville 0:3c32eeb9292a 135 writeByte(data);
geiineuville 0:3c32eeb9292a 136 wait_us(LCDparam.delay);
geiineuville 0:3c32eeb9292a 137 }
geiineuville 0:3c32eeb9292a 138
geiineuville 0:3c32eeb9292a 139
geiineuville 0:3c32eeb9292a 140 // set user defined char
geiineuville 0:3c32eeb9292a 141 void TextLCD::writeCGRAM(int address, int pattern[8]){
geiineuville 0:3c32eeb9292a 142 int i;
geiineuville 0:3c32eeb9292a 143 address = address & 7; //max 8 char
geiineuville 0:3c32eeb9292a 144 for(i=0;i<8;i++){
geiineuville 0:3c32eeb9292a 145 writeCommand(0x40 | (address * 8) + i);
geiineuville 0:3c32eeb9292a 146 writeData(pattern[i]);
geiineuville 0:3c32eeb9292a 147 }
geiineuville 0:3c32eeb9292a 148 }
geiineuville 0:3c32eeb9292a 149
geiineuville 0:3c32eeb9292a 150 void TextLCD::setLCDparam(LCDType _type){
geiineuville 0:3c32eeb9292a 151 switch (_type) {
geiineuville 0:3c32eeb9292a 152
geiineuville 0:3c32eeb9292a 153 case LCD16x2:
geiineuville 0:3c32eeb9292a 154 case LCD16x2B:
geiineuville 0:3c32eeb9292a 155 LCDparam.columns = 16;
geiineuville 0:3c32eeb9292a 156 break;
geiineuville 0:3c32eeb9292a 157 case LCD20x2:
geiineuville 0:3c32eeb9292a 158 case LCD20x4:
geiineuville 0:3c32eeb9292a 159 LCDparam.columns = 20;
geiineuville 0:3c32eeb9292a 160 break;
geiineuville 0:3c32eeb9292a 161 case LCD24x2:
geiineuville 0:3c32eeb9292a 162 LCDparam.columns = 24;
geiineuville 0:3c32eeb9292a 163 break;
geiineuville 0:3c32eeb9292a 164 }
geiineuville 0:3c32eeb9292a 165 if (_type == LCD20x4)
geiineuville 0:3c32eeb9292a 166 LCDparam.rows = 4;
geiineuville 0:3c32eeb9292a 167 else
geiineuville 0:3c32eeb9292a 168 LCDparam.rows = 2;
geiineuville 0:3c32eeb9292a 169
geiineuville 0:3c32eeb9292a 170 LCDparam.adresses[0] = 0;
geiineuville 0:3c32eeb9292a 171
geiineuville 0:3c32eeb9292a 172 if (_type == LCD16x2B)
geiineuville 0:3c32eeb9292a 173 LCDparam.adresses[1] = 40;
geiineuville 0:3c32eeb9292a 174 else
geiineuville 0:3c32eeb9292a 175 LCDparam.adresses[1] = 0x40;
geiineuville 0:3c32eeb9292a 176
geiineuville 0:3c32eeb9292a 177 if (_type == LCD20x4) {
geiineuville 0:3c32eeb9292a 178 LCDparam.adresses[2] = 0x14;
geiineuville 0:3c32eeb9292a 179 LCDparam.adresses[3] = 0x54;}
geiineuville 0:3c32eeb9292a 180 else {
geiineuville 0:3c32eeb9292a 181 LCDparam.adresses[2] = 0;
geiineuville 0:3c32eeb9292a 182 LCDparam.adresses[3] = 0;}
geiineuville 0:3c32eeb9292a 183
geiineuville 0:3c32eeb9292a 184 LCDparam.delay = 50; // 50 us delays as default
geiineuville 0:3c32eeb9292a 185 }
geiineuville 0:3c32eeb9292a 186