Library for Aitendo 2.6 inch TFT shield for Arduino-UNO and Nucleo
AitendoTFT.cpp@0:f53f19ac1457, 2014-04-30 (annotated)
- Committer:
- h_nari
- Date:
- Wed Apr 30 08:05:41 2014 +0000
- Revision:
- 0:f53f19ac1457
First Version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
h_nari | 0:f53f19ac1457 | 1 | #include "AitendoTFT.h" |
h_nari | 0:f53f19ac1457 | 2 | #include "mbed_debug.h" |
h_nari | 0:f53f19ac1457 | 3 | |
h_nari | 0:f53f19ac1457 | 4 | |
h_nari | 0:f53f19ac1457 | 5 | #define TFTLCD_GRAM_HOR_AD 0x20 |
h_nari | 0:f53f19ac1457 | 6 | #define TFTLCD_GRAM_VER_AD 0x21 |
h_nari | 0:f53f19ac1457 | 7 | #define TFTLCD_RW_GRAM 0x22 |
h_nari | 0:f53f19ac1457 | 8 | #define TFTLCD_DELAYCMD 0xFF |
h_nari | 0:f53f19ac1457 | 9 | |
h_nari | 0:f53f19ac1457 | 10 | static const unsigned short _regValues[] = { |
h_nari | 0:f53f19ac1457 | 11 | 0x0001,0x0100, |
h_nari | 0:f53f19ac1457 | 12 | 0x0002,0x0700, |
h_nari | 0:f53f19ac1457 | 13 | 0x0003,0x1030, |
h_nari | 0:f53f19ac1457 | 14 | 0x0008,0x0302, |
h_nari | 0:f53f19ac1457 | 15 | 0x0009,0x0000, |
h_nari | 0:f53f19ac1457 | 16 | 0x000A,0x0008, |
h_nari | 0:f53f19ac1457 | 17 | //*******POWER CONTROL REGISTER INITIAL*******// |
h_nari | 0:f53f19ac1457 | 18 | 0x0010,0x0790, |
h_nari | 0:f53f19ac1457 | 19 | 0x0011,0x0005, |
h_nari | 0:f53f19ac1457 | 20 | 0x0012,0x0000, |
h_nari | 0:f53f19ac1457 | 21 | 0x0013,0x0000, |
h_nari | 0:f53f19ac1457 | 22 | TFTLCD_DELAYCMD, 50, //delayms(50, |
h_nari | 0:f53f19ac1457 | 23 | //********POWER SUPPPLY STARTUP 1 SETTING*******// |
h_nari | 0:f53f19ac1457 | 24 | 0x0010,0x12B0, |
h_nari | 0:f53f19ac1457 | 25 | TFTLCD_DELAYCMD, 50, // delayms(50, |
h_nari | 0:f53f19ac1457 | 26 | 0x0011,0x0007, |
h_nari | 0:f53f19ac1457 | 27 | //delayms(50, |
h_nari | 0:f53f19ac1457 | 28 | //********POWER SUPPLY STARTUP 2 SETTING******// |
h_nari | 0:f53f19ac1457 | 29 | 0x0012,0x008C, |
h_nari | 0:f53f19ac1457 | 30 | 0x0013,0x1700, |
h_nari | 0:f53f19ac1457 | 31 | 0x0029,0x0022, |
h_nari | 0:f53f19ac1457 | 32 | TFTLCD_DELAYCMD, 50, // delayms(50, |
h_nari | 0:f53f19ac1457 | 33 | //******GAMMA CLUSTER SETTING******// |
h_nari | 0:f53f19ac1457 | 34 | 0x0030,0x0000, |
h_nari | 0:f53f19ac1457 | 35 | 0x0031,0x0505, |
h_nari | 0:f53f19ac1457 | 36 | 0x0032,0x0205, |
h_nari | 0:f53f19ac1457 | 37 | 0x0035,0x0206, |
h_nari | 0:f53f19ac1457 | 38 | 0x0036,0x0408, |
h_nari | 0:f53f19ac1457 | 39 | 0x0037,0x0000, |
h_nari | 0:f53f19ac1457 | 40 | 0x0038,0x0504, |
h_nari | 0:f53f19ac1457 | 41 | 0x0039,0x0206, |
h_nari | 0:f53f19ac1457 | 42 | 0x003C,0x0206, |
h_nari | 0:f53f19ac1457 | 43 | 0x003D,0x0408, |
h_nari | 0:f53f19ac1457 | 44 | // -----------DISPLAY WINDOWS 240*320-------------// |
h_nari | 0:f53f19ac1457 | 45 | 0x0050,0x0000, |
h_nari | 0:f53f19ac1457 | 46 | 0x0051,0x00EF, |
h_nari | 0:f53f19ac1457 | 47 | 0x0052,0x0000, |
h_nari | 0:f53f19ac1457 | 48 | 0x0053,0x013F, |
h_nari | 0:f53f19ac1457 | 49 | //-----FRAME RATE SETTING-------// |
h_nari | 0:f53f19ac1457 | 50 | 0x0060,0xA700, |
h_nari | 0:f53f19ac1457 | 51 | 0x0061,0x0001, |
h_nari | 0:f53f19ac1457 | 52 | 0x0090,0x0033, //RTNI setting |
h_nari | 0:f53f19ac1457 | 53 | //-------DISPLAY ON------// |
h_nari | 0:f53f19ac1457 | 54 | 0x0007,0x0133, 0x0001,0x0100, |
h_nari | 0:f53f19ac1457 | 55 | 0x0002,0x0700, |
h_nari | 0:f53f19ac1457 | 56 | 0x0003,0x1030, |
h_nari | 0:f53f19ac1457 | 57 | 0x0008,0x0302, |
h_nari | 0:f53f19ac1457 | 58 | 0x0009,0x0000, |
h_nari | 0:f53f19ac1457 | 59 | 0x000A,0x0008, |
h_nari | 0:f53f19ac1457 | 60 | //*******POWER CONTROL REGISTER INITIAL*******// |
h_nari | 0:f53f19ac1457 | 61 | 0x0010,0x0790, |
h_nari | 0:f53f19ac1457 | 62 | 0x0011,0x0005, |
h_nari | 0:f53f19ac1457 | 63 | 0x0012,0x0000, |
h_nari | 0:f53f19ac1457 | 64 | 0x0013,0x0000, |
h_nari | 0:f53f19ac1457 | 65 | //delayms(50, |
h_nari | 0:f53f19ac1457 | 66 | //********POWER SUPPPLY STARTUP 1 SETTING*******// |
h_nari | 0:f53f19ac1457 | 67 | 0x0010,0x12B0, |
h_nari | 0:f53f19ac1457 | 68 | TFTLCD_DELAYCMD, 50, // delayms(50, |
h_nari | 0:f53f19ac1457 | 69 | 0x0011,0x0007, |
h_nari | 0:f53f19ac1457 | 70 | TFTLCD_DELAYCMD, 50, // delayms(50, |
h_nari | 0:f53f19ac1457 | 71 | //********POWER SUPPLY STARTUP 2 SETTING******// |
h_nari | 0:f53f19ac1457 | 72 | 0x0012,0x008C, |
h_nari | 0:f53f19ac1457 | 73 | 0x0013,0x1700, |
h_nari | 0:f53f19ac1457 | 74 | 0x0029,0x0022, |
h_nari | 0:f53f19ac1457 | 75 | TFTLCD_DELAYCMD, 50, // delayms(50, |
h_nari | 0:f53f19ac1457 | 76 | //******GAMMA CLUSTER SETTING******// |
h_nari | 0:f53f19ac1457 | 77 | 0x0030,0x0000, |
h_nari | 0:f53f19ac1457 | 78 | 0x0031,0x0505, |
h_nari | 0:f53f19ac1457 | 79 | 0x0032,0x0205, |
h_nari | 0:f53f19ac1457 | 80 | 0x0035,0x0206, |
h_nari | 0:f53f19ac1457 | 81 | 0x0036,0x0408, |
h_nari | 0:f53f19ac1457 | 82 | 0x0037,0x0000, |
h_nari | 0:f53f19ac1457 | 83 | 0x0038,0x0504, |
h_nari | 0:f53f19ac1457 | 84 | 0x0039,0x0206, |
h_nari | 0:f53f19ac1457 | 85 | 0x003C,0x0206, |
h_nari | 0:f53f19ac1457 | 86 | 0x003D,0x0408, |
h_nari | 0:f53f19ac1457 | 87 | // -----------DISPLAY WINDOWS 240*320-------------// |
h_nari | 0:f53f19ac1457 | 88 | 0x0050,0x0000, |
h_nari | 0:f53f19ac1457 | 89 | 0x0051,0x00EF, |
h_nari | 0:f53f19ac1457 | 90 | 0x0052,0x0000, |
h_nari | 0:f53f19ac1457 | 91 | 0x0053,0x013F, |
h_nari | 0:f53f19ac1457 | 92 | //-----FRAME RATE SETTING-------// |
h_nari | 0:f53f19ac1457 | 93 | 0x0060,0xA700, |
h_nari | 0:f53f19ac1457 | 94 | 0x0061,0x0001, |
h_nari | 0:f53f19ac1457 | 95 | 0x0090,0x0033, //RTNI setting |
h_nari | 0:f53f19ac1457 | 96 | //-------DISPLAY ON------// |
h_nari | 0:f53f19ac1457 | 97 | 0x0007,0x0133, |
h_nari | 0:f53f19ac1457 | 98 | }; |
h_nari | 0:f53f19ac1457 | 99 | |
h_nari | 0:f53f19ac1457 | 100 | |
h_nari | 0:f53f19ac1457 | 101 | AitendoTFT::AitendoTFT(void) : |
h_nari | 0:f53f19ac1457 | 102 | _rst(A4), _cs(A3), _rs(A2), _wr(A1), _rd(A0),_d( D8, D9, D2, D3, D4, D5, D6, D7) |
h_nari | 0:f53f19ac1457 | 103 | { |
h_nari | 0:f53f19ac1457 | 104 | _init(); |
h_nari | 0:f53f19ac1457 | 105 | } |
h_nari | 0:f53f19ac1457 | 106 | |
h_nari | 0:f53f19ac1457 | 107 | void AitendoTFT::_init(void) |
h_nari | 0:f53f19ac1457 | 108 | { |
h_nari | 0:f53f19ac1457 | 109 | _rst = 1; |
h_nari | 0:f53f19ac1457 | 110 | _cs = 1; |
h_nari | 0:f53f19ac1457 | 111 | _wr = 1; |
h_nari | 0:f53f19ac1457 | 112 | _rd = 1; |
h_nari | 0:f53f19ac1457 | 113 | _d.input(); |
h_nari | 0:f53f19ac1457 | 114 | |
h_nari | 0:f53f19ac1457 | 115 | _reset(); |
h_nari | 0:f53f19ac1457 | 116 | |
h_nari | 0:f53f19ac1457 | 117 | for(int i=0; i < sizeof(_regValues)/sizeof(_regValues[0]); i+= 2) { |
h_nari | 0:f53f19ac1457 | 118 | int a = _regValues[i]; |
h_nari | 0:f53f19ac1457 | 119 | int d = _regValues[i+1]; |
h_nari | 0:f53f19ac1457 | 120 | if(a == TFTLCD_DELAYCMD) |
h_nari | 0:f53f19ac1457 | 121 | wait_ms(d); |
h_nari | 0:f53f19ac1457 | 122 | else |
h_nari | 0:f53f19ac1457 | 123 | _reg_write(a, d); |
h_nari | 0:f53f19ac1457 | 124 | } |
h_nari | 0:f53f19ac1457 | 125 | } |
h_nari | 0:f53f19ac1457 | 126 | |
h_nari | 0:f53f19ac1457 | 127 | void AitendoTFT::_reset(void) |
h_nari | 0:f53f19ac1457 | 128 | { |
h_nari | 0:f53f19ac1457 | 129 | _rst = 0; |
h_nari | 0:f53f19ac1457 | 130 | wait_ms(2); |
h_nari | 0:f53f19ac1457 | 131 | _rst = 1; |
h_nari | 0:f53f19ac1457 | 132 | |
h_nari | 0:f53f19ac1457 | 133 | _data_write(0); |
h_nari | 0:f53f19ac1457 | 134 | _data_write(0); |
h_nari | 0:f53f19ac1457 | 135 | _data_write(0); |
h_nari | 0:f53f19ac1457 | 136 | _data_write(0); |
h_nari | 0:f53f19ac1457 | 137 | } |
h_nari | 0:f53f19ac1457 | 138 | |
h_nari | 0:f53f19ac1457 | 139 | void AitendoTFT::_write(int rs, int d) |
h_nari | 0:f53f19ac1457 | 140 | { |
h_nari | 0:f53f19ac1457 | 141 | _cs = 0; |
h_nari | 0:f53f19ac1457 | 142 | _rs = rs; |
h_nari | 0:f53f19ac1457 | 143 | _rd = 1; |
h_nari | 0:f53f19ac1457 | 144 | _wr = 1; |
h_nari | 0:f53f19ac1457 | 145 | _d.output(); |
h_nari | 0:f53f19ac1457 | 146 | |
h_nari | 0:f53f19ac1457 | 147 | _d = d >> 8; |
h_nari | 0:f53f19ac1457 | 148 | _wr = 0; |
h_nari | 0:f53f19ac1457 | 149 | wait_us(1); // 1us |
h_nari | 0:f53f19ac1457 | 150 | _wr = 1; |
h_nari | 0:f53f19ac1457 | 151 | |
h_nari | 0:f53f19ac1457 | 152 | _d = d; |
h_nari | 0:f53f19ac1457 | 153 | _wr = 0; |
h_nari | 0:f53f19ac1457 | 154 | wait_us(1); // 1us |
h_nari | 0:f53f19ac1457 | 155 | _wr = 1; |
h_nari | 0:f53f19ac1457 | 156 | |
h_nari | 0:f53f19ac1457 | 157 | _cs = 1; |
h_nari | 0:f53f19ac1457 | 158 | } |
h_nari | 0:f53f19ac1457 | 159 | |
h_nari | 0:f53f19ac1457 | 160 | void AitendoTFT::_reg_write(int addr, int data) |
h_nari | 0:f53f19ac1457 | 161 | { |
h_nari | 0:f53f19ac1457 | 162 | _cmd_write(addr); |
h_nari | 0:f53f19ac1457 | 163 | _data_write(data); |
h_nari | 0:f53f19ac1457 | 164 | } |
h_nari | 0:f53f19ac1457 | 165 | |
h_nari | 0:f53f19ac1457 | 166 | void AitendoTFT::_pos_set(int x, int y) |
h_nari | 0:f53f19ac1457 | 167 | { |
h_nari | 0:f53f19ac1457 | 168 | _reg_write(TFTLCD_GRAM_HOR_AD, x); |
h_nari | 0:f53f19ac1457 | 169 | _reg_write(TFTLCD_GRAM_VER_AD, y); |
h_nari | 0:f53f19ac1457 | 170 | _cmd_write(TFTLCD_RW_GRAM); |
h_nari | 0:f53f19ac1457 | 171 | } |
h_nari | 0:f53f19ac1457 | 172 | |
h_nari | 0:f53f19ac1457 | 173 | void AitendoTFT::fillArea(int x0, int y0, int x1, int y1, int color) |
h_nari | 0:f53f19ac1457 | 174 | { |
h_nari | 0:f53f19ac1457 | 175 | for(int y=y0; y<y1; y++){ |
h_nari | 0:f53f19ac1457 | 176 | _pos_set(x0, y); |
h_nari | 0:f53f19ac1457 | 177 | for(int x = x0; x < x1; x++) |
h_nari | 0:f53f19ac1457 | 178 | _data_write(color); |
h_nari | 0:f53f19ac1457 | 179 | } |
h_nari | 0:f53f19ac1457 | 180 | } |
h_nari | 0:f53f19ac1457 | 181 | |
h_nari | 0:f53f19ac1457 | 182 | void AitendoTFT::pset(int x, int y, int color) |
h_nari | 0:f53f19ac1457 | 183 | { |
h_nari | 0:f53f19ac1457 | 184 | if(x >= 0 && x < TFT_WIDTH && y > 0 && y < TFT_HEIGHT){ |
h_nari | 0:f53f19ac1457 | 185 | _pos_set(x, y); |
h_nari | 0:f53f19ac1457 | 186 | _data_write(color); |
h_nari | 0:f53f19ac1457 | 187 | } |
h_nari | 0:f53f19ac1457 | 188 | } |
h_nari | 0:f53f19ac1457 | 189 | |
h_nari | 0:f53f19ac1457 | 190 | |
h_nari | 0:f53f19ac1457 | 191 | |
h_nari | 0:f53f19ac1457 | 192 | |
h_nari | 0:f53f19ac1457 | 193 | |
h_nari | 0:f53f19ac1457 | 194 |