k og / HX8347D

Fork of HX8347D by k og

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HX8347D.h Source File

HX8347D.h

00001 /*
00002 
00003 reference
00004 https://github.com/yamsam/TFTLCD_ST7781
00005 https://learn.adafruit.com/2-8-tft-touchscreen/downloads
00006 https://github.com/adafruit/TFTLCD-Library
00007 
00008 
00009 */
00010 #ifndef MBED_HX8347D_H
00011 #define MBED_HX8347D_H
00012 // register names from Peter Barrett's Microtouch code
00013 #include "mbed.h"
00014 
00015 #define HX8347D_COL_AD_START2   0x02
00016 #define HX8347D_COL_AD_START1   0x03
00017 #define HX8347D_COL_AD_END2     0x04
00018 #define HX8347D_COL_AD_END1     0x05
00019 #define HX8347D_ROW_AD_START2   0x06
00020 #define HX8347D_ROW_AD_START1   0x07
00021 #define HX8347D_ROW_AD_END2     0x08
00022 #define HX8347D_ROW_AD_END1     0x09
00023 #define HX8347D_MEM_ACC_CTRL    0x16
00024 #define HX8347D_SRAM_WR_CTRL    0x22
00025 
00026 #define swap(a, b) { int16_t t = a; a = b; b = t; }
00027 
00028 class HX8347D
00029 {
00030 public:
00031     HX8347D(
00032     PinName rd, PinName wr, PinName rs, PinName cs, PinName rst,
00033     PinName d0, PinName d1, PinName d2, PinName d3,
00034     PinName d4, PinName d5, PinName d6, PinName d7
00035     );
00036     ~HX8347D(){};
00037 
00038     size_t println(char *c); 
00039 
00040     uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
00041 
00042     // drawing primitives!
00043     void drawPixel(uint16_t x, uint16_t y, uint16_t color);
00044     void fillScreen(uint16_t color);
00045     void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
00046     void drawFastLine(uint16_t x0, uint16_t y0, uint16_t l, uint16_t color, uint8_t flag);
00047     void drawVerticalLine(uint16_t x0, uint16_t y0, uint16_t length, uint16_t color);
00048     void drawHorizontalLine(uint16_t x0, uint16_t y0, uint16_t length, uint16_t color);
00049     void drawTriangle(uint16_t x0, uint16_t y0,
00050               uint16_t x1, uint16_t y1,
00051               uint16_t x2, uint16_t y2, uint16_t color);
00052     void fillTriangle(int32_t x0, int32_t y0,
00053               int32_t x1, int32_t y1,
00054             int32_t x2, int32_t y2, 
00055             uint16_t color);
00056 
00057     void drawRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
00058 
00059     void fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
00060     void drawRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
00061     void fillRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
00062     void drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
00063     void fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
00064 
00065     void setCursor(uint16_t x, uint16_t y);
00066     void setTextColor(uint16_t c);
00067     void setTextSize(uint8_t s);
00068     virtual size_t write(uint8_t);
00069 
00070     void drawChar(uint16_t x, uint16_t y, char c, uint16_t color, uint8_t s = 1);
00071     void drawString(uint16_t x, uint16_t y, char *c, uint16_t color, uint8_t s = 1);
00072 
00073     // commands
00074     void initDisplay(void);
00075     void goHome(void);
00076     void goTo(uint16_t x, uint16_t y);
00077     void reset(void);
00078     void setRotation(uint8_t x);
00079     uint8_t getRotation();
00080     
00081     void BlockWrite(uint16_t Xstart,uint16_t Xend,uint16_t Ystart,uint16_t Yend);
00082     void DispColor(uint16_t color);
00083     
00084     // low level
00085     void writeData(uint16_t data) {
00086         _write(1, data);
00087     };
00088     void writeCommand(uint16_t data) {
00089         _write(0, data);
00090     };
00091 
00092     uint16_t readData(void);
00093     uint16_t readRegister(uint16_t addr);
00094     void writeRegister(uint16_t addr, uint16_t data);
00095 
00096     uint16_t width();
00097     uint16_t height();
00098     static const uint16_t TFTWIDTH = 240;
00099     static const uint16_t TFTHEIGHT = 320;
00100     
00101     void writeData_unsafe(uint16_t d);
00102 
00103     void setWriteDir(void);
00104     void setReadDir(void);
00105 
00106     void write8(uint8_t d);
00107 
00108     void calcGRAMPosition(uint16_t *posx, uint16_t *posy);
00109     void getViewport(uint16_t *bx, uint16_t *by, uint16_t *ex, uint16_t *ey);
00110     void setViewport(uint16_t bx, uint16_t by, uint16_t ex, uint16_t ey);
00111     void setDefaultViewport();
00112 
00113 private:
00114     void drawCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t corner, uint16_t color);
00115     void fillCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t corner, uint16_t delta, uint16_t color);
00116     uint8_t read8(void);
00117 
00118     DigitalOut _rd, _wr, _rs, _cs, _rst;
00119     BusInOut  _d;
00120 
00121     void _write(uint16_t rs, uint16_t d);
00122     uint16_t _width, _height;
00123     uint8_t textsize;
00124     uint16_t cursor_x, cursor_y;
00125     uint16_t textcolor;
00126     uint8_t rotation;
00127     void _delay(uint16_t t);
00128     
00129 };
00130 #endif