k og / Mbed 2 deprecated Aitendo_LCD018-05P28P_HelloWorld

Dependencies:   HD66766 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /**
00002 http://suz-avr.sblo.jp/article/37364983.html
00003 http://elegadget.blog.fc2.com/blog-entry-5.html
00004 http://stm32f4.web.fc2.com/STM32F1/momiji_LCD018.html
00005 
00006 ARCH PRO:   D14, D15 Open Drain port, need pull up R.
00007 NUCLEO:     D0, D1 assigned UART port.
00008 
00009 not support rotation.
00010 **/
00011 
00012 #include "mbed.h"
00013 #include "HD66766.h"
00014 
00015 #define DEBUG   0
00016 
00017 #define BLACK           0x0000
00018 #define BLUE            0x001F
00019 #define RED             0xF800
00020 #define GREEN           0x07E0
00021 #define CYAN            0x07FF
00022 #define MAGENTA         0xF81F
00023 #define YELLOW          0xFFE0 
00024 #define WHITE           0xFFFF
00025 
00026 
00027 #if defined(TARGET_ARCH_PRO)
00028 HD66766 lcd(A0, A1, A2, A3, A4,
00029     D0, D1, D2, D3, D4, D5, D6, D7,
00030     D8, D9, D10, D11, D12, D13, D14, D15);
00031 Serial pc(USBTX, USBRX);
00032 //#elif defined TARGET_NUCLEO_F103RB
00033 //HD66766 lcd(A0, A1, A2, A3, A4,
00034 //    D0, D1, D2, D3, D4, D5, D6, D7,
00035 //    D8, D9, D10, D11, D12, D13, D14, D15);
00036 //Serial pc(SERIAL_TX, SERIAL_RX);
00037 //#elif defined TARGET_NUCLEO_F446RE
00038 //HD66766 lcd(A0, A1, A2, A3, A4,
00039 //    D0, D1, D2, D3, D4, D5, D6, D7,
00040 //    D8, D9, D10, D11, D12, D13, D14, D15);
00041 //Serial pc(SERIAL_TX, SERIAL_RX);
00042 
00043 #endif
00044 void testText() {
00045         lcd.fillScreen(BLACK);
00046         lcd.setCursor(0, 30);
00047         lcd.setTextColor(RED);
00048         lcd.setTextSize(1);
00049         lcd.println("Hello World!\n");
00050         wait_ms(500);
00051         lcd.setTextColor(YELLOW);
00052         lcd.setTextSize(2);
00053         lcd.println("Hello World!\n");
00054         wait_ms(500);
00055         lcd.setTextColor(GREEN);
00056         lcd.setTextSize(3);
00057         lcd.println("Hello World!\n");
00058         wait_ms(500);
00059         lcd.setTextColor(CYAN);
00060         lcd.setTextSize(3);
00061         lcd.println("Hello World!\n");
00062         wait_ms(500);
00063         lcd.setTextColor(MAGENTA);
00064         lcd.setTextSize(2);
00065         lcd.println("Hello World!\n");
00066         wait_ms(500);
00067         lcd.setTextColor(WHITE);
00068         lcd.setTextSize(1);
00069         lcd.println("Hello World!\n");
00070         wait_ms(500);
00071         lcd.setTextColor(BLUE);
00072         lcd.setTextSize(1);
00073         lcd.println("1234.567\n");
00074         wait_ms(500);
00075 
00076  }
00077 
00078 void testfillcircles(uint8_t radius, uint16_t color) {
00079   for (uint16_t x=radius; x < lcd.width(); x+=radius*2) {
00080     for (uint16_t y=radius; y < lcd.height(); y+=radius*2) {
00081       lcd.fillCircle(x, y, radius, color);
00082     }
00083   }  
00084 }
00085 
00086 void testdrawcircles(uint8_t radius, uint16_t color) {
00087   for (uint16_t x=0; x < lcd.width()+radius; x+=radius*2) {
00088     for (uint16_t y=0; y < lcd.height()+radius; y+=radius*2) {
00089       lcd.drawCircle(x, y, radius, color);
00090     }
00091   }  
00092 }
00093 
00094 void testfillrects(uint16_t color1, uint16_t color2) {
00095  lcd.fillScreen(BLACK);
00096  for (uint16_t x=lcd.width()-1; x > 6; x-=6) {
00097    //Serial.println(x, DEC);
00098    lcd.fillRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color1);
00099    lcd.drawRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color2);
00100  }
00101 }
00102 
00103 void testdrawrects(uint16_t color) {
00104  lcd.fillScreen(BLACK);
00105  for (uint16_t x=0; x < lcd.width(); x+=6) {
00106    //pc.printf("%d\r\n", x);
00107    lcd.drawRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color);
00108  }
00109 }
00110 
00111 void testFillRoundRect() {
00112   lcd.fillScreen(RED);
00113   
00114   for (uint16_t x=lcd.width(); x > 20 ; x-=6) {
00115     lcd.fillRoundRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, x/8,  lcd.Color565(0, x<<1, 0));
00116  }
00117 }
00118 
00119 void testfilltriangles() {
00120   lcd.fillScreen(BLACK);
00121   
00122   for (uint16_t i=lcd.width()/2; i>10; i-=5) {
00123     lcd.fillTriangle(lcd.width()/2, lcd.height()/2-i,
00124                      lcd.width()/2-i, lcd.height()/2+i,
00125                      lcd.width()/2+i, lcd.height()/2+i, 
00126                      BLUE);
00127     lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
00128                      lcd.width()/2-i, lcd.height()/2+i,
00129                      lcd.width()/2+i, lcd.height()/2+i, GREEN);    
00130   }
00131 }
00132 
00133 void testtriangles() {
00134   lcd.fillScreen(BLACK);
00135   for (uint16_t i=0; i<lcd.width()/2; i+=5) {
00136     lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
00137                      lcd.width()/2-i, lcd.height()/2+i,
00138                      lcd.width()/2+i, lcd.height()/2+i, YELLOW);
00139   }
00140 /*
00141   lcd.fillScreen(BLACK);
00142   for (uint16_t i=0; i<lcd.width()/2; i+=5) {
00143     lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
00144                      lcd.width()/2-i, lcd.height()/2+i,
00145                      lcd.width()/2+i, lcd.height()/2+i, lcd.Color565(0, i, 0));
00146   }
00147   lcd.fillScreen(BLACK);
00148   for (uint16_t i=0; i<lcd.width()/2; i+=5) {
00149     lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
00150                      lcd.width()/2-i, lcd.height()/2+i,
00151                      lcd.width()/2+i, lcd.height()/2+i, lcd.Color565(i, 0, 0));
00152   }
00153 */
00154 }
00155 
00156 void testfastlines(uint16_t color1, uint16_t color2) {
00157    lcd.fillScreen(BLACK);
00158    for (uint16_t y=0; y < lcd.height(); y+=4) {
00159    //  pc.printf("%d\r\n", y);
00160      lcd.drawHorizontalLine(0, y, lcd.width(), color1);
00161    }
00162    for (uint16_t x=0; x < lcd.width(); x+=4) {
00163    //  pc.printf("%d\r\n", x);
00164      lcd.drawVerticalLine(x, 0, lcd.height(), color2);
00165    }
00166   
00167 }
00168 
00169 void testlines(uint16_t color) {
00170    lcd.fillScreen(BLACK);
00171    for (uint16_t x=0; x < lcd.width(); x+=6) {
00172      lcd.drawLine(0, 0, x, lcd.height()-1, color);
00173    }
00174    for (uint16_t y=0; y < lcd.height(); y+=6) {
00175      lcd.drawLine(0, 0, lcd.width()-1, y, color);
00176    }
00177    
00178    lcd.fillScreen(BLACK);
00179    for (uint16_t x=0; x < lcd.width(); x+=6) {
00180      lcd.drawLine(lcd.width()-1, 0, x, lcd.height()-1, color);
00181    }
00182    for (uint16_t y=0; y < lcd.height(); y+=6) {
00183      lcd.drawLine(lcd.width()-1, 0, 0, y, color);
00184    }
00185    
00186    lcd.fillScreen(BLACK);
00187    for (uint16_t x=0; x < lcd.width(); x+=6) {
00188      lcd.drawLine(0, lcd.height()-1, x, 0, color);
00189    }
00190    for (uint16_t y=0; y < lcd.height(); y+=6) {
00191      lcd.drawLine(0, lcd.height()-1, lcd.width()-1, y, color);
00192    }
00193 
00194    lcd.fillScreen(BLACK);
00195    for (uint16_t x=0; x < lcd.width(); x+=6) {
00196      lcd.drawLine(lcd.width()-1, lcd.height()-1, x, 0, color);
00197    }
00198    for (uint16_t y=0; y < lcd.height(); y+=6) {
00199      lcd.drawLine(lcd.width()-1, lcd.height()-1, 0, y, color);
00200    }
00201 }
00202 
00203 void testBars() {
00204     //for (int id = 0x0000; id <= 0x0007; id++) {
00205     //lcd.writeRegister(0x0005, id<<3); // Entry Mode
00206     lcd.goHome();
00207 
00208     uint16_t i,j;
00209     lcd.writeCommand(0x0022);
00210     for(i=0; i < lcd.height(); i++)
00211     {
00212         for(j=0; j < 64; j++)
00213         {
00214             if (i>79) lcd.writeData(BLACK);
00215             //else if(i>239) lcd.writeData(YELLOW);
00216             //else if(i>199) lcd.writeData(MAGENTA);
00217             //else if(i>159) lcd.writeData(RED);
00218             //else if(i>119) lcd.writeData(CYAN);
00219             //else if(i>79) lcd.writeData(GREEN);
00220             //else if(i>39) lcd.writeData(BLUE);
00221             else lcd.writeData(WHITE);
00222             //wait_ms(1);
00223         }
00224         for(j=0; j < 64; j++)
00225         {
00226             if (i>139) lcd.writeData(WHITE);
00227             else if(i>119) lcd.writeData(BLUE);
00228             else if(i>99) lcd.writeData(GREEN);
00229             else if(i>79) lcd.writeData(CYAN);
00230             else if(i>59) lcd.writeData(RED);
00231             else if(i>39) lcd.writeData(MAGENTA);
00232             else if(i>19) lcd.writeData(YELLOW);
00233             else lcd.writeData(BLACK);
00234             //wait_ms(1);
00235         }
00236     }
00237     //wait(5);
00238     //}
00239 }
00240 char BUF[16];
00241 main()
00242 {
00243     wait(1);
00244     uint16_t  identifier = lcd.readRegister(0x0);
00245     uint16_t c, y;
00246     uint16_t mode;
00247     if (identifier == 0x0766) {
00248         pc.printf("Found HD66766\n");
00249     } else {
00250         pc.printf("Unknown driver chip %X\n",identifier);
00251         while (1);
00252     } 
00253     lcd.initDisplay();
00254     mode = 0;
00255     while(1){
00256         //lcd.mirror(1);
00257         switch(mode) {
00258             case 0: {
00259                 testText();
00260                 testBars();
00261                 wait(1);
00262                 break;
00263             }
00264             case 1: {
00265                 testfastlines(CYAN, MAGENTA);
00266                 break;
00267             }
00268             case 2: {
00269                 testtriangles();
00270                 testfilltriangles();
00271                 break;
00272             }
00273             case 3: {
00274                 testfillcircles(50, RED);
00275                 lcd.fillScreen(BLACK);
00276                 testdrawcircles(10, YELLOW);
00277                 break;
00278             }
00279             case 4: {
00280                 testdrawrects(GREEN);
00281                 testlines(BLUE);
00282                 testfillrects(RED, WHITE);
00283                 testFillRoundRect();
00284                 testdrawrects(GREEN);
00285                 break;
00286             }
00287             case 5: {
00288                 lcd.fillScreen(BLACK);
00289                 lcd.setTextColor(WHITE);
00290                 lcd.setTextSize(1);
00291                 lcd.drawPixel(0,0,WHITE);
00292                 lcd.setCursor(5, 0);
00293                 for (y = 0; y < 176; y ++) {
00294                     if (y > 140) {
00295                     sprintf(BUF, "%d\n", y);
00296                     lcd.println(BUF);
00297                     }
00298                     if (y % 10 == 0 ) c = CYAN;
00299                     else c = YELLOW;
00300                     lcd.drawPixel(0, y, c);
00301                     wait_ms(100);
00302                 }
00303                 lcd.fillScreen(RED);
00304                 wait(1);
00305                 lcd.fillScreen(GREEN);
00306                 wait(1);
00307                 lcd.fillScreen(BLUE);
00308                 wait(1);
00309                 lcd.fillScreen(WHITE);
00310                 wait(1);
00311                 break;
00312             }
00313 
00314         }
00315         mode++;
00316     }
00317 }