Code for Nokia LCD (text ) based on Epson controller. This is on the new Sparkfun board with the two switches.sx

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
TimV
Date:
Tue May 25 23:02:44 2010 +0000
Commit message:

Changed in this revision

Nokia_Epson.cpp Show annotated file Show diff for this revision Revisions of this file
Nokia_Epson.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d6d054c554ae Nokia_Epson.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Nokia_Epson.cpp	Tue May 25 23:02:44 2010 +0000
@@ -0,0 +1,320 @@
+    /* mbed Library - Nokia_Epson 
+     * Copyright (c) 2007, sford 
+     */ 
+      
+    #include "Nokia_Epson.h" 
+    
+    #include "mbed.h" 
+    
+    using namespace mbed; 
+    
+    const unsigned char FONT8x8[97][8] = { 
+    0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char 
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20 
+    0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // ! 
+    0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // " 
+    0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // # 
+    0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $ 
+    0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // % 
+    0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // & 
+    0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // ' 
+    0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // ( 
+    0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // ) 
+    0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // * 
+    0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // + 
+    0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // , 
+    0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // - 
+    0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // . 
+    0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash) 
+    0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30 
+    0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1 
+    0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2 
+    0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3 
+    0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4 
+    0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5 
+    0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6 
+    0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7 
+    0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8 
+    0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9 
+    0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // : 
+    0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ; 
+    0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // < 
+    0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // = 
+    0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // > 
+    0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ? 
+    0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40 
+    0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A 
+    0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B 
+    0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C 
+    0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D 
+    0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E 
+    0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F 
+    0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G 
+    0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H 
+    0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I 
+    0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J 
+    0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K 
+    0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L 
+    0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M 
+    0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N 
+    0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O 
+    0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50 
+    0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q 
+    0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R 
+    0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S 
+    0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T 
+    0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U 
+    0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V 
+    0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W 
+    0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X 
+    0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y 
+    0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z 
+    0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [ 
+    0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash) 
+    0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ] 
+    0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^ 
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _ 
+    0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60 
+    0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a 
+    0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b 
+    0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c 
+    0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d 
+    0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e 
+    0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f 
+    0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g 
+    0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h 
+    0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i 
+    0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j 
+    0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k 
+    0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l 
+    0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m 
+    0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n 
+    0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o 
+    0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p 
+    0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q 
+    0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r 
+    0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s 
+    0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t 
+    0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u 
+    0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v 
+    0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w 
+    0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x 
+    0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y 
+    0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z 
+    0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // { 
+    0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // | 
+    0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // } 
+    0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~ 
+    0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}; // DEL 
+    
+    void Nokia_Epson::command(int value) { 
+        _spi.write(value & 0xFF); 
+    } 
+    
+    void Nokia_Epson::data(int value) { 
+        _spi.write(value | 0x100); 
+    } 
+    
+    void Nokia_Epson::_select() { 
+        _cs = 0;    
+    } 
+        
+    void Nokia_Epson::_deselect() { 
+        _cs = 1; 
+    } 
+    
+    int Nokia_Epson::width() { 
+        return _width; 
+    } 
+    
+    int Nokia_Epson::height() { 
+        return _height; 
+    } 
+    
+    int Nokia_Epson::columns() { 
+        return _columns; 
+    } 
+    
+    int Nokia_Epson::rows() { 
+        return _rows; 
+    } 
+    
+    void Nokia_Epson::foreground(int v) { 
+        _foreground = v; 
+    } 
+    
+    void Nokia_Epson::background(int v) { 
+        _background = v; 
+    } 
+    
+    void Nokia_Epson::locate(int column, int row) { 
+        _row = row; 
+        _column = column; 
+    } 
+        
+    void Nokia_Epson::newline() { 
+        _column = 0; 
+        _row++; 
+        if(_row >= _rows) { 
+            _row = 0; 
+        } 
+    } 
+    
+    /*************************************************************************/ 
+        
+     Nokia_Epson::Nokia_Epson(PinName mosi, PinName miso, PinName clk, PinName cs, PinName rst) 
+        : _spi(mosi, miso, clk) 
+        , _rst(rst) 
+       , _cs(cs) { 
+    
+        _row = 0; 
+        _column = 0; 
+        _rows = 16; 
+        _columns = 16; 
+        _width = 130; 
+        _height = 130; 
+        foreground(0xFFFFFF); 
+        background(0x000000); 
+        reset(); 
+    } 
+        
+    void Nokia_Epson::reset() { 
+    
+        _cs = 1; 
+        _rst = 0; 
+        _spi.format(9); 
+        _spi.frequency(5000000); 
+        
+        wait_ms(1); 
+    
+        _rst = 1; 
+    
+        wait_ms(1); 
+    
+        _select(); 
+    
+        command(0xCA); // display control  
+        data(0x0); 
+        data(31); 
+        data(0x0); 
+          
+        command(0xBB);  // scan 
+        data(0x1); 
+        
+        command(0xD1); // oscillator on 
+        command(0x94); // sleep out 
+        command(0x20); // power control 
+        data(0x0F); 
+    
+        command(0xA7); // invert display 
+    
+        command(0x81); // Voltage control 
+        data(39);      // contrast setting: 0..63 
+        data(3);       // resistance ratio 
+    
+        wait_ms(1); 
+    
+        command(0xBC); // data control 
+        data(0x0); // scan dirs 
+        data(0x0); // RGB 
+        data(0x2); // grayscale 
+    
+        command(0xAF);  // turn on the display 
+                 
+        _deselect();    
+        
+        cls(); 
+    } 
+                      
+    void Nokia_Epson::_window(int x, int y, int width, int height) { 
+        int x1, x2, y1, y2; 
+        x1 = x + 0; 
+        y1 = y + 2; 
+        x2 = x1 + width - 1; 
+        y2 = y1 + height - 1;        
+        command(0x15); // column 
+        data(x1);        
+        data(x2); 
+        command(0x75); // page 
+          data(y1);            
+          data(y2); 
+           command(0x5C); // start write to ram 
+    } 
+    
+    void Nokia_Epson::fill(int x, int y, int width, int height, int colour) { 
+        _select(); 
+        _window(x, y, width, height); 
+    
+        int r4 = (colour >> (16 + 4)) & 0xF; 
+        int g4 = (colour >> (8 + 4)) & 0xF; 
+        int b4 = (colour >> (0 + 4)) & 0xF; 
+        
+        int d1 = (r4 << 4) | g4; 
+        int d2 = (b4 << 4) | r4; 
+        int d3 = (g4 << 4) | b4; 
+        
+        for(int i=0; i<(width*height+1)/2; i++) { 
+            data(d1); 
+            data(d2); 
+            data(d3); 
+      } 
+         _deselect();        
+    } 
+    
+    void Nokia_Epson::bitblit(int x, int y, int width, int height, const char* bitstream) { 
+        _select(); 
+        _window(x, y, width, height); 
+        for(int i=0; i<height*width/2; i++) { 
+        int byte1 = (i*2) / 8; 
+        int bit1 = (i*2) % 8;    
+        int colour1 = ((bitstream[byte1] << bit1) & 0x80) ? _foreground : _background; 
+        int byte2 = (i*2+1) / 8; 
+      int bit2 = (i*2+1) % 8;    
+        int colour2 = ((bitstream[byte2] << bit2) & 0x80) ? _foreground : _background; 
+    
+        int r41 = (colour1 >> (16 + 4)) & 0xF; 
+        int g41 = (colour1 >> (8 + 4)) & 0xF; 
+        int b41 = (colour1 >> (0 + 4)) & 0xF; 
+        
+        int r42 = (colour2 >> (16 + 4)) & 0xF; 
+        int g42 = (colour2 >> (8 + 4)) & 0xF; 
+        int b42 = (colour2 >> (0 + 4)) & 0xF;    
+        int d1 = (r41 << 4) | g41; 
+        int d2 = (b41 << 4) | r42; 
+        int d3 = (g42 << 4) | b42;                
+            data(d1); 
+            data(d2); 
+            data(d3); 
+        } 
+        _deselect(); 
+    } 
+    
+    void Nokia_Epson::cls() { 
+        fill(0, 0, 130, 130, _background); 
+        _row = 0; 
+        _column = 0; 
+    }    
+            
+    int Nokia_Epson::_putc(int value) { 
+        int x = _column * 8;  // FIXME: Char sizes 
+        int y = _row * 8; 
+        bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0])); 
+        
+        _column++; 
+    
+        if(_column >= _columns) { 
+            _row++; 
+            _column = 0; 
+        } 
+            
+        if(_row >= _rows) { 
+            _row = 0; 
+        }            
+    
+        return value; 
+    } 
+          
+    void Nokia_Epson::pixel(int x, int y, int colour) { 
+        fill(x, y, 1, 1, colour); 
+    } 
+       
diff -r 000000000000 -r d6d054c554ae Nokia_Epson.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Nokia_Epson.h	Tue May 25 23:02:44 2010 +0000
@@ -0,0 +1,49 @@
+    /* mbed Library - MobileLCD - test for MOD-NOKIA6610 (Epson 15G00) 
+     * Copyright (c) 2007/8, sford 
+     */ 
+    
+#ifndef MBED_NOKIA_EPSON_H 
+#define MBED_NOKIA_EPSON_H 
+      
+#include "mbed.h" 
+   
+    class Nokia_Epson : public Stream { 
+    
+    public: 
+    
+        Nokia_Epson(PinName mosi, PinName miso, PinName clk, PinName cs, PinName rst); 
+    
+        void foreground(int v); 
+        void background(int v); 
+        void locate(int column, int row); 
+        virtual void reset(); 
+        void fill(int x, int y, int width, int height, int colour); 
+        void cls(); 
+        int width(); 
+        int height(); 
+        int columns(); 
+        int rows(); 
+        void pixel(int x, int y, int colour); 
+    
+    protected: 
+   
+        virtual void _select(); 
+        virtual void _deselect(); 
+        virtual void _window(int x, int y, int width, int height); 
+        void command(int value); 
+        void data(int value); 
+        void newline(); 
+        virtual int _putc(int c); 
+        virtual int _getc() { return 0; } 
+        SPI _spi; 
+        DigitalOut _rst; 
+        DigitalOut _cs;    
+        void bitblit(int x, int y, int width, int height, const char* bitstream); 
+        void blit(int x, int y, int width, int height, const int* colour); 
+        void putp(int v); 
+        void window(int x, int y, int width, int height); 
+    //    void pixel(int x, int y, int colour); 
+        int _row, _column, _rows, _columns, _foreground, _background, _width, _height; 
+    }; 
+       
+    #endif
\ No newline at end of file
diff -r 000000000000 -r d6d054c554ae main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 25 23:02:44 2010 +0000
@@ -0,0 +1,19 @@
+#include "mbed.h"
+#include "Nokia_Epson.h"
+
+Nokia_Epson lcd(p5, p6, p7, p8, p9);
+DigitalOut led1(LED1);
+
+int main() {
+//    lcd.background(BLUE);
+    lcd.cls();
+//    lcd.fill(2, 51, 128, 10, GREEN);
+//    lcd.fill(50, 1, 10, 128, RED);
+    lcd.locate(0,3);
+    led1=1;
+    lcd.printf("Hello World!");
+    for (int i=0; i<130; i++) {
+        lcd.pixel(i, 80 + sin((float)i / 5.0)*10, 0x000000);
+    }
+}
+
diff -r 000000000000 -r d6d054c554ae mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue May 25 23:02:44 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e6be4cd80aad