Just tweeked orientation and contrast values

Fork of NokiaLCD by Simon Ford

Committer:
Capper
Date:
Fri Oct 24 15:34:27 2014 +0000
Revision:
3:51cb48ebad3e
Parent:
1:8f005b0dcfa7
Changed orientation and contrast for this project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:ff874f85ed33 1 /* mbed Nokia LCD Library
simon 0:ff874f85ed33 2 * Copyright (c) 2007-2010, sford
simon 0:ff874f85ed33 3 */
simon 0:ff874f85ed33 4
simon 0:ff874f85ed33 5 #include "NokiaLCD.h"
simon 0:ff874f85ed33 6
simon 0:ff874f85ed33 7 #include "mbed.h"
simon 0:ff874f85ed33 8
simon 0:ff874f85ed33 9 #define NOKIALCD_ROWS 16
simon 0:ff874f85ed33 10 #define NOKIALCD_COLS 16
simon 0:ff874f85ed33 11 #define NOKIALCD_WIDTH 130
simon 0:ff874f85ed33 12 #define NOKIALCD_HEIGHT 130
simon 0:ff874f85ed33 13 #define NOKIALCD_FREQUENCY 5000000
simon 0:ff874f85ed33 14
simon 0:ff874f85ed33 15 NokiaLCD::NokiaLCD(PinName mosi, PinName sclk, PinName cs, PinName rst, LCDType type)
simon 0:ff874f85ed33 16 : _spi(mosi, NC, sclk)
simon 0:ff874f85ed33 17 , _rst(rst)
simon 0:ff874f85ed33 18 , _cs(cs) {
simon 0:ff874f85ed33 19
simon 0:ff874f85ed33 20 _type = type;
simon 0:ff874f85ed33 21
simon 0:ff874f85ed33 22 _row = 0;
simon 0:ff874f85ed33 23 _column = 0;
simon 0:ff874f85ed33 24 _foreground = 0x00FFFFFF;
simon 0:ff874f85ed33 25 _background = 0x00000000;
simon 0:ff874f85ed33 26
simon 0:ff874f85ed33 27 reset();
simon 0:ff874f85ed33 28 }
simon 0:ff874f85ed33 29
simon 0:ff874f85ed33 30 void NokiaLCD::reset() {
simon 0:ff874f85ed33 31
simon 0:ff874f85ed33 32 // setup the SPI interface and bring display out of reset
simon 0:ff874f85ed33 33 _cs = 1;
simon 0:ff874f85ed33 34 _rst = 0;
simon 0:ff874f85ed33 35 _spi.format(9);
simon 0:ff874f85ed33 36 _spi.frequency(NOKIALCD_FREQUENCY);
simon 0:ff874f85ed33 37 wait_ms(1);
simon 0:ff874f85ed33 38 _rst = 1;
simon 0:ff874f85ed33 39 wait_ms(1);
simon 0:ff874f85ed33 40
simon 0:ff874f85ed33 41 _cs = 0;
simon 0:ff874f85ed33 42
simon 0:ff874f85ed33 43 switch (_type) {
simon 0:ff874f85ed33 44 case LCD6100:
simon 0:ff874f85ed33 45 command(0xCA); // display control
simon 0:ff874f85ed33 46 data(0);
simon 0:ff874f85ed33 47 data(32);
simon 0:ff874f85ed33 48 data(0);
simon 0:ff874f85ed33 49 command(0xBB);
simon 0:ff874f85ed33 50 data(1);
simon 0:ff874f85ed33 51 command(0xD1); // oscillator on
simon 0:ff874f85ed33 52 command(0x94); // sleep out
simon 0:ff874f85ed33 53 command(0x20); // power control
simon 0:ff874f85ed33 54 data(0x0F);
simon 0:ff874f85ed33 55 command(0xA7); // invert display
simon 0:ff874f85ed33 56 command(0x81); // Voltage control
Capper 3:51cb48ebad3e 57 data(0x23); // contrast setting: 0..63 was39
simon 0:ff874f85ed33 58 data(3); // resistance ratio
simon 0:ff874f85ed33 59 wait_ms(1);
simon 0:ff874f85ed33 60 command(0xBC);
simon 0:ff874f85ed33 61 data(0);
simon 0:ff874f85ed33 62 data(1);
simon 0:ff874f85ed33 63 data(4);
simon 0:ff874f85ed33 64 command(0xAF); // turn on the display
simon 0:ff874f85ed33 65 break;
simon 0:ff874f85ed33 66
simon 0:ff874f85ed33 67 case LCD6610:
simon 0:ff874f85ed33 68 command(0xCA); // display control
simon 0:ff874f85ed33 69 data(0);
simon 0:ff874f85ed33 70 data(31);
simon 0:ff874f85ed33 71 data(0);
simon 0:ff874f85ed33 72 command(0xBB);
simon 0:ff874f85ed33 73 data(1);
simon 0:ff874f85ed33 74 command(0xD1); // oscillator on
simon 0:ff874f85ed33 75 command(0x94); // sleep out
simon 0:ff874f85ed33 76 command(0x20); // power control
simon 0:ff874f85ed33 77 data(0x0F);
simon 0:ff874f85ed33 78 command(0xA7); // invert display
simon 0:ff874f85ed33 79 command(0x81); // Voltage control
simon 0:ff874f85ed33 80 data(39); // contrast setting: 0..63
simon 0:ff874f85ed33 81 data(3); // resistance ratio
simon 0:ff874f85ed33 82 wait_ms(1);
simon 0:ff874f85ed33 83 command(0xBC);
simon 0:ff874f85ed33 84 data(0);
simon 0:ff874f85ed33 85 data(0);
simon 0:ff874f85ed33 86 data(2);
simon 0:ff874f85ed33 87 command(0xAF); // turn on the display
simon 0:ff874f85ed33 88 break;
simon 0:ff874f85ed33 89
simon 0:ff874f85ed33 90 case PCF8833:
simon 0:ff874f85ed33 91 command(0x11); // sleep out
simon 0:ff874f85ed33 92 command(0x3A); // column mode
simon 0:ff874f85ed33 93 data(0x05);
simon 0:ff874f85ed33 94 command(0x36); // madctl
Capper 3:51cb48ebad3e 95 data(0x00); // vertical RAM, flip x was 60 RSC
simon 0:ff874f85ed33 96 command(0x25); // setcon
Capper 3:51cb48ebad3e 97 data(0x40);// contrast was 0x30 RSC
simon 0:ff874f85ed33 98 wait_ms(2);
simon 0:ff874f85ed33 99 command(0x29);//DISPON
simon 0:ff874f85ed33 100 command(0x03);//BSTRON
simon 0:ff874f85ed33 101 break;
simon 0:ff874f85ed33 102 }
simon 0:ff874f85ed33 103
simon 0:ff874f85ed33 104 _cs = 1;
simon 0:ff874f85ed33 105
simon 0:ff874f85ed33 106 cls();
simon 0:ff874f85ed33 107 }
simon 0:ff874f85ed33 108
simon 0:ff874f85ed33 109 void NokiaLCD::command(int value) {
simon 0:ff874f85ed33 110 _spi.write(value & 0xFF);
simon 0:ff874f85ed33 111 }
simon 0:ff874f85ed33 112
simon 0:ff874f85ed33 113 void NokiaLCD::data(int value) {
simon 0:ff874f85ed33 114 _spi.write(value | 0x100);
simon 0:ff874f85ed33 115 }
simon 0:ff874f85ed33 116
simon 0:ff874f85ed33 117 void NokiaLCD::_window(int x, int y, int width, int height) {
simon 0:ff874f85ed33 118 int x1 = x + 2;
simon 0:ff874f85ed33 119 int y1 = y + 0;
simon 0:ff874f85ed33 120 int x2 = x1 + width - 1;
simon 0:ff874f85ed33 121 int y2 = y1 + height - 1;
simon 0:ff874f85ed33 122
simon 0:ff874f85ed33 123 switch (_type) {
simon 0:ff874f85ed33 124 case LCD6100:
simon 0:ff874f85ed33 125 case LCD6610:
simon 0:ff874f85ed33 126 command(0x15); // column
simon 0:ff874f85ed33 127 data(x1);
simon 0:ff874f85ed33 128 data(x2);
simon 0:ff874f85ed33 129 command(0x75); // row
simon 0:ff874f85ed33 130 data(y1);
simon 0:ff874f85ed33 131 data(y2);
simon 0:ff874f85ed33 132 command(0x5C); // start write to ram
simon 0:ff874f85ed33 133 break;
simon 0:ff874f85ed33 134 case PCF8833:
simon 0:ff874f85ed33 135 command(0x2A); // column
simon 0:ff874f85ed33 136 data(x1);
simon 0:ff874f85ed33 137 data(x2);
simon 0:ff874f85ed33 138 command(0x2B); // row
simon 0:ff874f85ed33 139 data(y1);
simon 0:ff874f85ed33 140 data(y2);
simon 0:ff874f85ed33 141 command(0x2C); // start write to ram
simon 0:ff874f85ed33 142 break;
simon 0:ff874f85ed33 143 }
simon 0:ff874f85ed33 144 }
simon 0:ff874f85ed33 145
simon 0:ff874f85ed33 146 void NokiaLCD::_putp(int colour) {
simon 0:ff874f85ed33 147 int gr = ((colour >> 20) & 0x0F)
simon 0:ff874f85ed33 148 | ((colour >> 8 ) & 0xF0);
simon 0:ff874f85ed33 149 int nb = ((colour >> 4 ) & 0x0F);
simon 0:ff874f85ed33 150 data(nb);
simon 0:ff874f85ed33 151 data(gr);
simon 0:ff874f85ed33 152 }
simon 0:ff874f85ed33 153
simon 0:ff874f85ed33 154 const unsigned char FONT8x8[97][8] = {
simon 0:ff874f85ed33 155 0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char
simon 0:ff874f85ed33 156 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
simon 0:ff874f85ed33 157 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
simon 0:ff874f85ed33 158 0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
simon 0:ff874f85ed33 159 0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
simon 0:ff874f85ed33 160 0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
simon 0:ff874f85ed33 161 0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
simon 0:ff874f85ed33 162 0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
simon 0:ff874f85ed33 163 0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
simon 0:ff874f85ed33 164 0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
simon 0:ff874f85ed33 165 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
simon 0:ff874f85ed33 166 0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
simon 0:ff874f85ed33 167 0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
simon 0:ff874f85ed33 168 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
simon 0:ff874f85ed33 169 0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
simon 0:ff874f85ed33 170 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
simon 0:ff874f85ed33 171 0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash)
simon 0:ff874f85ed33 172 0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
simon 0:ff874f85ed33 173 0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
simon 0:ff874f85ed33 174 0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
simon 0:ff874f85ed33 175 0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
simon 0:ff874f85ed33 176 0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
simon 0:ff874f85ed33 177 0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
simon 0:ff874f85ed33 178 0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
simon 0:ff874f85ed33 179 0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
simon 0:ff874f85ed33 180 0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
simon 0:ff874f85ed33 181 0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
simon 0:ff874f85ed33 182 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
simon 0:ff874f85ed33 183 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
simon 0:ff874f85ed33 184 0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
simon 0:ff874f85ed33 185 0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
simon 0:ff874f85ed33 186 0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
simon 0:ff874f85ed33 187 0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
simon 0:ff874f85ed33 188 0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
simon 0:ff874f85ed33 189 0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
simon 0:ff874f85ed33 190 0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
simon 0:ff874f85ed33 191 0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
simon 0:ff874f85ed33 192 0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
simon 0:ff874f85ed33 193 0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
simon 0:ff874f85ed33 194 0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
simon 0:ff874f85ed33 195 0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
simon 0:ff874f85ed33 196 0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
simon 0:ff874f85ed33 197 0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
simon 0:ff874f85ed33 198 0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
simon 0:ff874f85ed33 199 0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
simon 0:ff874f85ed33 200 0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
simon 0:ff874f85ed33 201 0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
simon 0:ff874f85ed33 202 0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
simon 0:ff874f85ed33 203 0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
simon 0:ff874f85ed33 204 0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
simon 0:ff874f85ed33 205 0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
simon 0:ff874f85ed33 206 0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
simon 0:ff874f85ed33 207 0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
simon 0:ff874f85ed33 208 0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
simon 0:ff874f85ed33 209 0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
simon 0:ff874f85ed33 210 0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
simon 0:ff874f85ed33 211 0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
simon 0:ff874f85ed33 212 0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
simon 0:ff874f85ed33 213 0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
simon 0:ff874f85ed33 214 0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
simon 0:ff874f85ed33 215 0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
simon 0:ff874f85ed33 216 0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
simon 0:ff874f85ed33 217 0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
simon 0:ff874f85ed33 218 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
simon 0:ff874f85ed33 219 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
simon 0:ff874f85ed33 220 0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
simon 0:ff874f85ed33 221 0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
simon 0:ff874f85ed33 222 0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
simon 0:ff874f85ed33 223 0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
simon 0:ff874f85ed33 224 0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
simon 0:ff874f85ed33 225 0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
simon 0:ff874f85ed33 226 0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
simon 0:ff874f85ed33 227 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
simon 0:ff874f85ed33 228 0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
simon 0:ff874f85ed33 229 0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
simon 0:ff874f85ed33 230 0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
simon 0:ff874f85ed33 231 0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
simon 0:ff874f85ed33 232 0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
simon 0:ff874f85ed33 233 0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
simon 0:ff874f85ed33 234 0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
simon 0:ff874f85ed33 235 0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
simon 0:ff874f85ed33 236 0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p
simon 0:ff874f85ed33 237 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
simon 0:ff874f85ed33 238 0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
simon 0:ff874f85ed33 239 0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
simon 0:ff874f85ed33 240 0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
simon 0:ff874f85ed33 241 0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
simon 0:ff874f85ed33 242 0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
simon 0:ff874f85ed33 243 0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
simon 0:ff874f85ed33 244 0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
simon 0:ff874f85ed33 245 0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
simon 0:ff874f85ed33 246 0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
simon 0:ff874f85ed33 247 0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
simon 0:ff874f85ed33 248 0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
simon 0:ff874f85ed33 249 0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
simon 0:ff874f85ed33 250 0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
simon 0:ff874f85ed33 251 0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00
simon 0:ff874f85ed33 252 }; // DEL
simon 0:ff874f85ed33 253
simon 0:ff874f85ed33 254 void NokiaLCD::locate(int column, int row) {
simon 0:ff874f85ed33 255 _column = column;
simon 0:ff874f85ed33 256 _row = row;
simon 0:ff874f85ed33 257 }
simon 0:ff874f85ed33 258
simon 0:ff874f85ed33 259 void NokiaLCD::newline() {
simon 0:ff874f85ed33 260 _column = 0;
simon 0:ff874f85ed33 261 _row++;
simon 0:ff874f85ed33 262 if (_row >= _rows) {
simon 0:ff874f85ed33 263 _row = 0;
simon 0:ff874f85ed33 264 }
simon 0:ff874f85ed33 265 }
simon 0:ff874f85ed33 266
simon 0:ff874f85ed33 267 int NokiaLCD::_putc(int value) {
simon 0:ff874f85ed33 268 int x = _column * 8; // FIXME: Char sizes
simon 0:ff874f85ed33 269 int y = _row * 8;
simon 0:ff874f85ed33 270 bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
simon 0:ff874f85ed33 271
simon 0:ff874f85ed33 272 _column++;
simon 0:ff874f85ed33 273
simon 0:ff874f85ed33 274 if (_column >= NOKIALCD_COLS) {
simon 0:ff874f85ed33 275 _row++;
simon 0:ff874f85ed33 276 _column = 0;
simon 0:ff874f85ed33 277 }
simon 0:ff874f85ed33 278
simon 0:ff874f85ed33 279 if (_row >= NOKIALCD_ROWS) {
simon 0:ff874f85ed33 280 _row = 0;
simon 0:ff874f85ed33 281 }
simon 0:ff874f85ed33 282
simon 0:ff874f85ed33 283 return value;
simon 0:ff874f85ed33 284 }
simon 0:ff874f85ed33 285
simon 0:ff874f85ed33 286 void NokiaLCD::cls() {
simon 0:ff874f85ed33 287 fill(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT, _background);
simon 0:ff874f85ed33 288 _row = 0;
simon 0:ff874f85ed33 289 _column = 0;
simon 0:ff874f85ed33 290 }
simon 0:ff874f85ed33 291
simon 0:ff874f85ed33 292
simon 0:ff874f85ed33 293 void NokiaLCD::window(int x, int y, int width, int height) {
simon 0:ff874f85ed33 294 _cs = 0;
simon 0:ff874f85ed33 295 _window(x, y, width, height);
simon 0:ff874f85ed33 296 _cs = 1;
simon 0:ff874f85ed33 297 }
simon 0:ff874f85ed33 298
simon 0:ff874f85ed33 299 void NokiaLCD::putp(int colour) {
simon 0:ff874f85ed33 300 _cs = 0;
simon 0:ff874f85ed33 301 _putp(colour);
simon 0:ff874f85ed33 302 _cs = 1;
simon 0:ff874f85ed33 303 }
simon 0:ff874f85ed33 304
simon 0:ff874f85ed33 305 void NokiaLCD::pixel(int x, int y, int colour) {
simon 0:ff874f85ed33 306 _cs = 0;
simon 0:ff874f85ed33 307 _window(x, y, 1, 1);
simon 0:ff874f85ed33 308 _putp(colour);
simon 0:ff874f85ed33 309 _cs = 1;
simon 0:ff874f85ed33 310 }
simon 0:ff874f85ed33 311
simon 0:ff874f85ed33 312 void NokiaLCD::fill(int x, int y, int width, int height, int colour) {
simon 0:ff874f85ed33 313 _cs = 0;
simon 0:ff874f85ed33 314 _window(x, y, width, height);
simon 1:8f005b0dcfa7 315 switch (_type) {
simon 1:8f005b0dcfa7 316 case LCD6100:
simon 1:8f005b0dcfa7 317 case PCF8833:
simon 1:8f005b0dcfa7 318 for (int i=0; i<width*height; i++) {
simon 1:8f005b0dcfa7 319 _putp(colour);
simon 1:8f005b0dcfa7 320 }
simon 1:8f005b0dcfa7 321 break;
simon 1:8f005b0dcfa7 322 case LCD6610:
simon 1:8f005b0dcfa7 323 for (int i=0; i<width*height/2; i++) {
simon 1:8f005b0dcfa7 324 int r4 = (colour >> (16 + 4)) & 0xF;
simon 1:8f005b0dcfa7 325 int g4 = (colour >> (8 + 4)) & 0xF;
simon 1:8f005b0dcfa7 326 int b4 = (colour >> (0 + 4)) & 0xF;
simon 1:8f005b0dcfa7 327 int d1 = (r4 << 4) | g4;
simon 1:8f005b0dcfa7 328 int d2 = (b4 << 4) | r4;
simon 1:8f005b0dcfa7 329 int d3 = (g4 << 4) | b4;
simon 1:8f005b0dcfa7 330 data(d1);
simon 1:8f005b0dcfa7 331 data(d2);
simon 1:8f005b0dcfa7 332 data(d3);
simon 1:8f005b0dcfa7 333 }
simon 1:8f005b0dcfa7 334 break;
simon 0:ff874f85ed33 335 }
simon 0:ff874f85ed33 336 _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT);
simon 0:ff874f85ed33 337 _cs = 1;
simon 0:ff874f85ed33 338 }
simon 0:ff874f85ed33 339
simon 0:ff874f85ed33 340 void NokiaLCD::blit(int x, int y, int width, int height, const int* colour) {
simon 0:ff874f85ed33 341 _cs = 0;
simon 0:ff874f85ed33 342 _window(x, y, width, height);
simon 1:8f005b0dcfa7 343
simon 1:8f005b0dcfa7 344 switch (_type) {
simon 1:8f005b0dcfa7 345 case LCD6100:
simon 1:8f005b0dcfa7 346 case PCF8833:
simon 1:8f005b0dcfa7 347 for (int i=0; i<width*height; i++) {
simon 1:8f005b0dcfa7 348 _putp(colour[i]);
simon 1:8f005b0dcfa7 349 }
simon 1:8f005b0dcfa7 350 break;
simon 1:8f005b0dcfa7 351 case LCD6610:
simon 1:8f005b0dcfa7 352 for (int i=0; i<width*height/2; i++) {
simon 1:8f005b0dcfa7 353 int r41 = (colour[i*2] >> (16 + 4)) & 0xF;
simon 1:8f005b0dcfa7 354 int g41 = (colour[i*2] >> (8 + 4)) & 0xF;
simon 1:8f005b0dcfa7 355 int b41 = (colour[i*2] >> (0 + 4)) & 0xF;
simon 1:8f005b0dcfa7 356
simon 1:8f005b0dcfa7 357 int r42 = (colour[i*2+1] >> (16 + 4)) & 0xF;
simon 1:8f005b0dcfa7 358 int g42 = (colour[i*2+1] >> (8 + 4)) & 0xF;
simon 1:8f005b0dcfa7 359 int b42 = (colour[i*2+1] >> (0 + 4)) & 0xF;
simon 1:8f005b0dcfa7 360 int d1 = (r41 << 4) | g41;
simon 1:8f005b0dcfa7 361 int d2 = (b41 << 4) | r42;
simon 1:8f005b0dcfa7 362 int d3 = (g42 << 4) | b42;
simon 1:8f005b0dcfa7 363 data(d1);
simon 1:8f005b0dcfa7 364 data(d2);
simon 1:8f005b0dcfa7 365 data(d3);
simon 1:8f005b0dcfa7 366 }
simon 1:8f005b0dcfa7 367 break;
simon 1:8f005b0dcfa7 368 }
simon 0:ff874f85ed33 369 _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT);
simon 0:ff874f85ed33 370 _cs = 1;
simon 0:ff874f85ed33 371 }
simon 0:ff874f85ed33 372
simon 0:ff874f85ed33 373 void NokiaLCD::bitblit(int x, int y, int width, int height, const char* bitstream) {
simon 0:ff874f85ed33 374 _cs = 0;
simon 0:ff874f85ed33 375 _window(x, y, width, height);
simon 1:8f005b0dcfa7 376
simon 1:8f005b0dcfa7 377 switch (_type) {
simon 1:8f005b0dcfa7 378 case LCD6100:
simon 1:8f005b0dcfa7 379 case PCF8833:
simon 1:8f005b0dcfa7 380 for (int i=0; i<height*width; i++) {
simon 1:8f005b0dcfa7 381 int byte = i / 8;
simon 1:8f005b0dcfa7 382 int bit = i % 8;
simon 1:8f005b0dcfa7 383 int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background;
simon 1:8f005b0dcfa7 384 _putp(colour);
simon 1:8f005b0dcfa7 385 }
simon 1:8f005b0dcfa7 386 break;
simon 1:8f005b0dcfa7 387 case LCD6610:
simon 1:8f005b0dcfa7 388 for(int i=0; i<height*width/2; i++) {
simon 1:8f005b0dcfa7 389 int byte1 = (i*2) / 8;
simon 1:8f005b0dcfa7 390 int bit1 = (i*2) % 8;
simon 1:8f005b0dcfa7 391 int colour1 = ((bitstream[byte1] << bit1) & 0x80) ? _foreground : _background;
simon 1:8f005b0dcfa7 392 int byte2 = (i*2+1) / 8;
simon 1:8f005b0dcfa7 393 int bit2 = (i*2+1) % 8;
simon 1:8f005b0dcfa7 394 int colour2 = ((bitstream[byte2] << bit2) & 0x80) ? _foreground : _background;
simon 1:8f005b0dcfa7 395
simon 1:8f005b0dcfa7 396 int r41 = (colour1 >> (16 + 4)) & 0xF;
simon 1:8f005b0dcfa7 397 int g41 = (colour1 >> (8 + 4)) & 0xF;
simon 1:8f005b0dcfa7 398 int b41 = (colour1 >> (0 + 4)) & 0xF;
simon 1:8f005b0dcfa7 399
simon 1:8f005b0dcfa7 400 int r42 = (colour2 >> (16 + 4)) & 0xF;
simon 1:8f005b0dcfa7 401 int g42 = (colour2 >> (8 + 4)) & 0xF;
simon 1:8f005b0dcfa7 402 int b42 = (colour2 >> (0 + 4)) & 0xF;
simon 1:8f005b0dcfa7 403 int d1 = (r41 << 4) | g41;
simon 1:8f005b0dcfa7 404 int d2 = (b41 << 4) | r42;
simon 1:8f005b0dcfa7 405 int d3 = (g42 << 4) | b42;
simon 1:8f005b0dcfa7 406 data(d1);
simon 1:8f005b0dcfa7 407 data(d2);
simon 1:8f005b0dcfa7 408 data(d3);
simon 1:8f005b0dcfa7 409 }
simon 1:8f005b0dcfa7 410 break;
simon 1:8f005b0dcfa7 411 }
simon 0:ff874f85ed33 412 _window(0, 0, _width, _height);
simon 0:ff874f85ed33 413 _cs = 1;
simon 0:ff874f85ed33 414 }
simon 0:ff874f85ed33 415
simon 0:ff874f85ed33 416 void NokiaLCD::foreground(int c) {
simon 0:ff874f85ed33 417 _foreground = c;
simon 0:ff874f85ed33 418 }
simon 0:ff874f85ed33 419
simon 0:ff874f85ed33 420 void NokiaLCD::background(int c) {
simon 0:ff874f85ed33 421 _background = c;
simon 0:ff874f85ed33 422 }
simon 0:ff874f85ed33 423
simon 0:ff874f85ed33 424 int NokiaLCD::width() {
simon 0:ff874f85ed33 425 return NOKIALCD_WIDTH;
simon 0:ff874f85ed33 426 }
simon 0:ff874f85ed33 427
simon 0:ff874f85ed33 428 int NokiaLCD::height() {
simon 0:ff874f85ed33 429 return NOKIALCD_HEIGHT;
simon 0:ff874f85ed33 430 }
simon 0:ff874f85ed33 431
simon 0:ff874f85ed33 432 int NokiaLCD::columns() {
simon 0:ff874f85ed33 433 return NOKIALCD_COLS;
simon 0:ff874f85ed33 434 }
simon 0:ff874f85ed33 435
simon 0:ff874f85ed33 436 int NokiaLCD::rows() {
simon 0:ff874f85ed33 437 return NOKIALCD_ROWS;
simon 0:ff874f85ed33 438 }