Simon Ford
/
displays
MobileLCD.cpp@0:cc002f2fad97, 2009-09-15 (annotated)
- Committer:
- simon
- Date:
- Tue Sep 15 10:02:04 2009 +0000
- Revision:
- 0:cc002f2fad97
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 0:cc002f2fad97 | 1 | /* mbed MobileLCD (Sparkfun Nokia) Display Library |
simon | 0:cc002f2fad97 | 2 | * Copyright (c) 2007-2009 sford |
simon | 0:cc002f2fad97 | 3 | * Released under the MIT License: http://mbed.org/license/mit |
simon | 0:cc002f2fad97 | 4 | */ |
simon | 0:cc002f2fad97 | 5 | |
simon | 0:cc002f2fad97 | 6 | #include "MobileLCD.h" |
simon | 0:cc002f2fad97 | 7 | |
simon | 0:cc002f2fad97 | 8 | MobileLCD::MobileLCD(PinName mosi, PinName sclk, PinName cs, PinName rst) : _spi(mosi, NC, sclk), _cs(cs), _rst(rst) { |
simon | 0:cc002f2fad97 | 9 | _cs = 1; |
simon | 0:cc002f2fad97 | 10 | _rst = 0; |
simon | 0:cc002f2fad97 | 11 | _spi.format(9); |
simon | 0:cc002f2fad97 | 12 | _spi.frequency(5000000); |
simon | 0:cc002f2fad97 | 13 | wait(0.001); |
simon | 0:cc002f2fad97 | 14 | _rst = 1; |
simon | 0:cc002f2fad97 | 15 | wait(0.001); |
simon | 0:cc002f2fad97 | 16 | _cs = 0; |
simon | 0:cc002f2fad97 | 17 | |
simon | 0:cc002f2fad97 | 18 | command(0xCA); // display control |
simon | 0:cc002f2fad97 | 19 | data(0); |
simon | 0:cc002f2fad97 | 20 | data(32); |
simon | 0:cc002f2fad97 | 21 | data(0); |
simon | 0:cc002f2fad97 | 22 | |
simon | 0:cc002f2fad97 | 23 | command(0xBB); |
simon | 0:cc002f2fad97 | 24 | data(1); |
simon | 0:cc002f2fad97 | 25 | |
simon | 0:cc002f2fad97 | 26 | command(0xD1); // oscillator on |
simon | 0:cc002f2fad97 | 27 | command(0x94); // sleep out |
simon | 0:cc002f2fad97 | 28 | command(0x20); // power control |
simon | 0:cc002f2fad97 | 29 | data(0x0F); |
simon | 0:cc002f2fad97 | 30 | |
simon | 0:cc002f2fad97 | 31 | command(0xA7); // invert display |
simon | 0:cc002f2fad97 | 32 | command(0x81); // Voltage control |
simon | 0:cc002f2fad97 | 33 | data(39); // contrast setting: 0..63 |
simon | 0:cc002f2fad97 | 34 | data(3); // resistance ratio |
simon | 0:cc002f2fad97 | 35 | wait(0.001); |
simon | 0:cc002f2fad97 | 36 | |
simon | 0:cc002f2fad97 | 37 | command(0xBC); // data control |
simon | 0:cc002f2fad97 | 38 | data(3); // scan dirs |
simon | 0:cc002f2fad97 | 39 | data(1); // RGB |
simon | 0:cc002f2fad97 | 40 | data(4); // grayscale |
simon | 0:cc002f2fad97 | 41 | |
simon | 0:cc002f2fad97 | 42 | command(0xAF); // turn on the display |
simon | 0:cc002f2fad97 | 43 | _cs = 1; |
simon | 0:cc002f2fad97 | 44 | |
simon | 0:cc002f2fad97 | 45 | cls(); |
simon | 0:cc002f2fad97 | 46 | } |
simon | 0:cc002f2fad97 | 47 | |
simon | 0:cc002f2fad97 | 48 | void MobileLCD::pixel(int x, int y, int colour) { |
simon | 0:cc002f2fad97 | 49 | _cs = 0; |
simon | 0:cc002f2fad97 | 50 | |
simon | 0:cc002f2fad97 | 51 | command(0x15); // column |
simon | 0:cc002f2fad97 | 52 | data(2 + x); |
simon | 0:cc002f2fad97 | 53 | data(2 + x); |
simon | 0:cc002f2fad97 | 54 | command(0x75); // page |
simon | 0:cc002f2fad97 | 55 | data(y); |
simon | 0:cc002f2fad97 | 56 | data(y); |
simon | 0:cc002f2fad97 | 57 | command(0x5C); // start write to ram |
simon | 0:cc002f2fad97 | 58 | |
simon | 0:cc002f2fad97 | 59 | int gr = ((colour >> 20) & 0x0F) |
simon | 0:cc002f2fad97 | 60 | | ((colour >> 8 ) & 0xF0); |
simon | 0:cc002f2fad97 | 61 | int nb = ((colour >> 4 ) & 0x0F); |
simon | 0:cc002f2fad97 | 62 | data(nb); |
simon | 0:cc002f2fad97 | 63 | data(gr); |
simon | 0:cc002f2fad97 | 64 | |
simon | 0:cc002f2fad97 | 65 | _cs = 1; |
simon | 0:cc002f2fad97 | 66 | } |
simon | 0:cc002f2fad97 | 67 | |
simon | 0:cc002f2fad97 | 68 | int MobileLCD::width() { return 130; } |
simon | 0:cc002f2fad97 | 69 | int MobileLCD::height() { return 130; } |
simon | 0:cc002f2fad97 | 70 | |
simon | 0:cc002f2fad97 | 71 | void MobileLCD::command(int value) { |
simon | 0:cc002f2fad97 | 72 | _spi.write(value & 0xFF); |
simon | 0:cc002f2fad97 | 73 | } |
simon | 0:cc002f2fad97 | 74 | |
simon | 0:cc002f2fad97 | 75 | void MobileLCD::data(int value) { |
simon | 0:cc002f2fad97 | 76 | _spi.write(value | 0x100); |
simon | 0:cc002f2fad97 | 77 | } |
simon | 0:cc002f2fad97 | 78 | |
simon | 0:cc002f2fad97 | 79 | #ifdef MBED_MOBILELCD_FASTER |
simon | 0:cc002f2fad97 | 80 | void MobileLCD::window(int x, int y, int w, int h) { |
simon | 0:cc002f2fad97 | 81 | _cs = 0; |
simon | 0:cc002f2fad97 | 82 | command(0x15); // column |
simon | 0:cc002f2fad97 | 83 | data(2 + x); |
simon | 0:cc002f2fad97 | 84 | data(2 + x + w - 1); |
simon | 0:cc002f2fad97 | 85 | command(0x75); // page |
simon | 0:cc002f2fad97 | 86 | data(y); |
simon | 0:cc002f2fad97 | 87 | data(y + h - 1); |
simon | 0:cc002f2fad97 | 88 | command(0x5C); // start write to ram |
simon | 0:cc002f2fad97 | 89 | _cs = 1; |
simon | 0:cc002f2fad97 | 90 | } |
simon | 0:cc002f2fad97 | 91 | |
simon | 0:cc002f2fad97 | 92 | void MobileLCD::putp(int colour) { |
simon | 0:cc002f2fad97 | 93 | _cs = 0; |
simon | 0:cc002f2fad97 | 94 | int gr = ((colour >> 20) & 0x0F) |
simon | 0:cc002f2fad97 | 95 | | ((colour >> 8 ) & 0xF0); |
simon | 0:cc002f2fad97 | 96 | int nb = ((colour >> 4 ) & 0x0F); |
simon | 0:cc002f2fad97 | 97 | data(nb); |
simon | 0:cc002f2fad97 | 98 | data(gr); |
simon | 0:cc002f2fad97 | 99 | _cs = 1; |
simon | 0:cc002f2fad97 | 100 | } |
simon | 0:cc002f2fad97 | 101 | |
simon | 0:cc002f2fad97 | 102 | #endif |