132 x 176 STN LCD Controller

Revision:
0:56ce29613827
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HD66766.h	Sat Sep 24 12:48:46 2016 +0000
@@ -0,0 +1,103 @@
+/*
+16bbit 80mode
+
+reference
+
+
+*/
+#ifndef MBED_HD6676_H
+#define MBED_HD66766_H
+// register names from Peter Barrett's Microtouch code
+#include "mbed.h"
+
+#define swap(a, b) { int16_t t = a; a = b; b = t; }
+
+class HD66766
+{
+public:
+    HD66766(
+    PinName rd, PinName wr, PinName rs, PinName cs, PinName rst,
+    PinName d0, PinName d1, PinName d2, PinName d3,
+    PinName d4, PinName d5, PinName d6, PinName d7,
+    PinName d8, PinName d9, PinName d10, PinName d11,
+    PinName d12, PinName d13, PinName d14, PinName d15
+    );
+    ~HD66766(){};
+
+    size_t println(char *c); 
+
+    uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
+
+    // drawing primitives!
+    void drawPixel(uint16_t x, uint16_t y, uint16_t color);
+    void fillScreen(uint16_t color);
+    void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
+    void drawVerticalLine(uint16_t x0, uint16_t y0, uint16_t length, uint16_t color);
+    void drawHorizontalLine(uint16_t x0, uint16_t y0, uint16_t length, uint16_t color);
+    void drawTriangle(uint16_t x0, uint16_t y0,
+              uint16_t x1, uint16_t y1,
+              uint16_t x2, uint16_t y2, uint16_t color);
+    void fillTriangle(int32_t x0, int32_t y0,
+              int32_t x1, int32_t y1,
+            int32_t x2, int32_t y2, 
+            uint16_t color);
+    void drawRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
+    void fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
+    void drawRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
+    void fillRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
+    void drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
+    void fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
+
+    void setCursor(uint16_t x, uint16_t y);
+    void setTextColor(uint16_t c);
+    void setTextSize(uint8_t s);
+    virtual size_t write(uint8_t);
+
+    void drawChar(uint16_t x, uint16_t y, char c, uint16_t color, uint8_t s = 1);
+    void drawString(uint16_t x, uint16_t y, char *c, uint16_t color, uint8_t s = 1);
+    
+    // commands
+    void reset(void);
+    void initDisplay(void);
+    void goHome(void);
+    void goTo(uint16_t x, uint16_t y);
+
+    // low level
+    void writeData(uint16_t data) {
+        _write(1, data);
+    };
+    void writeCommand(uint16_t data) {
+        _write(0, data);
+    };
+    uint16_t readData(void);
+    uint16_t readRegister(uint16_t addr);
+    void writeRegister(uint16_t addr, uint16_t data);
+
+    uint16_t width();
+    uint16_t height();
+    static const uint16_t LCDWIDTH = 128;
+    static const uint16_t LCDHEIGHT = 176;
+
+    void writeData_unsafe(uint16_t d);
+
+    void setWriteDir(void);
+    void setReadDir(void);
+
+    void mirror(uint16_t d);
+    uint16_t rb_swap(uint16_t c);
+private:
+
+    DigitalOut _rd, _wr, _rs, _cs, _rst;
+    BusInOut  _d;
+    void _write(uint16_t rs, uint16_t d);
+    uint16_t _width, _height;
+    uint16_t _gramstart;
+    uint16_t _rb_swap;
+    uint16_t cursor_x, cursor_y;
+    uint8_t textsize;
+    uint16_t textcolor;
+    void drawCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t corner, uint16_t color);
+    void fillCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t corner, uint16_t delta, uint16_t color);
+    void _delay(uint16_t t);
+};
+#endif