Aitendo 128 x 160 STN LCD

Dependencies:   HD66766 mbed

Committer:
og
Date:
Sat Sep 24 12:50:32 2016 +0000
Revision:
0:6a73dfa821a8
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
og 0:6a73dfa821a8 1 /**
og 0:6a73dfa821a8 2 http://suz-avr.sblo.jp/article/37364983.html
og 0:6a73dfa821a8 3 http://elegadget.blog.fc2.com/blog-entry-5.html
og 0:6a73dfa821a8 4 http://stm32f4.web.fc2.com/STM32F1/momiji_LCD018.html
og 0:6a73dfa821a8 5
og 0:6a73dfa821a8 6 ARCH PRO: D14, D15 Open Drain port, need pull up R.
og 0:6a73dfa821a8 7 NUCLEO: D0, D1 assigned UART port.
og 0:6a73dfa821a8 8
og 0:6a73dfa821a8 9 not support rotation.
og 0:6a73dfa821a8 10 **/
og 0:6a73dfa821a8 11
og 0:6a73dfa821a8 12 #include "mbed.h"
og 0:6a73dfa821a8 13 #include "HD66766.h"
og 0:6a73dfa821a8 14
og 0:6a73dfa821a8 15 #define DEBUG 0
og 0:6a73dfa821a8 16
og 0:6a73dfa821a8 17 #define BLACK 0x0000
og 0:6a73dfa821a8 18 #define BLUE 0x001F
og 0:6a73dfa821a8 19 #define RED 0xF800
og 0:6a73dfa821a8 20 #define GREEN 0x07E0
og 0:6a73dfa821a8 21 #define CYAN 0x07FF
og 0:6a73dfa821a8 22 #define MAGENTA 0xF81F
og 0:6a73dfa821a8 23 #define YELLOW 0xFFE0
og 0:6a73dfa821a8 24 #define WHITE 0xFFFF
og 0:6a73dfa821a8 25
og 0:6a73dfa821a8 26
og 0:6a73dfa821a8 27 #if defined(TARGET_ARCH_PRO)
og 0:6a73dfa821a8 28 HD66766 lcd(A0, A1, A2, A3, A4,
og 0:6a73dfa821a8 29 D0, D1, D2, D3, D4, D5, D6, D7,
og 0:6a73dfa821a8 30 D8, D9, D10, D11, D12, D13, D14, D15);
og 0:6a73dfa821a8 31 Serial pc(USBTX, USBRX);
og 0:6a73dfa821a8 32 //#elif defined TARGET_NUCLEO_F103RB
og 0:6a73dfa821a8 33 //HD66766 lcd(A0, A1, A2, A3, A4,
og 0:6a73dfa821a8 34 // D0, D1, D2, D3, D4, D5, D6, D7,
og 0:6a73dfa821a8 35 // D8, D9, D10, D11, D12, D13, D14, D15);
og 0:6a73dfa821a8 36 //Serial pc(SERIAL_TX, SERIAL_RX);
og 0:6a73dfa821a8 37 //#elif defined TARGET_NUCLEO_F446RE
og 0:6a73dfa821a8 38 //HD66766 lcd(A0, A1, A2, A3, A4,
og 0:6a73dfa821a8 39 // D0, D1, D2, D3, D4, D5, D6, D7,
og 0:6a73dfa821a8 40 // D8, D9, D10, D11, D12, D13, D14, D15);
og 0:6a73dfa821a8 41 //Serial pc(SERIAL_TX, SERIAL_RX);
og 0:6a73dfa821a8 42
og 0:6a73dfa821a8 43 #endif
og 0:6a73dfa821a8 44 void testText() {
og 0:6a73dfa821a8 45 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 46 lcd.setCursor(0, 30);
og 0:6a73dfa821a8 47 lcd.setTextColor(RED);
og 0:6a73dfa821a8 48 lcd.setTextSize(1);
og 0:6a73dfa821a8 49 lcd.println("Hello World!\n");
og 0:6a73dfa821a8 50 wait_ms(500);
og 0:6a73dfa821a8 51 lcd.setTextColor(YELLOW);
og 0:6a73dfa821a8 52 lcd.setTextSize(2);
og 0:6a73dfa821a8 53 lcd.println("Hello World!\n");
og 0:6a73dfa821a8 54 wait_ms(500);
og 0:6a73dfa821a8 55 lcd.setTextColor(GREEN);
og 0:6a73dfa821a8 56 lcd.setTextSize(3);
og 0:6a73dfa821a8 57 lcd.println("Hello World!\n");
og 0:6a73dfa821a8 58 wait_ms(500);
og 0:6a73dfa821a8 59 lcd.setTextColor(CYAN);
og 0:6a73dfa821a8 60 lcd.setTextSize(3);
og 0:6a73dfa821a8 61 lcd.println("Hello World!\n");
og 0:6a73dfa821a8 62 wait_ms(500);
og 0:6a73dfa821a8 63 lcd.setTextColor(MAGENTA);
og 0:6a73dfa821a8 64 lcd.setTextSize(2);
og 0:6a73dfa821a8 65 lcd.println("Hello World!\n");
og 0:6a73dfa821a8 66 wait_ms(500);
og 0:6a73dfa821a8 67 lcd.setTextColor(WHITE);
og 0:6a73dfa821a8 68 lcd.setTextSize(1);
og 0:6a73dfa821a8 69 lcd.println("Hello World!\n");
og 0:6a73dfa821a8 70 wait_ms(500);
og 0:6a73dfa821a8 71 lcd.setTextColor(BLUE);
og 0:6a73dfa821a8 72 lcd.setTextSize(1);
og 0:6a73dfa821a8 73 lcd.println("1234.567\n");
og 0:6a73dfa821a8 74 wait_ms(500);
og 0:6a73dfa821a8 75
og 0:6a73dfa821a8 76 }
og 0:6a73dfa821a8 77
og 0:6a73dfa821a8 78 void testfillcircles(uint8_t radius, uint16_t color) {
og 0:6a73dfa821a8 79 for (uint16_t x=radius; x < lcd.width(); x+=radius*2) {
og 0:6a73dfa821a8 80 for (uint16_t y=radius; y < lcd.height(); y+=radius*2) {
og 0:6a73dfa821a8 81 lcd.fillCircle(x, y, radius, color);
og 0:6a73dfa821a8 82 }
og 0:6a73dfa821a8 83 }
og 0:6a73dfa821a8 84 }
og 0:6a73dfa821a8 85
og 0:6a73dfa821a8 86 void testdrawcircles(uint8_t radius, uint16_t color) {
og 0:6a73dfa821a8 87 for (uint16_t x=0; x < lcd.width()+radius; x+=radius*2) {
og 0:6a73dfa821a8 88 for (uint16_t y=0; y < lcd.height()+radius; y+=radius*2) {
og 0:6a73dfa821a8 89 lcd.drawCircle(x, y, radius, color);
og 0:6a73dfa821a8 90 }
og 0:6a73dfa821a8 91 }
og 0:6a73dfa821a8 92 }
og 0:6a73dfa821a8 93
og 0:6a73dfa821a8 94 void testfillrects(uint16_t color1, uint16_t color2) {
og 0:6a73dfa821a8 95 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 96 for (uint16_t x=lcd.width()-1; x > 6; x-=6) {
og 0:6a73dfa821a8 97 //Serial.println(x, DEC);
og 0:6a73dfa821a8 98 lcd.fillRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color1);
og 0:6a73dfa821a8 99 lcd.drawRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color2);
og 0:6a73dfa821a8 100 }
og 0:6a73dfa821a8 101 }
og 0:6a73dfa821a8 102
og 0:6a73dfa821a8 103 void testdrawrects(uint16_t color) {
og 0:6a73dfa821a8 104 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 105 for (uint16_t x=0; x < lcd.width(); x+=6) {
og 0:6a73dfa821a8 106 //pc.printf("%d\r\n", x);
og 0:6a73dfa821a8 107 lcd.drawRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color);
og 0:6a73dfa821a8 108 }
og 0:6a73dfa821a8 109 }
og 0:6a73dfa821a8 110
og 0:6a73dfa821a8 111 void testFillRoundRect() {
og 0:6a73dfa821a8 112 lcd.fillScreen(RED);
og 0:6a73dfa821a8 113
og 0:6a73dfa821a8 114 for (uint16_t x=lcd.width(); x > 20 ; x-=6) {
og 0:6a73dfa821a8 115 lcd.fillRoundRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, x/8, lcd.Color565(0, x<<1, 0));
og 0:6a73dfa821a8 116 }
og 0:6a73dfa821a8 117 }
og 0:6a73dfa821a8 118
og 0:6a73dfa821a8 119 void testfilltriangles() {
og 0:6a73dfa821a8 120 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 121
og 0:6a73dfa821a8 122 for (uint16_t i=lcd.width()/2; i>10; i-=5) {
og 0:6a73dfa821a8 123 lcd.fillTriangle(lcd.width()/2, lcd.height()/2-i,
og 0:6a73dfa821a8 124 lcd.width()/2-i, lcd.height()/2+i,
og 0:6a73dfa821a8 125 lcd.width()/2+i, lcd.height()/2+i,
og 0:6a73dfa821a8 126 BLUE);
og 0:6a73dfa821a8 127 lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
og 0:6a73dfa821a8 128 lcd.width()/2-i, lcd.height()/2+i,
og 0:6a73dfa821a8 129 lcd.width()/2+i, lcd.height()/2+i, GREEN);
og 0:6a73dfa821a8 130 }
og 0:6a73dfa821a8 131 }
og 0:6a73dfa821a8 132
og 0:6a73dfa821a8 133 void testtriangles() {
og 0:6a73dfa821a8 134 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 135 for (uint16_t i=0; i<lcd.width()/2; i+=5) {
og 0:6a73dfa821a8 136 lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
og 0:6a73dfa821a8 137 lcd.width()/2-i, lcd.height()/2+i,
og 0:6a73dfa821a8 138 lcd.width()/2+i, lcd.height()/2+i, YELLOW);
og 0:6a73dfa821a8 139 }
og 0:6a73dfa821a8 140 /*
og 0:6a73dfa821a8 141 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 142 for (uint16_t i=0; i<lcd.width()/2; i+=5) {
og 0:6a73dfa821a8 143 lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
og 0:6a73dfa821a8 144 lcd.width()/2-i, lcd.height()/2+i,
og 0:6a73dfa821a8 145 lcd.width()/2+i, lcd.height()/2+i, lcd.Color565(0, i, 0));
og 0:6a73dfa821a8 146 }
og 0:6a73dfa821a8 147 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 148 for (uint16_t i=0; i<lcd.width()/2; i+=5) {
og 0:6a73dfa821a8 149 lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
og 0:6a73dfa821a8 150 lcd.width()/2-i, lcd.height()/2+i,
og 0:6a73dfa821a8 151 lcd.width()/2+i, lcd.height()/2+i, lcd.Color565(i, 0, 0));
og 0:6a73dfa821a8 152 }
og 0:6a73dfa821a8 153 */
og 0:6a73dfa821a8 154 }
og 0:6a73dfa821a8 155
og 0:6a73dfa821a8 156 void testfastlines(uint16_t color1, uint16_t color2) {
og 0:6a73dfa821a8 157 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 158 for (uint16_t y=0; y < lcd.height(); y+=4) {
og 0:6a73dfa821a8 159 // pc.printf("%d\r\n", y);
og 0:6a73dfa821a8 160 lcd.drawHorizontalLine(0, y, lcd.width(), color1);
og 0:6a73dfa821a8 161 }
og 0:6a73dfa821a8 162 for (uint16_t x=0; x < lcd.width(); x+=4) {
og 0:6a73dfa821a8 163 // pc.printf("%d\r\n", x);
og 0:6a73dfa821a8 164 lcd.drawVerticalLine(x, 0, lcd.height(), color2);
og 0:6a73dfa821a8 165 }
og 0:6a73dfa821a8 166
og 0:6a73dfa821a8 167 }
og 0:6a73dfa821a8 168
og 0:6a73dfa821a8 169 void testlines(uint16_t color) {
og 0:6a73dfa821a8 170 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 171 for (uint16_t x=0; x < lcd.width(); x+=6) {
og 0:6a73dfa821a8 172 lcd.drawLine(0, 0, x, lcd.height()-1, color);
og 0:6a73dfa821a8 173 }
og 0:6a73dfa821a8 174 for (uint16_t y=0; y < lcd.height(); y+=6) {
og 0:6a73dfa821a8 175 lcd.drawLine(0, 0, lcd.width()-1, y, color);
og 0:6a73dfa821a8 176 }
og 0:6a73dfa821a8 177
og 0:6a73dfa821a8 178 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 179 for (uint16_t x=0; x < lcd.width(); x+=6) {
og 0:6a73dfa821a8 180 lcd.drawLine(lcd.width()-1, 0, x, lcd.height()-1, color);
og 0:6a73dfa821a8 181 }
og 0:6a73dfa821a8 182 for (uint16_t y=0; y < lcd.height(); y+=6) {
og 0:6a73dfa821a8 183 lcd.drawLine(lcd.width()-1, 0, 0, y, color);
og 0:6a73dfa821a8 184 }
og 0:6a73dfa821a8 185
og 0:6a73dfa821a8 186 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 187 for (uint16_t x=0; x < lcd.width(); x+=6) {
og 0:6a73dfa821a8 188 lcd.drawLine(0, lcd.height()-1, x, 0, color);
og 0:6a73dfa821a8 189 }
og 0:6a73dfa821a8 190 for (uint16_t y=0; y < lcd.height(); y+=6) {
og 0:6a73dfa821a8 191 lcd.drawLine(0, lcd.height()-1, lcd.width()-1, y, color);
og 0:6a73dfa821a8 192 }
og 0:6a73dfa821a8 193
og 0:6a73dfa821a8 194 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 195 for (uint16_t x=0; x < lcd.width(); x+=6) {
og 0:6a73dfa821a8 196 lcd.drawLine(lcd.width()-1, lcd.height()-1, x, 0, color);
og 0:6a73dfa821a8 197 }
og 0:6a73dfa821a8 198 for (uint16_t y=0; y < lcd.height(); y+=6) {
og 0:6a73dfa821a8 199 lcd.drawLine(lcd.width()-1, lcd.height()-1, 0, y, color);
og 0:6a73dfa821a8 200 }
og 0:6a73dfa821a8 201 }
og 0:6a73dfa821a8 202
og 0:6a73dfa821a8 203 void testBars() {
og 0:6a73dfa821a8 204 //for (int id = 0x0000; id <= 0x0007; id++) {
og 0:6a73dfa821a8 205 //lcd.writeRegister(0x0005, id<<3); // Entry Mode
og 0:6a73dfa821a8 206 lcd.goHome();
og 0:6a73dfa821a8 207
og 0:6a73dfa821a8 208 uint16_t i,j;
og 0:6a73dfa821a8 209 lcd.writeCommand(0x0022);
og 0:6a73dfa821a8 210 for(i=0; i < lcd.height(); i++)
og 0:6a73dfa821a8 211 {
og 0:6a73dfa821a8 212 for(j=0; j < 64; j++)
og 0:6a73dfa821a8 213 {
og 0:6a73dfa821a8 214 if (i>79) lcd.writeData(BLACK);
og 0:6a73dfa821a8 215 //else if(i>239) lcd.writeData(YELLOW);
og 0:6a73dfa821a8 216 //else if(i>199) lcd.writeData(MAGENTA);
og 0:6a73dfa821a8 217 //else if(i>159) lcd.writeData(RED);
og 0:6a73dfa821a8 218 //else if(i>119) lcd.writeData(CYAN);
og 0:6a73dfa821a8 219 //else if(i>79) lcd.writeData(GREEN);
og 0:6a73dfa821a8 220 //else if(i>39) lcd.writeData(BLUE);
og 0:6a73dfa821a8 221 else lcd.writeData(WHITE);
og 0:6a73dfa821a8 222 //wait_ms(1);
og 0:6a73dfa821a8 223 }
og 0:6a73dfa821a8 224 for(j=0; j < 64; j++)
og 0:6a73dfa821a8 225 {
og 0:6a73dfa821a8 226 if (i>139) lcd.writeData(WHITE);
og 0:6a73dfa821a8 227 else if(i>119) lcd.writeData(BLUE);
og 0:6a73dfa821a8 228 else if(i>99) lcd.writeData(GREEN);
og 0:6a73dfa821a8 229 else if(i>79) lcd.writeData(CYAN);
og 0:6a73dfa821a8 230 else if(i>59) lcd.writeData(RED);
og 0:6a73dfa821a8 231 else if(i>39) lcd.writeData(MAGENTA);
og 0:6a73dfa821a8 232 else if(i>19) lcd.writeData(YELLOW);
og 0:6a73dfa821a8 233 else lcd.writeData(BLACK);
og 0:6a73dfa821a8 234 //wait_ms(1);
og 0:6a73dfa821a8 235 }
og 0:6a73dfa821a8 236 }
og 0:6a73dfa821a8 237 //wait(5);
og 0:6a73dfa821a8 238 //}
og 0:6a73dfa821a8 239 }
og 0:6a73dfa821a8 240 char BUF[16];
og 0:6a73dfa821a8 241 main()
og 0:6a73dfa821a8 242 {
og 0:6a73dfa821a8 243 wait(1);
og 0:6a73dfa821a8 244 uint16_t identifier = lcd.readRegister(0x0);
og 0:6a73dfa821a8 245 uint16_t c, y;
og 0:6a73dfa821a8 246 uint16_t mode;
og 0:6a73dfa821a8 247 if (identifier == 0x0766) {
og 0:6a73dfa821a8 248 pc.printf("Found HD66766\n");
og 0:6a73dfa821a8 249 } else {
og 0:6a73dfa821a8 250 pc.printf("Unknown driver chip %X\n",identifier);
og 0:6a73dfa821a8 251 while (1);
og 0:6a73dfa821a8 252 }
og 0:6a73dfa821a8 253 lcd.initDisplay();
og 0:6a73dfa821a8 254 mode = 0;
og 0:6a73dfa821a8 255 while(1){
og 0:6a73dfa821a8 256 //lcd.mirror(1);
og 0:6a73dfa821a8 257 switch(mode) {
og 0:6a73dfa821a8 258 case 0: {
og 0:6a73dfa821a8 259 testText();
og 0:6a73dfa821a8 260 testBars();
og 0:6a73dfa821a8 261 wait(1);
og 0:6a73dfa821a8 262 break;
og 0:6a73dfa821a8 263 }
og 0:6a73dfa821a8 264 case 1: {
og 0:6a73dfa821a8 265 testfastlines(CYAN, MAGENTA);
og 0:6a73dfa821a8 266 break;
og 0:6a73dfa821a8 267 }
og 0:6a73dfa821a8 268 case 2: {
og 0:6a73dfa821a8 269 testtriangles();
og 0:6a73dfa821a8 270 testfilltriangles();
og 0:6a73dfa821a8 271 break;
og 0:6a73dfa821a8 272 }
og 0:6a73dfa821a8 273 case 3: {
og 0:6a73dfa821a8 274 testfillcircles(50, RED);
og 0:6a73dfa821a8 275 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 276 testdrawcircles(10, YELLOW);
og 0:6a73dfa821a8 277 break;
og 0:6a73dfa821a8 278 }
og 0:6a73dfa821a8 279 case 4: {
og 0:6a73dfa821a8 280 testdrawrects(GREEN);
og 0:6a73dfa821a8 281 testlines(BLUE);
og 0:6a73dfa821a8 282 testfillrects(RED, WHITE);
og 0:6a73dfa821a8 283 testFillRoundRect();
og 0:6a73dfa821a8 284 testdrawrects(GREEN);
og 0:6a73dfa821a8 285 break;
og 0:6a73dfa821a8 286 }
og 0:6a73dfa821a8 287 case 5: {
og 0:6a73dfa821a8 288 lcd.fillScreen(BLACK);
og 0:6a73dfa821a8 289 lcd.setTextColor(WHITE);
og 0:6a73dfa821a8 290 lcd.setTextSize(1);
og 0:6a73dfa821a8 291 lcd.drawPixel(0,0,WHITE);
og 0:6a73dfa821a8 292 lcd.setCursor(5, 0);
og 0:6a73dfa821a8 293 for (y = 0; y < 176; y ++) {
og 0:6a73dfa821a8 294 if (y > 140) {
og 0:6a73dfa821a8 295 sprintf(BUF, "%d\n", y);
og 0:6a73dfa821a8 296 lcd.println(BUF);
og 0:6a73dfa821a8 297 }
og 0:6a73dfa821a8 298 if (y % 10 == 0 ) c = CYAN;
og 0:6a73dfa821a8 299 else c = YELLOW;
og 0:6a73dfa821a8 300 lcd.drawPixel(0, y, c);
og 0:6a73dfa821a8 301 wait_ms(100);
og 0:6a73dfa821a8 302 }
og 0:6a73dfa821a8 303 lcd.fillScreen(RED);
og 0:6a73dfa821a8 304 wait(1);
og 0:6a73dfa821a8 305 lcd.fillScreen(GREEN);
og 0:6a73dfa821a8 306 wait(1);
og 0:6a73dfa821a8 307 lcd.fillScreen(BLUE);
og 0:6a73dfa821a8 308 wait(1);
og 0:6a73dfa821a8 309 lcd.fillScreen(WHITE);
og 0:6a73dfa821a8 310 wait(1);
og 0:6a73dfa821a8 311 break;
og 0:6a73dfa821a8 312 }
og 0:6a73dfa821a8 313
og 0:6a73dfa821a8 314 }
og 0:6a73dfa821a8 315 mode++;
og 0:6a73dfa821a8 316 }
og 0:6a73dfa821a8 317 }