This includes all known improvements from other people's spins on the Nokia library, including Alistair Popple's fix to the very poor contrast on newer LCD 6100 displays.

Fork of NokiaLCD by Iftekhar Choudhury

Committer:
simon
Date:
Wed Jun 09 08:02:04 2010 +0000
Revision:
0:ff874f85ed33
Child:
1:8f005b0dcfa7

        

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
simon 0:ff874f85ed33 57 data(39); // contrast setting: 0..63
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
simon 0:ff874f85ed33 95 data(0x60); // vertical RAM, flip x
simon 0:ff874f85ed33 96 command(0x25); // setcon
simon 0:ff874f85ed33 97 data(0x30);// contrast 0x30
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 0:ff874f85ed33 315 for (int i=0; i<width*height; i++) {
simon 0:ff874f85ed33 316 _putp(colour);
simon 0:ff874f85ed33 317 }
simon 0:ff874f85ed33 318 _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT);
simon 0:ff874f85ed33 319 _cs = 1;
simon 0:ff874f85ed33 320 }
simon 0:ff874f85ed33 321
simon 0:ff874f85ed33 322 void NokiaLCD::blit(int x, int y, int width, int height, const int* colour) {
simon 0:ff874f85ed33 323 _cs = 0;
simon 0:ff874f85ed33 324 _window(x, y, width, height);
simon 0:ff874f85ed33 325 for (int i=0; i<width*height; i++) {
simon 0:ff874f85ed33 326 _putp(colour[i]);
simon 0:ff874f85ed33 327 }
simon 0:ff874f85ed33 328 _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT);
simon 0:ff874f85ed33 329 _cs = 1;
simon 0:ff874f85ed33 330 }
simon 0:ff874f85ed33 331
simon 0:ff874f85ed33 332 void NokiaLCD::bitblit(int x, int y, int width, int height, const char* bitstream) {
simon 0:ff874f85ed33 333 _cs = 0;
simon 0:ff874f85ed33 334 _window(x, y, width, height);
simon 0:ff874f85ed33 335 for (int i=0; i<height*width; i++) {
simon 0:ff874f85ed33 336 int byte = i / 8;
simon 0:ff874f85ed33 337 int bit = i % 8;
simon 0:ff874f85ed33 338 int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background;
simon 0:ff874f85ed33 339 _putp(colour);
simon 0:ff874f85ed33 340 }
simon 0:ff874f85ed33 341 _window(0, 0, _width, _height);
simon 0:ff874f85ed33 342 _cs = 1;
simon 0:ff874f85ed33 343 }
simon 0:ff874f85ed33 344
simon 0:ff874f85ed33 345 void NokiaLCD::foreground(int c) {
simon 0:ff874f85ed33 346 _foreground = c;
simon 0:ff874f85ed33 347 }
simon 0:ff874f85ed33 348
simon 0:ff874f85ed33 349 void NokiaLCD::background(int c) {
simon 0:ff874f85ed33 350 _background = c;
simon 0:ff874f85ed33 351 }
simon 0:ff874f85ed33 352
simon 0:ff874f85ed33 353 int NokiaLCD::width() {
simon 0:ff874f85ed33 354 return NOKIALCD_WIDTH;
simon 0:ff874f85ed33 355 }
simon 0:ff874f85ed33 356
simon 0:ff874f85ed33 357 int NokiaLCD::height() {
simon 0:ff874f85ed33 358 return NOKIALCD_HEIGHT;
simon 0:ff874f85ed33 359 }
simon 0:ff874f85ed33 360
simon 0:ff874f85ed33 361 int NokiaLCD::columns() {
simon 0:ff874f85ed33 362 return NOKIALCD_COLS;
simon 0:ff874f85ed33 363 }
simon 0:ff874f85ed33 364
simon 0:ff874f85ed33 365 int NokiaLCD::rows() {
simon 0:ff874f85ed33 366 return NOKIALCD_ROWS;
simon 0:ff874f85ed33 367 }