This example uses the OLED display and the joystick on the Embedded Artists bseboard

Dependencies:   mbed

Committer:
chris
Date:
Tue Mar 02 07:23:59 2010 +0000
Revision:
0:6a7d6162034d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 0:6a7d6162034d 1 // test library for Embedded Artists OLED used on Xpresso Baseboard
chris 0:6a7d6162034d 2
chris 0:6a7d6162034d 3 #include "EAOLED.h"
chris 0:6a7d6162034d 4 #include "mbed.h"
chris 0:6a7d6162034d 5
chris 0:6a7d6162034d 6 EAOLED::EAOLED(PinName mosi, PinName dnc, PinName sclk, PinName cs, PinName power)
chris 0:6a7d6162034d 7 : _spi(mosi, NC, sclk), _data(dnc), _cs(cs), _power(power) {
chris 0:6a7d6162034d 8 reset();
chris 0:6a7d6162034d 9 }
chris 0:6a7d6162034d 10
chris 0:6a7d6162034d 11 void EAOLED::command(int value) {
chris 0:6a7d6162034d 12 _data = 0;
chris 0:6a7d6162034d 13 _cs = 0;
chris 0:6a7d6162034d 14 _spi.write(value);
chris 0:6a7d6162034d 15 _cs = 1;
chris 0:6a7d6162034d 16 }
chris 0:6a7d6162034d 17
chris 0:6a7d6162034d 18 void EAOLED::data(int value) {
chris 0:6a7d6162034d 19 _data = 1;
chris 0:6a7d6162034d 20 _cs = 0;
chris 0:6a7d6162034d 21 _spi.write(value);
chris 0:6a7d6162034d 22 _cs = 1;
chris 0:6a7d6162034d 23 }
chris 0:6a7d6162034d 24
chris 0:6a7d6162034d 25 void EAOLED::reset() {
chris 0:6a7d6162034d 26 _power = 0;
chris 0:6a7d6162034d 27 _cs = 1;
chris 0:6a7d6162034d 28
chris 0:6a7d6162034d 29 // Startup sequence recommended by embedded artists baseboard reference code
chris 0:6a7d6162034d 30 command(0x02); // set low column address
chris 0:6a7d6162034d 31 command(0x12); // set high column address
chris 0:6a7d6162034d 32 command(0x40); // display start set
chris 0:6a7d6162034d 33 command(0x2e); // stop horzontal scroll
chris 0:6a7d6162034d 34 command(0x81); // set contrast control register
chris 0:6a7d6162034d 35 command(0x32); //
chris 0:6a7d6162034d 36 command(0x82); // brightness for color banks
chris 0:6a7d6162034d 37 command(0x80); // display on
chris 0:6a7d6162034d 38 command(0xa1); // set segment re-map
chris 0:6a7d6162034d 39 command(0xa6); // set normal/inverse display
chris 0:6a7d6162034d 40 command(0xa8); // set multiplex ratio
chris 0:6a7d6162034d 41 command(0x3F); //
chris 0:6a7d6162034d 42 command(0xd3); // set display offset
chris 0:6a7d6162034d 43 command(0x40); //
chris 0:6a7d6162034d 44 command(0xad); // set dc-dc on/off
chris 0:6a7d6162034d 45 command(0x8E); //
chris 0:6a7d6162034d 46 command(0xc8); // set com output scan direction
chris 0:6a7d6162034d 47 command(0xd5); // set display clock divide ratio/oscillator/frequency
chris 0:6a7d6162034d 48 command(0xf0); //
chris 0:6a7d6162034d 49 command(0xd8); // set area color mode on/off & low power display mode
chris 0:6a7d6162034d 50 command(0x05); //
chris 0:6a7d6162034d 51 command(0xd9); // set pre-charge period
chris 0:6a7d6162034d 52 command(0xF1); //
chris 0:6a7d6162034d 53 command(0xda); // set com pins hardware configuration
chris 0:6a7d6162034d 54 command(0x12); //
chris 0:6a7d6162034d 55 command(0xdb); // set vcom deselect level
chris 0:6a7d6162034d 56 command(0x34); //
chris 0:6a7d6162034d 57 command(0x91); // set look up table for area color
chris 0:6a7d6162034d 58 command(0x3f); //
chris 0:6a7d6162034d 59 command(0x3f); //
chris 0:6a7d6162034d 60 command(0x3f); //
chris 0:6a7d6162034d 61 command(0x3f); //
chris 0:6a7d6162034d 62 command(0xaf); // display on
chris 0:6a7d6162034d 63 command(0xa4); // display on
chris 0:6a7d6162034d 64
chris 0:6a7d6162034d 65 wait_us(10);
chris 0:6a7d6162034d 66
chris 0:6a7d6162034d 67 _power = 1;
chris 0:6a7d6162034d 68 }
chris 0:6a7d6162034d 69
chris 0:6a7d6162034d 70 #define OLED_DISPLAY_WIDTH 96
chris 0:6a7d6162034d 71 #define OLED_DISPLAY_HEIGHT 64
chris 0:6a7d6162034d 72
chris 0:6a7d6162034d 73 void EAOLED::pixel(int x, int y, int colour) {
chris 0:6a7d6162034d 74 int page = y >> 3;
chris 0:6a7d6162034d 75 int address = 18 + x;
chris 0:6a7d6162034d 76
chris 0:6a7d6162034d 77 int lo = (address >> 0) & 0x0F;
chris 0:6a7d6162034d 78 int hi = (address >> 4) | 0x10;
chris 0:6a7d6162034d 79 int mask = 1 << (y & 0x7);
chris 0:6a7d6162034d 80 int byte = page * OLED_DISPLAY_WIDTH + x;
chris 0:6a7d6162034d 81
chris 0:6a7d6162034d 82 if(colour) {
chris 0:6a7d6162034d 83 framebuffer[byte] |= mask;
chris 0:6a7d6162034d 84 } else {
chris 0:6a7d6162034d 85 framebuffer[byte] &= ~mask;
chris 0:6a7d6162034d 86 }
chris 0:6a7d6162034d 87
chris 0:6a7d6162034d 88 command(0xB0 + page);
chris 0:6a7d6162034d 89 command(lo);
chris 0:6a7d6162034d 90 command(hi);
chris 0:6a7d6162034d 91 data(framebuffer[byte]);
chris 0:6a7d6162034d 92 }
chris 0:6a7d6162034d 93
chris 0:6a7d6162034d 94 /*void EAOLED::cls() {
chris 0:6a7d6162034d 95 for(int y=0; y<64; y++) {
chris 0:6a7d6162034d 96 for (int x=0; x<96; x++) {
chris 0:6a7d6162034d 97 pixel(x, y, 0xFFFFFF);
chris 0:6a7d6162034d 98 }
chris 0:6a7d6162034d 99 }
chris 0:6a7d6162034d 100 }*/
chris 0:6a7d6162034d 101