Nokia LCD Controller for Philips PCF8833 controller marked "X3"

Dependencies:   mbed

Committer:
PhilG1300
Date:
Tue Dec 01 08:41:43 2009 +0000
Revision:
0:d1a5b2ebfc8a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PhilG1300 0:d1a5b2ebfc8a 1 /* mbed Library - Nokia LCD Labelled "X3"
PhilG1300 0:d1a5b2ebfc8a 2 * This is using the Philips PCF8833 controller
PhilG1300 0:d1a5b2ebfc8a 3 * Copyright (c) 2009 P.R.Green
PhilG1300 0:d1a5b2ebfc8a 4 */
PhilG1300 0:d1a5b2ebfc8a 5
PhilG1300 0:d1a5b2ebfc8a 6 #include "MobileLCD.h"
PhilG1300 0:d1a5b2ebfc8a 7
PhilG1300 0:d1a5b2ebfc8a 8 #include "mbed.h"
PhilG1300 0:d1a5b2ebfc8a 9
PhilG1300 0:d1a5b2ebfc8a 10 using namespace mbed;
PhilG1300 0:d1a5b2ebfc8a 11
PhilG1300 0:d1a5b2ebfc8a 12 MobileLCD::MobileLCD(PinName mosi, PinName miso, PinName clk, PinName cs, PinName rst)
PhilG1300 0:d1a5b2ebfc8a 13 : _spi(mosi, miso, clk)
PhilG1300 0:d1a5b2ebfc8a 14 , _rst(rst)
PhilG1300 0:d1a5b2ebfc8a 15 , _cs(cs) {
PhilG1300 0:d1a5b2ebfc8a 16 _row = 0;
PhilG1300 0:d1a5b2ebfc8a 17 _column = 0;
PhilG1300 0:d1a5b2ebfc8a 18 _rows = 16;
PhilG1300 0:d1a5b2ebfc8a 19 _columns = 16;
PhilG1300 0:d1a5b2ebfc8a 20 _width = 130;
PhilG1300 0:d1a5b2ebfc8a 21 _height = 130;
PhilG1300 0:d1a5b2ebfc8a 22 foreground(0xFFFF);
PhilG1300 0:d1a5b2ebfc8a 23 background(0x0000);
PhilG1300 0:d1a5b2ebfc8a 24 reset();
PhilG1300 0:d1a5b2ebfc8a 25 }
PhilG1300 0:d1a5b2ebfc8a 26
PhilG1300 0:d1a5b2ebfc8a 27 void MobileLCD::reset() {
PhilG1300 0:d1a5b2ebfc8a 28 long i;
PhilG1300 0:d1a5b2ebfc8a 29 _cs = 1;
PhilG1300 0:d1a5b2ebfc8a 30 _rst = 0;
PhilG1300 0:d1a5b2ebfc8a 31 _spi.format(9);
PhilG1300 0:d1a5b2ebfc8a 32 _spi.frequency(5000000);
PhilG1300 0:d1a5b2ebfc8a 33 wait(0.020);
PhilG1300 0:d1a5b2ebfc8a 34 _rst = 1;
PhilG1300 0:d1a5b2ebfc8a 35 wait(0.020);
PhilG1300 0:d1a5b2ebfc8a 36 _select();
PhilG1300 0:d1a5b2ebfc8a 37 command(0x11);//SLEEPOUT
PhilG1300 0:d1a5b2ebfc8a 38 command(0x3A);//COLMOD
PhilG1300 0:d1a5b2ebfc8a 39 data(0x05);//0x03 = 16bits-per-pixel 5:6:5 mode
PhilG1300 0:d1a5b2ebfc8a 40 command(0x36);//MADCTL
PhilG1300 0:d1a5b2ebfc8a 41 data(0x60);// 0x60 = mirror x, vertical RAM write
PhilG1300 0:d1a5b2ebfc8a 42 command(0x25);//SETCON
PhilG1300 0:d1a5b2ebfc8a 43 data(0x30);// contrast 0x30
PhilG1300 0:d1a5b2ebfc8a 44 wait(0.002);
PhilG1300 0:d1a5b2ebfc8a 45 command(0x29);//DISPON
PhilG1300 0:d1a5b2ebfc8a 46 command(0x03);//BSTRON
PhilG1300 0:d1a5b2ebfc8a 47
PhilG1300 0:d1a5b2ebfc8a 48 command(0x2B);//Row Address Set
PhilG1300 0:d1a5b2ebfc8a 49 data(0);
PhilG1300 0:d1a5b2ebfc8a 50 data(131);
PhilG1300 0:d1a5b2ebfc8a 51
PhilG1300 0:d1a5b2ebfc8a 52 command(0x2A);//Column Address Set
PhilG1300 0:d1a5b2ebfc8a 53 data(0);
PhilG1300 0:d1a5b2ebfc8a 54 data(131);
PhilG1300 0:d1a5b2ebfc8a 55
PhilG1300 0:d1a5b2ebfc8a 56 command(0x2C);//RAMWR
PhilG1300 0:d1a5b2ebfc8a 57 //Clear RAM to black
PhilG1300 0:d1a5b2ebfc8a 58 for (i=0; i < (132 * 132); i++) {
PhilG1300 0:d1a5b2ebfc8a 59 data(0);
PhilG1300 0:d1a5b2ebfc8a 60 data(0);
PhilG1300 0:d1a5b2ebfc8a 61 }
PhilG1300 0:d1a5b2ebfc8a 62 _deselect();
PhilG1300 0:d1a5b2ebfc8a 63 }
PhilG1300 0:d1a5b2ebfc8a 64
PhilG1300 0:d1a5b2ebfc8a 65 void MobileLCD::command(int value) {
PhilG1300 0:d1a5b2ebfc8a 66 _spi.write(value & 0xFF);
PhilG1300 0:d1a5b2ebfc8a 67 }
PhilG1300 0:d1a5b2ebfc8a 68
PhilG1300 0:d1a5b2ebfc8a 69 void MobileLCD::data(int value) {
PhilG1300 0:d1a5b2ebfc8a 70 _spi.write(value | 0x100);
PhilG1300 0:d1a5b2ebfc8a 71 }
PhilG1300 0:d1a5b2ebfc8a 72
PhilG1300 0:d1a5b2ebfc8a 73 void MobileLCD::_select() {
PhilG1300 0:d1a5b2ebfc8a 74 _spi.format(9);
PhilG1300 0:d1a5b2ebfc8a 75 _spi.frequency(5000000);
PhilG1300 0:d1a5b2ebfc8a 76 _cs = 0;
PhilG1300 0:d1a5b2ebfc8a 77 }
PhilG1300 0:d1a5b2ebfc8a 78
PhilG1300 0:d1a5b2ebfc8a 79 void MobileLCD::_deselect() {
PhilG1300 0:d1a5b2ebfc8a 80 _cs = 1;
PhilG1300 0:d1a5b2ebfc8a 81 }
PhilG1300 0:d1a5b2ebfc8a 82
PhilG1300 0:d1a5b2ebfc8a 83 void MobileLCD::_window(int x, int y, int width, int height) {
PhilG1300 0:d1a5b2ebfc8a 84 int x1, x2, y1, y2;
PhilG1300 0:d1a5b2ebfc8a 85 switch (0) { //_rotation) {
PhilG1300 0:d1a5b2ebfc8a 86 default:
PhilG1300 0:d1a5b2ebfc8a 87 case 0:
PhilG1300 0:d1a5b2ebfc8a 88 x1 = x + 1;
PhilG1300 0:d1a5b2ebfc8a 89 y1 = y + 1;
PhilG1300 0:d1a5b2ebfc8a 90 x2 = x1 + width - 1;
PhilG1300 0:d1a5b2ebfc8a 91 y2 = y1 + height -1 ;
PhilG1300 0:d1a5b2ebfc8a 92 break;
PhilG1300 0:d1a5b2ebfc8a 93 case 1:
PhilG1300 0:d1a5b2ebfc8a 94 x1 = y + 1;
PhilG1300 0:d1a5b2ebfc8a 95 y1 = x + 1;
PhilG1300 0:d1a5b2ebfc8a 96 x2 = x1 + height - 1;
PhilG1300 0:d1a5b2ebfc8a 97 y2 = y1 + width - 1;
PhilG1300 0:d1a5b2ebfc8a 98 break;
PhilG1300 0:d1a5b2ebfc8a 99 case 2:
PhilG1300 0:d1a5b2ebfc8a 100 x1 = x + 1;
PhilG1300 0:d1a5b2ebfc8a 101 y1 = y + 3;
PhilG1300 0:d1a5b2ebfc8a 102 x2 = x1 + width - 1;
PhilG1300 0:d1a5b2ebfc8a 103 y2 = y1 + height - 1;
PhilG1300 0:d1a5b2ebfc8a 104 break;
PhilG1300 0:d1a5b2ebfc8a 105 case 3:
PhilG1300 0:d1a5b2ebfc8a 106 x1 = y + 3;
PhilG1300 0:d1a5b2ebfc8a 107 y1 = x + 3;
PhilG1300 0:d1a5b2ebfc8a 108 x2 = x1 + height - 1;
PhilG1300 0:d1a5b2ebfc8a 109 y2 = y1 + width - 1;
PhilG1300 0:d1a5b2ebfc8a 110 break;
PhilG1300 0:d1a5b2ebfc8a 111 }
PhilG1300 0:d1a5b2ebfc8a 112 command(0x2A); //CASET column
PhilG1300 0:d1a5b2ebfc8a 113 data(x1);
PhilG1300 0:d1a5b2ebfc8a 114 data(x2);
PhilG1300 0:d1a5b2ebfc8a 115 command(0x2B); //PASET page
PhilG1300 0:d1a5b2ebfc8a 116 data(y1);
PhilG1300 0:d1a5b2ebfc8a 117 data(y2);
PhilG1300 0:d1a5b2ebfc8a 118 command(0x2C); //RAMWR start write to ram
PhilG1300 0:d1a5b2ebfc8a 119 }
PhilG1300 0:d1a5b2ebfc8a 120
PhilG1300 0:d1a5b2ebfc8a 121 void MobileLCD::_putp(int colour) {
PhilG1300 0:d1a5b2ebfc8a 122
PhilG1300 0:d1a5b2ebfc8a 123 data((colour >> 8) & 0xFF);
PhilG1300 0:d1a5b2ebfc8a 124 data(colour & 0xFF);
PhilG1300 0:d1a5b2ebfc8a 125
PhilG1300 0:d1a5b2ebfc8a 126 }
PhilG1300 0:d1a5b2ebfc8a 127 /*
PhilG1300 0:d1a5b2ebfc8a 128 void MobileLCD::orientation() {
PhilG1300 0:d1a5b2ebfc8a 129 int m;
PhilG1300 0:d1a5b2ebfc8a 130 switch (0) { //_rotation) {
PhilG1300 0:d1a5b2ebfc8a 131 case 0:
PhilG1300 0:d1a5b2ebfc8a 132 default:
PhilG1300 0:d1a5b2ebfc8a 133 m = 3;
PhilG1300 0:d1a5b2ebfc8a 134 break;
PhilG1300 0:d1a5b2ebfc8a 135 case 2:
PhilG1300 0:d1a5b2ebfc8a 136 m = 0;
PhilG1300 0:d1a5b2ebfc8a 137 break;
PhilG1300 0:d1a5b2ebfc8a 138 case 1:
PhilG1300 0:d1a5b2ebfc8a 139 m = 5;
PhilG1300 0:d1a5b2ebfc8a 140 break;
PhilG1300 0:d1a5b2ebfc8a 141 case 3:
PhilG1300 0:d1a5b2ebfc8a 142 m = 6;
PhilG1300 0:d1a5b2ebfc8a 143 break;
PhilG1300 0:d1a5b2ebfc8a 144 }
PhilG1300 0:d1a5b2ebfc8a 145
PhilG1300 0:d1a5b2ebfc8a 146 command(0xBC); // data control
PhilG1300 0:d1a5b2ebfc8a 147 data(m); // scan dirs
PhilG1300 0:d1a5b2ebfc8a 148 data(1); // RGB
PhilG1300 0:d1a5b2ebfc8a 149 data(4); // grayscale
PhilG1300 0:d1a5b2ebfc8a 150 }
PhilG1300 0:d1a5b2ebfc8a 151 */
PhilG1300 0:d1a5b2ebfc8a 152
PhilG1300 0:d1a5b2ebfc8a 153 const unsigned char FONT8x8[97][8] = {
PhilG1300 0:d1a5b2ebfc8a 154 0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char
PhilG1300 0:d1a5b2ebfc8a 155 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
PhilG1300 0:d1a5b2ebfc8a 156 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
PhilG1300 0:d1a5b2ebfc8a 157 0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
PhilG1300 0:d1a5b2ebfc8a 158 0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
PhilG1300 0:d1a5b2ebfc8a 159 0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
PhilG1300 0:d1a5b2ebfc8a 160 0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
PhilG1300 0:d1a5b2ebfc8a 161 0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
PhilG1300 0:d1a5b2ebfc8a 162 0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
PhilG1300 0:d1a5b2ebfc8a 163 0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
PhilG1300 0:d1a5b2ebfc8a 164 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
PhilG1300 0:d1a5b2ebfc8a 165 0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
PhilG1300 0:d1a5b2ebfc8a 166 0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
PhilG1300 0:d1a5b2ebfc8a 167 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
PhilG1300 0:d1a5b2ebfc8a 168 0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
PhilG1300 0:d1a5b2ebfc8a 169 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
PhilG1300 0:d1a5b2ebfc8a 170 0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash)
PhilG1300 0:d1a5b2ebfc8a 171 0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
PhilG1300 0:d1a5b2ebfc8a 172 0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
PhilG1300 0:d1a5b2ebfc8a 173 0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
PhilG1300 0:d1a5b2ebfc8a 174 0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
PhilG1300 0:d1a5b2ebfc8a 175 0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
PhilG1300 0:d1a5b2ebfc8a 176 0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
PhilG1300 0:d1a5b2ebfc8a 177 0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
PhilG1300 0:d1a5b2ebfc8a 178 0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
PhilG1300 0:d1a5b2ebfc8a 179 0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
PhilG1300 0:d1a5b2ebfc8a 180 0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
PhilG1300 0:d1a5b2ebfc8a 181 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
PhilG1300 0:d1a5b2ebfc8a 182 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
PhilG1300 0:d1a5b2ebfc8a 183 0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
PhilG1300 0:d1a5b2ebfc8a 184 0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
PhilG1300 0:d1a5b2ebfc8a 185 0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
PhilG1300 0:d1a5b2ebfc8a 186 0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
PhilG1300 0:d1a5b2ebfc8a 187 0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
PhilG1300 0:d1a5b2ebfc8a 188 0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
PhilG1300 0:d1a5b2ebfc8a 189 0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
PhilG1300 0:d1a5b2ebfc8a 190 0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
PhilG1300 0:d1a5b2ebfc8a 191 0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
PhilG1300 0:d1a5b2ebfc8a 192 0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
PhilG1300 0:d1a5b2ebfc8a 193 0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
PhilG1300 0:d1a5b2ebfc8a 194 0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
PhilG1300 0:d1a5b2ebfc8a 195 0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
PhilG1300 0:d1a5b2ebfc8a 196 0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
PhilG1300 0:d1a5b2ebfc8a 197 0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
PhilG1300 0:d1a5b2ebfc8a 198 0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
PhilG1300 0:d1a5b2ebfc8a 199 0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
PhilG1300 0:d1a5b2ebfc8a 200 0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
PhilG1300 0:d1a5b2ebfc8a 201 0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
PhilG1300 0:d1a5b2ebfc8a 202 0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
PhilG1300 0:d1a5b2ebfc8a 203 0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
PhilG1300 0:d1a5b2ebfc8a 204 0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
PhilG1300 0:d1a5b2ebfc8a 205 0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
PhilG1300 0:d1a5b2ebfc8a 206 0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
PhilG1300 0:d1a5b2ebfc8a 207 0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
PhilG1300 0:d1a5b2ebfc8a 208 0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
PhilG1300 0:d1a5b2ebfc8a 209 0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
PhilG1300 0:d1a5b2ebfc8a 210 0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
PhilG1300 0:d1a5b2ebfc8a 211 0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
PhilG1300 0:d1a5b2ebfc8a 212 0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
PhilG1300 0:d1a5b2ebfc8a 213 0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
PhilG1300 0:d1a5b2ebfc8a 214 0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
PhilG1300 0:d1a5b2ebfc8a 215 0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
PhilG1300 0:d1a5b2ebfc8a 216 0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
PhilG1300 0:d1a5b2ebfc8a 217 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
PhilG1300 0:d1a5b2ebfc8a 218 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
PhilG1300 0:d1a5b2ebfc8a 219 0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
PhilG1300 0:d1a5b2ebfc8a 220 0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
PhilG1300 0:d1a5b2ebfc8a 221 0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
PhilG1300 0:d1a5b2ebfc8a 222 0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
PhilG1300 0:d1a5b2ebfc8a 223 0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
PhilG1300 0:d1a5b2ebfc8a 224 0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
PhilG1300 0:d1a5b2ebfc8a 225 0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
PhilG1300 0:d1a5b2ebfc8a 226 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
PhilG1300 0:d1a5b2ebfc8a 227 0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
PhilG1300 0:d1a5b2ebfc8a 228 0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
PhilG1300 0:d1a5b2ebfc8a 229 0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
PhilG1300 0:d1a5b2ebfc8a 230 0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
PhilG1300 0:d1a5b2ebfc8a 231 0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
PhilG1300 0:d1a5b2ebfc8a 232 0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
PhilG1300 0:d1a5b2ebfc8a 233 0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
PhilG1300 0:d1a5b2ebfc8a 234 0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
PhilG1300 0:d1a5b2ebfc8a 235 0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p
PhilG1300 0:d1a5b2ebfc8a 236 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
PhilG1300 0:d1a5b2ebfc8a 237 0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
PhilG1300 0:d1a5b2ebfc8a 238 0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
PhilG1300 0:d1a5b2ebfc8a 239 0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
PhilG1300 0:d1a5b2ebfc8a 240 0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
PhilG1300 0:d1a5b2ebfc8a 241 0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
PhilG1300 0:d1a5b2ebfc8a 242 0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
PhilG1300 0:d1a5b2ebfc8a 243 0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
PhilG1300 0:d1a5b2ebfc8a 244 0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
PhilG1300 0:d1a5b2ebfc8a 245 0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
PhilG1300 0:d1a5b2ebfc8a 246 0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
PhilG1300 0:d1a5b2ebfc8a 247 0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
PhilG1300 0:d1a5b2ebfc8a 248 0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
PhilG1300 0:d1a5b2ebfc8a 249 0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
PhilG1300 0:d1a5b2ebfc8a 250 0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00
PhilG1300 0:d1a5b2ebfc8a 251 }; // DEL
PhilG1300 0:d1a5b2ebfc8a 252
PhilG1300 0:d1a5b2ebfc8a 253 void MobileLCD::locate(int column, int row) {
PhilG1300 0:d1a5b2ebfc8a 254 _row = row;
PhilG1300 0:d1a5b2ebfc8a 255 _column = column;
PhilG1300 0:d1a5b2ebfc8a 256 }
PhilG1300 0:d1a5b2ebfc8a 257
PhilG1300 0:d1a5b2ebfc8a 258 void MobileLCD::newline() {
PhilG1300 0:d1a5b2ebfc8a 259 _column = 0;
PhilG1300 0:d1a5b2ebfc8a 260 _row++;
PhilG1300 0:d1a5b2ebfc8a 261 if (_row >= _rows) {
PhilG1300 0:d1a5b2ebfc8a 262 _row = 0;
PhilG1300 0:d1a5b2ebfc8a 263 }
PhilG1300 0:d1a5b2ebfc8a 264 }
PhilG1300 0:d1a5b2ebfc8a 265
PhilG1300 0:d1a5b2ebfc8a 266 int MobileLCD::_putc(int value) {
PhilG1300 0:d1a5b2ebfc8a 267 int x = _column * 8; // FIXME: Char sizes
PhilG1300 0:d1a5b2ebfc8a 268 int y = _row * 8;
PhilG1300 0:d1a5b2ebfc8a 269 bitblit(x , y , 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
PhilG1300 0:d1a5b2ebfc8a 270
PhilG1300 0:d1a5b2ebfc8a 271 _column++;
PhilG1300 0:d1a5b2ebfc8a 272
PhilG1300 0:d1a5b2ebfc8a 273 if (_column >= _columns) {
PhilG1300 0:d1a5b2ebfc8a 274 _row++;
PhilG1300 0:d1a5b2ebfc8a 275 _column = 0;
PhilG1300 0:d1a5b2ebfc8a 276 }
PhilG1300 0:d1a5b2ebfc8a 277
PhilG1300 0:d1a5b2ebfc8a 278 if (_row >= _rows) {
PhilG1300 0:d1a5b2ebfc8a 279 _row = 0;
PhilG1300 0:d1a5b2ebfc8a 280 }
PhilG1300 0:d1a5b2ebfc8a 281
PhilG1300 0:d1a5b2ebfc8a 282 return value;
PhilG1300 0:d1a5b2ebfc8a 283 }
PhilG1300 0:d1a5b2ebfc8a 284
PhilG1300 0:d1a5b2ebfc8a 285 void MobileLCD::cls() {
PhilG1300 0:d1a5b2ebfc8a 286 fill(0, 0, _width, _height, _background);
PhilG1300 0:d1a5b2ebfc8a 287 _row = 0;
PhilG1300 0:d1a5b2ebfc8a 288 _column = 0;
PhilG1300 0:d1a5b2ebfc8a 289 }
PhilG1300 0:d1a5b2ebfc8a 290
PhilG1300 0:d1a5b2ebfc8a 291 int MobileLCD::width() {
PhilG1300 0:d1a5b2ebfc8a 292 return _width;
PhilG1300 0:d1a5b2ebfc8a 293 }
PhilG1300 0:d1a5b2ebfc8a 294
PhilG1300 0:d1a5b2ebfc8a 295 int MobileLCD::height() {
PhilG1300 0:d1a5b2ebfc8a 296 return _height;
PhilG1300 0:d1a5b2ebfc8a 297 }
PhilG1300 0:d1a5b2ebfc8a 298
PhilG1300 0:d1a5b2ebfc8a 299 int MobileLCD::columns() {
PhilG1300 0:d1a5b2ebfc8a 300 return _columns;
PhilG1300 0:d1a5b2ebfc8a 301 }
PhilG1300 0:d1a5b2ebfc8a 302
PhilG1300 0:d1a5b2ebfc8a 303 int MobileLCD::rows() {
PhilG1300 0:d1a5b2ebfc8a 304 return _rows;
PhilG1300 0:d1a5b2ebfc8a 305 }
PhilG1300 0:d1a5b2ebfc8a 306
PhilG1300 0:d1a5b2ebfc8a 307 void MobileLCD::window(int x, int y, int width, int height) {
PhilG1300 0:d1a5b2ebfc8a 308 _select();
PhilG1300 0:d1a5b2ebfc8a 309 _window(x, y, width, height);
PhilG1300 0:d1a5b2ebfc8a 310 _deselect();
PhilG1300 0:d1a5b2ebfc8a 311 }
PhilG1300 0:d1a5b2ebfc8a 312
PhilG1300 0:d1a5b2ebfc8a 313 void MobileLCD::putp(int colour) {
PhilG1300 0:d1a5b2ebfc8a 314 _select();
PhilG1300 0:d1a5b2ebfc8a 315 _putp(colour);
PhilG1300 0:d1a5b2ebfc8a 316 _deselect();
PhilG1300 0:d1a5b2ebfc8a 317 }
PhilG1300 0:d1a5b2ebfc8a 318
PhilG1300 0:d1a5b2ebfc8a 319 void MobileLCD::pixel(int x, int y, int colour) {
PhilG1300 0:d1a5b2ebfc8a 320 _select();
PhilG1300 0:d1a5b2ebfc8a 321 _window(x, y, 1, 1);
PhilG1300 0:d1a5b2ebfc8a 322 _putp(colour);
PhilG1300 0:d1a5b2ebfc8a 323 _deselect();
PhilG1300 0:d1a5b2ebfc8a 324 }
PhilG1300 0:d1a5b2ebfc8a 325
PhilG1300 0:d1a5b2ebfc8a 326 void MobileLCD::fill(int x, int y, int width, int height, int colour) {
PhilG1300 0:d1a5b2ebfc8a 327 _select();
PhilG1300 0:d1a5b2ebfc8a 328 _window(x, y, width, height);
PhilG1300 0:d1a5b2ebfc8a 329 for (int i=0; i<width*height; i++) {
PhilG1300 0:d1a5b2ebfc8a 330 _putp(colour);
PhilG1300 0:d1a5b2ebfc8a 331 }
PhilG1300 0:d1a5b2ebfc8a 332 _window(0, 0, _width, _height);
PhilG1300 0:d1a5b2ebfc8a 333 _deselect();
PhilG1300 0:d1a5b2ebfc8a 334 }
PhilG1300 0:d1a5b2ebfc8a 335
PhilG1300 0:d1a5b2ebfc8a 336
PhilG1300 0:d1a5b2ebfc8a 337 void MobileLCD::blit(int x, int y, int width, int height, const int* colour) {
PhilG1300 0:d1a5b2ebfc8a 338 _select();
PhilG1300 0:d1a5b2ebfc8a 339 _window(x, y, width, height);
PhilG1300 0:d1a5b2ebfc8a 340 for (int i=0; i<width*height; i++) {
PhilG1300 0:d1a5b2ebfc8a 341 _putp(colour[i]);
PhilG1300 0:d1a5b2ebfc8a 342 }
PhilG1300 0:d1a5b2ebfc8a 343 _window(0, 0, _width, _height);
PhilG1300 0:d1a5b2ebfc8a 344 _deselect();
PhilG1300 0:d1a5b2ebfc8a 345 }
PhilG1300 0:d1a5b2ebfc8a 346
PhilG1300 0:d1a5b2ebfc8a 347 void MobileLCD::foreground(int v) {
PhilG1300 0:d1a5b2ebfc8a 348 _foreground = v;
PhilG1300 0:d1a5b2ebfc8a 349 }
PhilG1300 0:d1a5b2ebfc8a 350
PhilG1300 0:d1a5b2ebfc8a 351 void MobileLCD::background(int v) {
PhilG1300 0:d1a5b2ebfc8a 352 _background = v;
PhilG1300 0:d1a5b2ebfc8a 353 }
PhilG1300 0:d1a5b2ebfc8a 354
PhilG1300 0:d1a5b2ebfc8a 355 void MobileLCD::bitblit(int x, int y, int width, int height, const char* bitstream) {
PhilG1300 0:d1a5b2ebfc8a 356 _select();
PhilG1300 0:d1a5b2ebfc8a 357 _window(x, y, width, height);
PhilG1300 0:d1a5b2ebfc8a 358
PhilG1300 0:d1a5b2ebfc8a 359 for (int i=0; i<height*width; i++) {
PhilG1300 0:d1a5b2ebfc8a 360 unsigned char byte = i / 8;
PhilG1300 0:d1a5b2ebfc8a 361 unsigned char bit = i % 8;
PhilG1300 0:d1a5b2ebfc8a 362 int colour = (((bitstream[byte] << bit) & 0x80) ? _foreground : _background);
PhilG1300 0:d1a5b2ebfc8a 363 _putp(colour);
PhilG1300 0:d1a5b2ebfc8a 364 }
PhilG1300 0:d1a5b2ebfc8a 365 _window(0, 0, _width, _height);
PhilG1300 0:d1a5b2ebfc8a 366 _deselect();
PhilG1300 0:d1a5b2ebfc8a 367 }
PhilG1300 0:d1a5b2ebfc8a 368
PhilG1300 0:d1a5b2ebfc8a 369