Library for Sparkfun Color LCD 130x130 Breakout Board, sku LCD-11062, which uses driver Philips PCF8833 http://www.sparkfun.com/products/11062

Committer:
VirtualMan
Date:
Fri Jun 08 23:10:45 2012 +0000
Revision:
0:99f53140ef2b
Firts revision, ver. 1.0

Who changed what in which revision?

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