Mochu Yao explorer game

Dependencies:   mbed

Revision:
1:ed745421d8c4
Parent:
0:39a85181b766
--- a/N5110/N5110.h	Wed Apr 08 08:33:48 2020 +0000
+++ b/N5110/N5110.h	Wed Apr 15 08:17:18 2020 +0000
@@ -3,30 +3,6 @@
 
 #include "mbed.h"
 
-// Command Bytes - taken from Chris Yan's library
-// More information can be found in the display datasheet
-// H = 0 - Basic instructions
-#define CMD_DC_CLEAR_DISPLAY   0x08
-#define CMD_DC_NORMAL_MODE     0x0C
-#define CMD_DC_FILL_DISPLAY    0x09
-#define CMD_DC_INVERT_VIDEO    0x0D
-#define CMD_FS_HORIZONTAL_MODE 0x00
-#define CMD_FS_VERTICAL_MODE   0x02
-#define CMD_FS_BASIC_MODE      0x00
-#define CMD_FS_EXTENDED_MODE   0x01
-#define CMD_FS_ACTIVE_MODE     0x00
-#define CMD_FS_POWER_DOWN_MODE 0x04
-// H = 1 - Extended instructions
-#define CMD_TC_TEMP_0          0x04
-#define CMD_TC_TEMP_1          0x05
-#define CMD_TC_TEMP_2          0x06
-#define CMD_TC_TEMP_3          0x07
-#define CMD_BI_MUX_24          0x15
-#define CMD_BI_MUX_48          0x13
-#define CMD_BI_MUX_100         0x10
-#define CMD_VOP_6V06           0xB2
-#define CMD_VOP_7V38           0xC8
-
 // number of pixels on display
 #define WIDTH 84
 #define HEIGHT 48
@@ -57,14 +33,31 @@
 #include "mbed.h"
 #include "N5110.h"
 
+//      rows,cols
+int sprite[8][5] =   {
+    { 0,0,1,0,0 },
+    { 0,1,1,1,0 },
+    { 0,0,1,0,0 },
+    { 0,1,1,1,0 },
+    { 1,1,1,1,1 },
+    { 1,1,1,1,1 },
+    { 1,1,0,1,1 },
+    { 1,1,0,1,1 },
+};
+
 //    VCC,SCE,RST,D/C,MOSI,SCLK,LED
 //N5110 lcd(p7,p8,p9,p10,p11,p13,p21);  // LPC1768 - pwr from GPIO
-N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);  // K64F - pwr from 3V3
+N5110 lcd(p8,p9,p10,p11,p13,p21);  // LPC1768 - powered from +3V3 - JP1 in 2/3 position
+//N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);  // K64F - pwr from 3V3
 
 int main()
 {
     // first need to initialise display
     lcd.init();
+    
+    // change set contrast in range 0.0 to 1.0
+    // 0.4 appears to be a good starting point
+    lcd.setContrast(0.4);
 
     while(1) {
 
@@ -72,6 +65,12 @@
         lcd.normalMode();      // normal colour mode
         lcd.setBrightness(0.5); // put LED backlight on 50%
 
+        lcd.clear();
+        // x origin, y origin, rows, cols, sprite
+        lcd.drawSprite(20,6,8,5,(int *)sprite);
+        lcd.refresh();
+        wait(5.0);
+
         lcd.clear(); // clear buffer at start of every loop
         // can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display)
         lcd.printString("Hello, World!",0,0);
@@ -95,7 +94,7 @@
 
         // draw a line across the display at y = 40 pixels (origin top-left)
         for (int i = 0; i < WIDTH; i++) {
-            lcd.setPixel(i,40);
+            lcd.setPixel(i,40,true);
         }
         // need to refresh display after setting pixels or writing strings
         lcd.refresh();
@@ -103,23 +102,21 @@
 
         // can check status of pixel using getPixel(x,y);
         lcd.clear();  // clear buffer
-        lcd.setPixel(2,2);  // set random pixel in buffer
+        lcd.setPixel(2,2,true);  // set random pixel in buffer
         lcd.refresh();
         wait(1.0);
 
         int pixel_to_test = lcd.getPixel(2,2);
 
-        printf("2,2 Pixel value = %i\n",pixel_to_test);
-
         if ( pixel_to_test ) {
             lcd.printString("2,2 is set",0,4);
         }
 
         // this one shouldn't be set
+        lcd.setPixel(3,3,false);  // clear random pixel in buffer
+        lcd.refresh();
         pixel_to_test = lcd.getPixel(3,3);
 
-        printf("3,3 Pixel value = %i\n",pixel_to_test);
-
         if ( pixel_to_test == 0 ) {
             lcd.printString("3,3 is clear",0,5);
         }
@@ -169,12 +166,14 @@
         //          origin x,y,width,height,type
         lcd.drawRect(10,10,50,30,FILL_BLACK);  // filled black rectangle
         lcd.drawRect(15,15,20,10,FILL_WHITE);  // filled white rectange (no outline)
-        lcd.drawRect(2,2,70,40,  FILL_TRANSPARENT);    // transparent, just outline
+        lcd.drawRect(2,2,70,40,FILL_TRANSPARENT);    // transparent, just outline
         lcd.refresh();  // refresh after drawing shapes
         wait(5.0);
+
     }
 }
 
+
 @endcode
 */
 class N5110
@@ -253,6 +252,11 @@
     */
     void clear();
 
+    /** Set screen constrast
+    *   @param constrast - float in range 0.0 to 1.0 (0.40 to 0.60 is usually a good value)
+    */
+    void setContrast(float contrast);
+    
     /** Turn on normal video mode (default)
     *  Black on white
     */
@@ -291,23 +295,33 @@
                    unsigned int const x,
                    unsigned int const y);
 
-    /** Set a Pixel
+    /**
+    * @brief Set a Pixel
     *
-    *   This function sets a pixel in the screen buffer.
-    *   @param  x - the x co-ordinate of the pixel (0 to 83)
-    *   @param  y - the y co-ordinate of the pixel (0 to 47)
+    * @param x     The x co-ordinate of the pixel (0 to 83)
+    * @param y     The y co-ordinate of the pixel (0 to 47)
+    * @param state The state of the pixel [true=black (default), false=white]
+    *
+    * @details This function sets the state of a pixel in the screen buffer.
+    *          The third parameter can be omitted,
     */
     void setPixel(unsigned int const x,
-                  unsigned int const y);
+                  unsigned int const y,
+                  bool const         state = true);
 
-    /** Clear a Pixel
+    /**
+    *  @brief Clear a Pixel
     *
-    *   This function clears pixel in the screen buffer
     *   @param  x - the x co-ordinate of the pixel (0 to 83)
     *   @param  y - the y co-ordinate of the pixel (0 to 47)
+    *
+    *   @details This function clears pixel in the screen buffer
+    *
+    *   @deprecated Use setPixel(x, y, false) instead
     */
     void clearPixel(unsigned int const x,
-                    unsigned int const y);
+                    unsigned int const y)
+    __attribute__((deprecated("Use setPixel(x,y,false) instead")));
 
     /** Get a Pixel
     *
@@ -388,6 +402,22 @@
                   unsigned int const height,
                   FillType const     fill);
 
+    /** Draw Sprite
+    *
+    *   This function draws a sprite as defined in a 2D array
+    *   @param  x0 - x-coordinate of origin (top-left)
+    *   @param  y0 - y-coordinate of origin (top-left)
+    *   @param  nrows - number of rows in sprite
+    *   @param  ncols - number of columns in sprite
+    *   @param  sprite - 2D array representing the sprite
+    */
+    void drawSprite(int x0,
+                    int y0,
+                    int nrows,
+                    int ncols,
+                    int *sprite);
+
+
 private:
 // methods
     void setXYAddress(unsigned int const x,
@@ -398,6 +428,8 @@
     void clearRAM();
     void sendCommand(unsigned char command);
     void sendData(unsigned char data);
+    void setTempCoefficient(char tc);  // 0 to 3
+    void setBias(char bias);  // 0 to 7
 };
 
 const unsigned char font5x7[480] = {