DCF77 Atomic clock using Nokia 6610 colour LCD display. This will continue to run with no signal and shows a graphic bit map display demonstrating the time build. Does not use the Mbed RTC so will run on the LPC11U24. The main signal timing is achieved by using a Ticker ISR that looks at the DCF signal input every 50mS this also produces the seconds on the local clock incase of signal errors or no signal. Many thanks to Lynton Towler for the idea of this part of the code and Wim who helped me convert it from an Arduino program. The Parity code was fromHans program that works.

Dependencies:   mbed

/media/uploads/star297/_scaled_20130306_221042.jpg

Re published due to error in title.

I have also updated the 'Leap' year print code as that was incorrect.

This program works on the both Mbed's (LPC1768 and LPC11U24)

Committer:
star297
Date:
Tue Mar 19 11:25:13 2013 +0000
Revision:
2:31f5b5d56af6
Parent:
1:cad87f63a115
Leap indicator correction

Who changed what in which revision?

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