Library for Sparkfun Color LCD 130x130 Breakout Board, sku LCD-11062, which uses driver Philips PCF8833 http://www.sparkfun.com/products/11062
LCD_11062.cpp@0:99f53140ef2b, 2012-06-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |