TextLCD_595 - this change module NewTextLCD Erik Kerger. It adds the ability to output a simple Russian text, as well as some additional features implemented chip HD44780. The test was carried out on the module module MT-16S2D. The display is connected via SPI bus through to the shift register 74595 (74HC595)

Fork of TextLCD_Rus by Vasiliy Bogomazyuk

Committer:
vbogom
Date:
Tue Apr 07 21:34:23 2015 +0000
Revision:
3:e604470d1838
Parent:
TextLCD_Rus.cpp@0:d4a4f76fffb5
The control module display, HD44780 LCD with support for Russian characters. The display is connected via SPI interface via the shift register 74595 (74HC595).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vbogom 3:e604470d1838 1 /* mbed TextLCD_595 Library, for a 4-bit LCD based on HD44780
vbogom 0:d4a4f76fffb5 2 * Copyright (c) 2007-2010, sford, http://mbed.org
vbogom 0:d4a4f76fffb5 3 * Changes by Erik Kerger
vbogom 0:d4a4f76fffb5 4 *
vbogom 0:d4a4f76fffb5 5 *
vbogom 0:d4a4f76fffb5 6 * Changes by Bogomazyuk Vasiliy (Богомазюк Василий)
vbogom 0:d4a4f76fffb5 7 * Модуль испытан на жидкокристаллическом модуле MT–16S2D
vbogom 0:d4a4f76fffb5 8 *
vbogom 0:d4a4f76fffb5 9 *
vbogom 0:d4a4f76fffb5 10 *
vbogom 0:d4a4f76fffb5 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
vbogom 0:d4a4f76fffb5 12 * of this software and associated documentation files (the "Software"), to deal
vbogom 0:d4a4f76fffb5 13 * in the Software without restriction, including without limitation the rights
vbogom 0:d4a4f76fffb5 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
vbogom 0:d4a4f76fffb5 15 * copies of the Software, and to permit persons to whom the Software is
vbogom 0:d4a4f76fffb5 16 * furnished to do so, subject to the following conditions:
vbogom 0:d4a4f76fffb5 17 *
vbogom 0:d4a4f76fffb5 18 * The above copyright notice and this permission notice shall be included in
vbogom 0:d4a4f76fffb5 19 * all copies or substantial portions of the Software.
vbogom 0:d4a4f76fffb5 20 *
vbogom 0:d4a4f76fffb5 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
vbogom 0:d4a4f76fffb5 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
vbogom 0:d4a4f76fffb5 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
vbogom 0:d4a4f76fffb5 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
vbogom 0:d4a4f76fffb5 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
vbogom 0:d4a4f76fffb5 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
vbogom 0:d4a4f76fffb5 27 * THE SOFTWARE.
vbogom 0:d4a4f76fffb5 28 */
vbogom 0:d4a4f76fffb5 29
vbogom 3:e604470d1838 30 #include "TextLCD_595.h"
vbogom 0:d4a4f76fffb5 31 #include "mbed.h"
vbogom 0:d4a4f76fffb5 32
vbogom 0:d4a4f76fffb5 33 #include <string>
vbogom 0:d4a4f76fffb5 34
vbogom 3:e604470d1838 35 #define __nop1 wait_us(1)
vbogom 3:e604470d1838 36
vbogom 0:d4a4f76fffb5 37 const unsigned char utf_recode[] =
vbogom 0:d4a4f76fffb5 38 {
vbogom 0:d4a4f76fffb5 39 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,
vbogom 0:d4a4f76fffb5 40 0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8,
vbogom 0:d4a4f76fffb5 41 0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,
vbogom 0:d4a4f76fffb5 42 0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1,
vbogom 0:d4a4f76fffb5 43 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,
vbogom 0:d4a4f76fffb5 44 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe,
vbogom 0:d4a4f76fffb5 45 0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,
vbogom 0:d4a4f76fffb5 46 0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7
vbogom 0:d4a4f76fffb5 47 };
vbogom 0:d4a4f76fffb5 48
vbogom 0:d4a4f76fffb5 49 int ConvertChar(int c)
vbogom 0:d4a4f76fffb5 50 {
vbogom 0:d4a4f76fffb5 51 int i=c;
vbogom 0:d4a4f76fffb5 52 if ((c>=0xD090)and(c<=0xD0BF))i=utf_recode[c-0xD090];
vbogom 0:d4a4f76fffb5 53 if ((c>=0xD180)and(c<=0xD18F))i=utf_recode[c-0xD150];
vbogom 0:d4a4f76fffb5 54 if (c==0xD081) i=0xA2;
vbogom 0:d4a4f76fffb5 55 if (c==0xD191) i=0xB5;
vbogom 0:d4a4f76fffb5 56 return i;
vbogom 0:d4a4f76fffb5 57 }
vbogom 0:d4a4f76fffb5 58
vbogom 3:e604470d1838 59 #define _BL 0x40
vbogom 3:e604470d1838 60 #define _RS 0x10
vbogom 3:e604470d1838 61 #define _E 0x20
vbogom 3:e604470d1838 62 #define _D4 0x01
vbogom 3:e604470d1838 63 #define _D5 0x02
vbogom 3:e604470d1838 64 #define _D6 0x04
vbogom 3:e604470d1838 65 #define _D7 0x08
vbogom 0:d4a4f76fffb5 66
vbogom 3:e604470d1838 67 TextLCD_595::TextLCD_595(SPI *spi, PinName CS, LCDType type) :
vbogom 3:e604470d1838 68 _spi(spi),
vbogom 3:e604470d1838 69 _cs(CS),
vbogom 3:e604470d1838 70 _type(type) {
vbogom 3:e604470d1838 71 _spi->format(8,0);
vbogom 3:e604470d1838 72 _spi->frequency(1000000);
vbogom 3:e604470d1838 73
vbogom 3:e604470d1838 74 _cs = 0;
vbogom 3:e604470d1838 75 _spi->write(0x0);
vbogom 3:e604470d1838 76 _cs = 1;
vbogom 0:d4a4f76fffb5 77 if (_type != LCDuser)
vbogom 0:d4a4f76fffb5 78 setLCDparam(_type); // otherwise rows, colums, comdelay, adresses must be set before
vbogom 0:d4a4f76fffb5 79
vbogom 0:d4a4f76fffb5 80 wait(0.050f); // Wait 50ms to ensure powered up
vbogom 0:d4a4f76fffb5 81
vbogom 0:d4a4f76fffb5 82 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
vbogom 0:d4a4f76fffb5 83 // this sets controler into 8 bit mode, so we have a defined state
vbogom 0:d4a4f76fffb5 84 for (int i=0; i<3; i++) {
vbogom 3:e604470d1838 85 _cs = 0;
vbogom 3:e604470d1838 86 _spi->write(_E);
vbogom 3:e604470d1838 87 _cs = 1;
vbogom 3:e604470d1838 88 __nop1;
vbogom 3:e604470d1838 89 _cs = 0;
vbogom 3:e604470d1838 90 _spi->write(_E|_D4|_D5);
vbogom 3:e604470d1838 91 _cs = 1;
vbogom 3:e604470d1838 92 __nop1;
vbogom 3:e604470d1838 93 _cs = 0;
vbogom 3:e604470d1838 94 _spi->write(_D4|_D5);
vbogom 3:e604470d1838 95 _cs = 1;
vbogom 3:e604470d1838 96 wait_us(LCDparam.delay);
vbogom 0:d4a4f76fffb5 97 }
vbogom 3:e604470d1838 98 _cs = 0;
vbogom 3:e604470d1838 99 _spi->write(_E|_D4|_D5);
vbogom 3:e604470d1838 100 _cs = 1;
vbogom 3:e604470d1838 101 __nop1;
vbogom 3:e604470d1838 102 _cs = 0;
vbogom 3:e604470d1838 103 _spi->write(_E|_D5);
vbogom 3:e604470d1838 104 _cs = 1;
vbogom 3:e604470d1838 105 __nop1;
vbogom 3:e604470d1838 106 _cs = 0;
vbogom 3:e604470d1838 107 _spi->write(_D5);
vbogom 3:e604470d1838 108 _cs = 1;
vbogom 0:d4a4f76fffb5 109 wait_us(LCDparam.delay);
vbogom 3:e604470d1838 110 _comm = _D5;
vbogom 0:d4a4f76fffb5 111
vbogom 0:d4a4f76fffb5 112 writeCommand(0x28); // Function set 4 Bit, 2Line, 5*7
vbogom 0:d4a4f76fffb5 113 writeCommand(0x08); // Display off
vbogom 0:d4a4f76fffb5 114 cls(); // clear display, reset _column and _row
vbogom 0:d4a4f76fffb5 115 writeCommand(0x04); // cursor right, Display is not shifted
vbogom 3:e604470d1838 116 _bl=_BL; // Backlight on
vbogom 3:e604470d1838 117 writeCommand(0x0C); // Display on , Cursor off
vbogom 0:d4a4f76fffb5 118 _setCursor=0x0; //Курсор выключен и не мигает
vbogom 0:d4a4f76fffb5 119 }
vbogom 0:d4a4f76fffb5 120
vbogom 3:e604470d1838 121 void TextLCD_595::character(int column, int row, int c) {
vbogom 0:d4a4f76fffb5 122 int a = 0x80 | (LCDparam.adresses[row & 3] + column);
vbogom 0:d4a4f76fffb5 123 writeCommand(a); // set cursor address
vbogom 0:d4a4f76fffb5 124 writeData(c); // write char
vbogom 0:d4a4f76fffb5 125 }
vbogom 0:d4a4f76fffb5 126
vbogom 3:e604470d1838 127 void TextLCD_595::cls() {
vbogom 0:d4a4f76fffb5 128 writeCommand(0x01); // cls, and set cursor to 0
vbogom 0:d4a4f76fffb5 129 locate(0, 0); // set internal position
vbogom 0:d4a4f76fffb5 130 wait_us(45 * LCDparam.delay); // CLS need much time
vbogom 0:d4a4f76fffb5 131 }
vbogom 0:d4a4f76fffb5 132
vbogom 3:e604470d1838 133 void TextLCD_595::locate(int column, int row) {
vbogom 0:d4a4f76fffb5 134 _column = column; // set position for next char
vbogom 0:d4a4f76fffb5 135 _row = row; // note: cursor is not set yet
vbogom 0:d4a4f76fffb5 136 }
vbogom 0:d4a4f76fffb5 137
vbogom 0:d4a4f76fffb5 138
vbogom 0:d4a4f76fffb5 139
vbogom 3:e604470d1838 140 int TextLCD_595::_putc(int value) {
vbogom 0:d4a4f76fffb5 141 if (value == '\n') {
vbogom 0:d4a4f76fffb5 142 _column = 0;
vbogom 0:d4a4f76fffb5 143 _row++;
vbogom 0:d4a4f76fffb5 144 if (_row >= LCDparam.rows) {
vbogom 0:d4a4f76fffb5 145 _row = 0;
vbogom 0:d4a4f76fffb5 146 }
vbogom 0:d4a4f76fffb5 147 } else {
vbogom 0:d4a4f76fffb5 148 character(_column, _row, value);
vbogom 0:d4a4f76fffb5 149 _column++;
vbogom 0:d4a4f76fffb5 150 if (_column >= LCDparam.columns) {
vbogom 0:d4a4f76fffb5 151 _column = 0;
vbogom 0:d4a4f76fffb5 152 _row++;
vbogom 0:d4a4f76fffb5 153 if (_row >= LCDparam.rows) {
vbogom 0:d4a4f76fffb5 154 _row = 0;
vbogom 0:d4a4f76fffb5 155 }
vbogom 0:d4a4f76fffb5 156 }
vbogom 0:d4a4f76fffb5 157 }
vbogom 0:d4a4f76fffb5 158 return value;
vbogom 0:d4a4f76fffb5 159 }
vbogom 0:d4a4f76fffb5 160
vbogom 0:d4a4f76fffb5 161 // Dummy function - read not supported
vbogom 3:e604470d1838 162 int TextLCD_595::_getc() {
vbogom 0:d4a4f76fffb5 163 return -1;
vbogom 0:d4a4f76fffb5 164 }
vbogom 0:d4a4f76fffb5 165
vbogom 3:e604470d1838 166 void TextLCD_595::writeByte(int value) {
vbogom 3:e604470d1838 167 _cs = 0;
vbogom 3:e604470d1838 168 _spi->write(_E|_bl|_comm);
vbogom 3:e604470d1838 169 _cs = 1;
vbogom 3:e604470d1838 170 __nop1;
vbogom 3:e604470d1838 171 _comm = value >> 4; // higher nibble first
vbogom 3:e604470d1838 172 _cs = 0;
vbogom 3:e604470d1838 173 _spi->write(_E|_bl|_comm);
vbogom 3:e604470d1838 174 _cs = 1;
vbogom 3:e604470d1838 175 __nop1;
vbogom 3:e604470d1838 176 _cs = 0;
vbogom 3:e604470d1838 177 _spi->write(_bl|_comm);
vbogom 3:e604470d1838 178 _cs = 1;
vbogom 3:e604470d1838 179 __nop1;
vbogom 3:e604470d1838 180 _cs = 0;
vbogom 3:e604470d1838 181 _spi->write(_E|_bl|_comm);
vbogom 3:e604470d1838 182 _cs = 1;
vbogom 3:e604470d1838 183 __nop1;
vbogom 3:e604470d1838 184 _comm = value & 0x0F; // then lower
vbogom 3:e604470d1838 185 _cs = 0;
vbogom 3:e604470d1838 186 _spi->write(_E|_bl|_comm);
vbogom 3:e604470d1838 187 _cs = 1;
vbogom 3:e604470d1838 188 __nop1;
vbogom 3:e604470d1838 189 _cs = 0;
vbogom 3:e604470d1838 190 _spi->write(_bl|_comm);
vbogom 3:e604470d1838 191 _cs = 1;
vbogom 3:e604470d1838 192 __nop1;
vbogom 0:d4a4f76fffb5 193 }
vbogom 0:d4a4f76fffb5 194
vbogom 3:e604470d1838 195 void TextLCD_595::writeByteData(int value) {
vbogom 3:e604470d1838 196 _cs = 0;
vbogom 3:e604470d1838 197 _spi->write(_RS|_bl|_comm);
vbogom 3:e604470d1838 198 _cs = 1;
vbogom 3:e604470d1838 199 __nop1;
vbogom 3:e604470d1838 200 _cs = 0;
vbogom 3:e604470d1838 201 _spi->write(_E|_RS|_bl|_comm);
vbogom 3:e604470d1838 202 _cs = 1;
vbogom 3:e604470d1838 203 __nop1;
vbogom 3:e604470d1838 204 _comm = value >> 4; // higher nibble first
vbogom 3:e604470d1838 205 _cs = 0;
vbogom 3:e604470d1838 206 _spi->write(_E|_RS|_bl|_comm);
vbogom 3:e604470d1838 207 _cs = 1;
vbogom 3:e604470d1838 208 __nop1;
vbogom 3:e604470d1838 209 _cs = 0;
vbogom 3:e604470d1838 210 _spi->write(_RS|_bl|_comm);
vbogom 3:e604470d1838 211 _cs = 1;
vbogom 3:e604470d1838 212 __nop1;
vbogom 3:e604470d1838 213 _cs = 0;
vbogom 3:e604470d1838 214 _spi->write(_E|_RS|_bl|_comm);
vbogom 3:e604470d1838 215 _cs = 1;
vbogom 3:e604470d1838 216 __nop1;
vbogom 3:e604470d1838 217 _comm = value & 0x0F; // then lower
vbogom 3:e604470d1838 218 _cs = 0;
vbogom 3:e604470d1838 219 _spi->write(_E|_RS|_bl|_comm);
vbogom 3:e604470d1838 220 _cs = 1;
vbogom 3:e604470d1838 221 __nop1;
vbogom 3:e604470d1838 222 _cs = 0;
vbogom 3:e604470d1838 223 _spi->write(_RS|_bl|_comm);
vbogom 3:e604470d1838 224 _cs = 1;
vbogom 3:e604470d1838 225 wait_us(LCDparam.delay);
vbogom 3:e604470d1838 226 _cs = 0;
vbogom 3:e604470d1838 227 _spi->write(_bl|_comm);
vbogom 3:e604470d1838 228 _cs = 1;
vbogom 3:e604470d1838 229 __nop1;
vbogom 3:e604470d1838 230 }
vbogom 3:e604470d1838 231
vbogom 3:e604470d1838 232
vbogom 3:e604470d1838 233 void TextLCD_595::writeCommand(int command) {
vbogom 0:d4a4f76fffb5 234 writeByte(command);
vbogom 0:d4a4f76fffb5 235 wait_us(LCDparam.delay);
vbogom 0:d4a4f76fffb5 236 }
vbogom 0:d4a4f76fffb5 237
vbogom 0:d4a4f76fffb5 238
vbogom 3:e604470d1838 239 void TextLCD_595::writeData(int data) {
vbogom 3:e604470d1838 240 writeByteData(data);
vbogom 0:d4a4f76fffb5 241 wait_us(LCDparam.delay);
vbogom 0:d4a4f76fffb5 242 }
vbogom 0:d4a4f76fffb5 243
vbogom 0:d4a4f76fffb5 244
vbogom 0:d4a4f76fffb5 245 // set user defined char
vbogom 3:e604470d1838 246 void TextLCD_595::writeCGRAM(int address, int pattern[8]){
vbogom 0:d4a4f76fffb5 247 int i;
vbogom 0:d4a4f76fffb5 248 address = address & 7; //max 8 char
vbogom 0:d4a4f76fffb5 249 for(i=0;i<8;i++){
vbogom 0:d4a4f76fffb5 250 writeCommand(0x40 | (address * 8) + i);
vbogom 0:d4a4f76fffb5 251 writeData(pattern[i]);
vbogom 0:d4a4f76fffb5 252 }
vbogom 0:d4a4f76fffb5 253 }
vbogom 0:d4a4f76fffb5 254
vbogom 3:e604470d1838 255 void TextLCD_595::setLCDparam(LCDType _type){
vbogom 0:d4a4f76fffb5 256 switch (_type) {
vbogom 0:d4a4f76fffb5 257
vbogom 0:d4a4f76fffb5 258 case LCD16x2:
vbogom 0:d4a4f76fffb5 259 case LCD16x2B:
vbogom 0:d4a4f76fffb5 260 LCDparam.columns = 16;
vbogom 0:d4a4f76fffb5 261 break;
vbogom 0:d4a4f76fffb5 262 case LCD20x2:
vbogom 0:d4a4f76fffb5 263 case LCD20x4:
vbogom 0:d4a4f76fffb5 264 LCDparam.columns = 20;
vbogom 0:d4a4f76fffb5 265 break;
vbogom 0:d4a4f76fffb5 266 case LCD24x2:
vbogom 0:d4a4f76fffb5 267 LCDparam.columns = 24;
vbogom 0:d4a4f76fffb5 268 break;
vbogom 0:d4a4f76fffb5 269 }
vbogom 0:d4a4f76fffb5 270 if (_type == LCD20x4)
vbogom 0:d4a4f76fffb5 271 LCDparam.rows = 4;
vbogom 0:d4a4f76fffb5 272 else
vbogom 0:d4a4f76fffb5 273 LCDparam.rows = 2;
vbogom 0:d4a4f76fffb5 274
vbogom 0:d4a4f76fffb5 275 LCDparam.adresses[0] = 0;
vbogom 0:d4a4f76fffb5 276
vbogom 0:d4a4f76fffb5 277 if (_type == LCD16x2B)
vbogom 0:d4a4f76fffb5 278 LCDparam.adresses[1] = 40;
vbogom 0:d4a4f76fffb5 279 else
vbogom 0:d4a4f76fffb5 280 LCDparam.adresses[1] = 0x40;
vbogom 0:d4a4f76fffb5 281
vbogom 0:d4a4f76fffb5 282 if (_type == LCD20x4) {
vbogom 0:d4a4f76fffb5 283 LCDparam.adresses[2] = 0x14;
vbogom 0:d4a4f76fffb5 284 LCDparam.adresses[3] = 0x54;}
vbogom 0:d4a4f76fffb5 285 else {
vbogom 0:d4a4f76fffb5 286 LCDparam.adresses[2] = 0;
vbogom 0:d4a4f76fffb5 287 LCDparam.adresses[3] = 0;}
vbogom 0:d4a4f76fffb5 288
vbogom 0:d4a4f76fffb5 289 LCDparam.delay = 50; // 50 us delays as default
vbogom 0:d4a4f76fffb5 290 }
vbogom 0:d4a4f76fffb5 291
vbogom 3:e604470d1838 292 int TextLCD_595::putc_rus(int c) {
vbogom 0:d4a4f76fffb5 293 return putc(ConvertChar(c));
vbogom 0:d4a4f76fffb5 294 }
vbogom 0:d4a4f76fffb5 295
vbogom 3:e604470d1838 296 void TextLCD_595::print_rus(const string rustext){
vbogom 0:d4a4f76fffb5 297 int len = rustext.length();
vbogom 0:d4a4f76fffb5 298 for (int i=0; i<len; i++) {
vbogom 0:d4a4f76fffb5 299 uint16_t temp=uint8_t(rustext[i]);
vbogom 0:d4a4f76fffb5 300 i++;
vbogom 0:d4a4f76fffb5 301 temp=temp<<8|uint8_t(rustext[i]);
vbogom 0:d4a4f76fffb5 302 putc(ConvertChar(temp));
vbogom 0:d4a4f76fffb5 303 };
vbogom 0:d4a4f76fffb5 304 }
vbogom 0:d4a4f76fffb5 305
vbogom 0:d4a4f76fffb5 306
vbogom 3:e604470d1838 307 void TextLCD_595::ShiftLCD_Left() {
vbogom 0:d4a4f76fffb5 308 writeCommand(0x18);
vbogom 0:d4a4f76fffb5 309 }
vbogom 0:d4a4f76fffb5 310
vbogom 3:e604470d1838 311 void TextLCD_595::ShiftLCD_Right() {
vbogom 0:d4a4f76fffb5 312 writeCommand(0x1C);
vbogom 0:d4a4f76fffb5 313 }
vbogom 0:d4a4f76fffb5 314
vbogom 3:e604470d1838 315 void TextLCD_595::ShiftCursor_Left() {
vbogom 0:d4a4f76fffb5 316 writeCommand(0x10);
vbogom 0:d4a4f76fffb5 317 }
vbogom 0:d4a4f76fffb5 318
vbogom 3:e604470d1838 319 void TextLCD_595::ShiftCursor_Right() {
vbogom 0:d4a4f76fffb5 320 writeCommand(0x14);
vbogom 0:d4a4f76fffb5 321 }
vbogom 0:d4a4f76fffb5 322
vbogom 0:d4a4f76fffb5 323
vbogom 3:e604470d1838 324 void TextLCD_595::home() {
vbogom 0:d4a4f76fffb5 325 writeCommand(0x2);
vbogom 0:d4a4f76fffb5 326 }
vbogom 0:d4a4f76fffb5 327
vbogom 3:e604470d1838 328 void TextLCD_595::on() {
vbogom 0:d4a4f76fffb5 329 writeCommand(0xC|_setCursor);
vbogom 0:d4a4f76fffb5 330 }
vbogom 0:d4a4f76fffb5 331
vbogom 3:e604470d1838 332 void TextLCD_595::off() {
vbogom 0:d4a4f76fffb5 333 writeCommand(0x8|_setCursor);
vbogom 0:d4a4f76fffb5 334 }
vbogom 0:d4a4f76fffb5 335
vbogom 0:d4a4f76fffb5 336
vbogom 3:e604470d1838 337 void TextLCD_595::SetCursor(int modeCursor) {
vbogom 0:d4a4f76fffb5 338 _setCursor=modeCursor;
vbogom 0:d4a4f76fffb5 339 writeCommand(0xC|_setCursor);
vbogom 0:d4a4f76fffb5 340 }
vbogom 0:d4a4f76fffb5 341
vbogom 3:e604470d1838 342 void TextLCD_595::CursorPosition(int column, int row) { //Устанавливаем позицию курсора
vbogom 0:d4a4f76fffb5 343 writeCommand(0x80 | (LCDparam.adresses[row & 3] + column));
vbogom 0:d4a4f76fffb5 344 }
vbogom 0:d4a4f76fffb5 345
vbogom 3:e604470d1838 346
vbogom 3:e604470d1838 347 void TextLCD_595::BackLightOn(){
vbogom 3:e604470d1838 348 _bl=_BL;
vbogom 3:e604470d1838 349 _cs = 0;
vbogom 3:e604470d1838 350 _spi->write(_bl|_comm);
vbogom 3:e604470d1838 351 _cs = 1;
vbogom 3:e604470d1838 352 __nop1;
vbogom 3:e604470d1838 353 }
vbogom 3:e604470d1838 354
vbogom 3:e604470d1838 355 void TextLCD_595::BackLightOff(){
vbogom 3:e604470d1838 356 _bl=0;
vbogom 3:e604470d1838 357 _cs = 0;
vbogom 3:e604470d1838 358 _spi->write(_bl|_comm);
vbogom 3:e604470d1838 359 _cs = 1;
vbogom 3:e604470d1838 360 __nop1;
vbogom 3:e604470d1838 361 }