k og / Mbed 2 deprecated Aitendo_LCD018-05P28P_HelloWorld

Dependencies:   HD66766 mbed

Files at this revision

API Documentation at this revision

Comitter:
og
Date:
Sat Sep 24 12:50:32 2016 +0000
Commit message:
first commit

Changed in this revision

HD66766.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 6a73dfa821a8 HD66766.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HD66766.lib	Sat Sep 24 12:50:32 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/og/code/HD66766/#56ce29613827
diff -r 000000000000 -r 6a73dfa821a8 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Sep 24 12:50:32 2016 +0000
@@ -0,0 +1,317 @@
+/**
+http://suz-avr.sblo.jp/article/37364983.html
+http://elegadget.blog.fc2.com/blog-entry-5.html
+http://stm32f4.web.fc2.com/STM32F1/momiji_LCD018.html
+
+ARCH PRO:   D14, D15 Open Drain port, need pull up R.
+NUCLEO:     D0, D1 assigned UART port.
+
+not support rotation.
+**/
+
+#include "mbed.h"
+#include "HD66766.h"
+
+#define DEBUG   0
+
+#define BLACK           0x0000
+#define BLUE            0x001F
+#define RED             0xF800
+#define GREEN           0x07E0
+#define CYAN            0x07FF
+#define MAGENTA         0xF81F
+#define YELLOW          0xFFE0 
+#define WHITE           0xFFFF
+
+
+#if defined(TARGET_ARCH_PRO)
+HD66766 lcd(A0, A1, A2, A3, A4,
+    D0, D1, D2, D3, D4, D5, D6, D7,
+    D8, D9, D10, D11, D12, D13, D14, D15);
+Serial pc(USBTX, USBRX);
+//#elif defined TARGET_NUCLEO_F103RB
+//HD66766 lcd(A0, A1, A2, A3, A4,
+//    D0, D1, D2, D3, D4, D5, D6, D7,
+//    D8, D9, D10, D11, D12, D13, D14, D15);
+//Serial pc(SERIAL_TX, SERIAL_RX);
+//#elif defined TARGET_NUCLEO_F446RE
+//HD66766 lcd(A0, A1, A2, A3, A4,
+//    D0, D1, D2, D3, D4, D5, D6, D7,
+//    D8, D9, D10, D11, D12, D13, D14, D15);
+//Serial pc(SERIAL_TX, SERIAL_RX);
+
+#endif
+void testText() {
+        lcd.fillScreen(BLACK);
+        lcd.setCursor(0, 30);
+        lcd.setTextColor(RED);
+        lcd.setTextSize(1);
+        lcd.println("Hello World!\n");
+        wait_ms(500);
+        lcd.setTextColor(YELLOW);
+        lcd.setTextSize(2);
+        lcd.println("Hello World!\n");
+        wait_ms(500);
+        lcd.setTextColor(GREEN);
+        lcd.setTextSize(3);
+        lcd.println("Hello World!\n");
+        wait_ms(500);
+        lcd.setTextColor(CYAN);
+        lcd.setTextSize(3);
+        lcd.println("Hello World!\n");
+        wait_ms(500);
+        lcd.setTextColor(MAGENTA);
+        lcd.setTextSize(2);
+        lcd.println("Hello World!\n");
+        wait_ms(500);
+        lcd.setTextColor(WHITE);
+        lcd.setTextSize(1);
+        lcd.println("Hello World!\n");
+        wait_ms(500);
+        lcd.setTextColor(BLUE);
+        lcd.setTextSize(1);
+        lcd.println("1234.567\n");
+        wait_ms(500);
+
+ }
+
+void testfillcircles(uint8_t radius, uint16_t color) {
+  for (uint16_t x=radius; x < lcd.width(); x+=radius*2) {
+    for (uint16_t y=radius; y < lcd.height(); y+=radius*2) {
+      lcd.fillCircle(x, y, radius, color);
+    }
+  }  
+}
+
+void testdrawcircles(uint8_t radius, uint16_t color) {
+  for (uint16_t x=0; x < lcd.width()+radius; x+=radius*2) {
+    for (uint16_t y=0; y < lcd.height()+radius; y+=radius*2) {
+      lcd.drawCircle(x, y, radius, color);
+    }
+  }  
+}
+
+void testfillrects(uint16_t color1, uint16_t color2) {
+ lcd.fillScreen(BLACK);
+ for (uint16_t x=lcd.width()-1; x > 6; x-=6) {
+   //Serial.println(x, DEC);
+   lcd.fillRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color1);
+   lcd.drawRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color2);
+ }
+}
+
+void testdrawrects(uint16_t color) {
+ lcd.fillScreen(BLACK);
+ for (uint16_t x=0; x < lcd.width(); x+=6) {
+   //pc.printf("%d\r\n", x);
+   lcd.drawRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, color);
+ }
+}
+
+void testFillRoundRect() {
+  lcd.fillScreen(RED);
+  
+  for (uint16_t x=lcd.width(); x > 20 ; x-=6) {
+    lcd.fillRoundRect(lcd.width()/2 -x/2, lcd.height()/2 -x/2 , x, x, x/8,  lcd.Color565(0, x<<1, 0));
+ }
+}
+
+void testfilltriangles() {
+  lcd.fillScreen(BLACK);
+  
+  for (uint16_t i=lcd.width()/2; i>10; i-=5) {
+    lcd.fillTriangle(lcd.width()/2, lcd.height()/2-i,
+                     lcd.width()/2-i, lcd.height()/2+i,
+                     lcd.width()/2+i, lcd.height()/2+i, 
+                     BLUE);
+    lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
+                     lcd.width()/2-i, lcd.height()/2+i,
+                     lcd.width()/2+i, lcd.height()/2+i, GREEN);    
+  }
+}
+
+void testtriangles() {
+  lcd.fillScreen(BLACK);
+  for (uint16_t i=0; i<lcd.width()/2; i+=5) {
+    lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
+                     lcd.width()/2-i, lcd.height()/2+i,
+                     lcd.width()/2+i, lcd.height()/2+i, YELLOW);
+  }
+/*
+  lcd.fillScreen(BLACK);
+  for (uint16_t i=0; i<lcd.width()/2; i+=5) {
+    lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
+                     lcd.width()/2-i, lcd.height()/2+i,
+                     lcd.width()/2+i, lcd.height()/2+i, lcd.Color565(0, i, 0));
+  }
+  lcd.fillScreen(BLACK);
+  for (uint16_t i=0; i<lcd.width()/2; i+=5) {
+    lcd.drawTriangle(lcd.width()/2, lcd.height()/2-i,
+                     lcd.width()/2-i, lcd.height()/2+i,
+                     lcd.width()/2+i, lcd.height()/2+i, lcd.Color565(i, 0, 0));
+  }
+*/
+}
+
+void testfastlines(uint16_t color1, uint16_t color2) {
+   lcd.fillScreen(BLACK);
+   for (uint16_t y=0; y < lcd.height(); y+=4) {
+   //  pc.printf("%d\r\n", y);
+     lcd.drawHorizontalLine(0, y, lcd.width(), color1);
+   }
+   for (uint16_t x=0; x < lcd.width(); x+=4) {
+   //  pc.printf("%d\r\n", x);
+     lcd.drawVerticalLine(x, 0, lcd.height(), color2);
+   }
+  
+}
+
+void testlines(uint16_t color) {
+   lcd.fillScreen(BLACK);
+   for (uint16_t x=0; x < lcd.width(); x+=6) {
+     lcd.drawLine(0, 0, x, lcd.height()-1, color);
+   }
+   for (uint16_t y=0; y < lcd.height(); y+=6) {
+     lcd.drawLine(0, 0, lcd.width()-1, y, color);
+   }
+   
+   lcd.fillScreen(BLACK);
+   for (uint16_t x=0; x < lcd.width(); x+=6) {
+     lcd.drawLine(lcd.width()-1, 0, x, lcd.height()-1, color);
+   }
+   for (uint16_t y=0; y < lcd.height(); y+=6) {
+     lcd.drawLine(lcd.width()-1, 0, 0, y, color);
+   }
+   
+   lcd.fillScreen(BLACK);
+   for (uint16_t x=0; x < lcd.width(); x+=6) {
+     lcd.drawLine(0, lcd.height()-1, x, 0, color);
+   }
+   for (uint16_t y=0; y < lcd.height(); y+=6) {
+     lcd.drawLine(0, lcd.height()-1, lcd.width()-1, y, color);
+   }
+
+   lcd.fillScreen(BLACK);
+   for (uint16_t x=0; x < lcd.width(); x+=6) {
+     lcd.drawLine(lcd.width()-1, lcd.height()-1, x, 0, color);
+   }
+   for (uint16_t y=0; y < lcd.height(); y+=6) {
+     lcd.drawLine(lcd.width()-1, lcd.height()-1, 0, y, color);
+   }
+}
+
+void testBars() {
+    //for (int id = 0x0000; id <= 0x0007; id++) {
+    //lcd.writeRegister(0x0005, id<<3); // Entry Mode
+    lcd.goHome();
+
+    uint16_t i,j;
+    lcd.writeCommand(0x0022);
+    for(i=0; i < lcd.height(); i++)
+    {
+        for(j=0; j < 64; j++)
+        {
+            if (i>79) lcd.writeData(BLACK);
+            //else if(i>239) lcd.writeData(YELLOW);
+            //else if(i>199) lcd.writeData(MAGENTA);
+            //else if(i>159) lcd.writeData(RED);
+            //else if(i>119) lcd.writeData(CYAN);
+            //else if(i>79) lcd.writeData(GREEN);
+            //else if(i>39) lcd.writeData(BLUE);
+            else lcd.writeData(WHITE);
+            //wait_ms(1);
+        }
+        for(j=0; j < 64; j++)
+        {
+            if (i>139) lcd.writeData(WHITE);
+            else if(i>119) lcd.writeData(BLUE);
+            else if(i>99) lcd.writeData(GREEN);
+            else if(i>79) lcd.writeData(CYAN);
+            else if(i>59) lcd.writeData(RED);
+            else if(i>39) lcd.writeData(MAGENTA);
+            else if(i>19) lcd.writeData(YELLOW);
+            else lcd.writeData(BLACK);
+            //wait_ms(1);
+        }
+    }
+    //wait(5);
+    //}
+}
+char BUF[16];
+main()
+{
+    wait(1);
+    uint16_t  identifier = lcd.readRegister(0x0);
+    uint16_t c, y;
+    uint16_t mode;
+    if (identifier == 0x0766) {
+        pc.printf("Found HD66766\n");
+    } else {
+        pc.printf("Unknown driver chip %X\n",identifier);
+        while (1);
+    } 
+    lcd.initDisplay();
+    mode = 0;
+    while(1){
+        //lcd.mirror(1);
+        switch(mode) {
+            case 0: {
+                testText();
+                testBars();
+                wait(1);
+                break;
+            }
+            case 1: {
+                testfastlines(CYAN, MAGENTA);
+                break;
+            }
+            case 2: {
+                testtriangles();
+                testfilltriangles();
+                break;
+            }
+            case 3: {
+                testfillcircles(50, RED);
+                lcd.fillScreen(BLACK);
+                testdrawcircles(10, YELLOW);
+                break;
+            }
+            case 4: {
+                testdrawrects(GREEN);
+                testlines(BLUE);
+                testfillrects(RED, WHITE);
+                testFillRoundRect();
+                testdrawrects(GREEN);
+                break;
+            }
+            case 5: {
+                lcd.fillScreen(BLACK);
+                lcd.setTextColor(WHITE);
+                lcd.setTextSize(1);
+                lcd.drawPixel(0,0,WHITE);
+                lcd.setCursor(5, 0);
+                for (y = 0; y < 176; y ++) {
+                    if (y > 140) {
+                    sprintf(BUF, "%d\n", y);
+                    lcd.println(BUF);
+                    }
+                    if (y % 10 == 0 ) c = CYAN;
+                    else c = YELLOW;
+                    lcd.drawPixel(0, y, c);
+                    wait_ms(100);
+                }
+                lcd.fillScreen(RED);
+                wait(1);
+                lcd.fillScreen(GREEN);
+                wait(1);
+                lcd.fillScreen(BLUE);
+                wait(1);
+                lcd.fillScreen(WHITE);
+                wait(1);
+                break;
+            }
+
+        }
+        mode++;
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r 6a73dfa821a8 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Sep 24 12:50:32 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/abea610beb85
\ No newline at end of file