Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Sat Jul 16 2022 03:47:05 by
1.7.2