Julian Garcia
/
nokia_5110_2
Program with 5510 functions for mbedd, this are not organized in a object model, just functions
main.cpp@1:023f6d8981d8, 2011-03-18 (annotated)
- Committer:
- jaga1184
- Date:
- Fri Mar 18 00:19:35 2011 +0000
- Revision:
- 1:023f6d8981d8
- Parent:
- 0:f3c29d937050
beta,english
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jaga1184 | 0:f3c29d937050 | 1 | #include "mbed.h" |
jaga1184 | 0:f3c29d937050 | 2 | #include "figures.h" |
jaga1184 | 0:f3c29d937050 | 3 | //#include <pcd8544_drv.hpp> |
jaga1184 | 0:f3c29d937050 | 4 | |
jaga1184 | 0:f3c29d937050 | 5 | /* |
jaga1184 | 0:f3c29d937050 | 6 | This Code has extra features |
jaga1184 | 0:f3c29d937050 | 7 | including a XY positioning function on Display |
jaga1184 | 0:f3c29d937050 | 8 | and a Line Draw function on Nokia 3310 LCD |
jaga1184 | 0:f3c29d937050 | 9 | It is modded from the original |
jaga1184 | 0:f3c29d937050 | 10 | http://www.arduino.cc/playground/Code/PCD8544 |
jaga1184 | 0:f3c29d937050 | 11 | */ |
jaga1184 | 0:f3c29d937050 | 12 | // Mods by Jim Park |
jaga1184 | 0:f3c29d937050 | 13 | // jim(^dOt^)buzz(^aT^)gmail(^dOt^)com |
jaga1184 | 0:f3c29d937050 | 14 | // hope it works for you |
jaga1184 | 0:f3c29d937050 | 15 | DigitalOut PIN_SCE(p26);//p21); // 7 // LCD CS .... Pin 3 |
jaga1184 | 0:f3c29d937050 | 16 | DigitalOut PIN_RESET(p27);//p22);// 6 // LCD RST .... Pin 1 |
jaga1184 | 0:f3c29d937050 | 17 | DigitalOut PIN_DC(p28);//p23); // 5 // LCD Dat/Com. Pin 5 |
jaga1184 | 0:f3c29d937050 | 18 | DigitalOut PIN_SDIN(p29);//p24); // 4 // LCD SPIDat . Pin 6 |
jaga1184 | 0:f3c29d937050 | 19 | DigitalOut PIN_SCLK(p30);//p25); // 3 // LCD SPIClk . Pin 4 |
jaga1184 | 0:f3c29d937050 | 20 | // LCD Gnd .... Pin 2 |
jaga1184 | 0:f3c29d937050 | 21 | // LCD Vcc .... Pin 8 |
jaga1184 | 0:f3c29d937050 | 22 | // LCD Vlcd ... Pin 7 |
jaga1184 | 0:f3c29d937050 | 23 | DigitalOut PIN_BCKL(p25);//Nokia 5110 backligth |
jaga1184 | 0:f3c29d937050 | 24 | |
jaga1184 | 0:f3c29d937050 | 25 | |
jaga1184 | 0:f3c29d937050 | 26 | #define LCD_C 0 |
jaga1184 | 0:f3c29d937050 | 27 | #define LCD_D 1 |
jaga1184 | 0:f3c29d937050 | 28 | |
jaga1184 | 0:f3c29d937050 | 29 | #define LCD_X 84 |
jaga1184 | 0:f3c29d937050 | 30 | #define LCD_Y 48 |
jaga1184 | 0:f3c29d937050 | 31 | #define LCD_CMD 0 |
jaga1184 | 0:f3c29d937050 | 32 | |
jaga1184 | 0:f3c29d937050 | 33 | #define YMAX 48 |
jaga1184 | 0:f3c29d937050 | 34 | #define XMAX 84 |
jaga1184 | 0:f3c29d937050 | 35 | int bufferLcd[XMAX][YMAX]={0}; |
jaga1184 | 0:f3c29d937050 | 36 | |
jaga1184 | 0:f3c29d937050 | 37 | #define byte char |
jaga1184 | 0:f3c29d937050 | 38 | // Function prototype |
jaga1184 | 0:f3c29d937050 | 39 | void LcdWrite(char dc, char data); |
jaga1184 | 0:f3c29d937050 | 40 | void shiftOut(DigitalOut dataPin,DigitalOut clockPin,char bitOrder, char value ); |
jaga1184 | 0:f3c29d937050 | 41 | #define MSBFIRST 1 |
jaga1184 | 0:f3c29d937050 | 42 | #define LSBFIRST 0 |
jaga1184 | 0:f3c29d937050 | 43 | |
jaga1184 | 0:f3c29d937050 | 44 | int a = 0; |
jaga1184 | 0:f3c29d937050 | 45 | |
jaga1184 | 0:f3c29d937050 | 46 | static const char ASCII[][5] = { |
jaga1184 | 0:f3c29d937050 | 47 | {0x00, 0x00, 0x00, 0x00, 0x00} // 20 |
jaga1184 | 0:f3c29d937050 | 48 | ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! |
jaga1184 | 0:f3c29d937050 | 49 | ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " |
jaga1184 | 0:f3c29d937050 | 50 | ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # |
jaga1184 | 0:f3c29d937050 | 51 | ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ |
jaga1184 | 0:f3c29d937050 | 52 | ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % |
jaga1184 | 0:f3c29d937050 | 53 | ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & |
jaga1184 | 0:f3c29d937050 | 54 | ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' |
jaga1184 | 0:f3c29d937050 | 55 | ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( |
jaga1184 | 0:f3c29d937050 | 56 | ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) |
jaga1184 | 0:f3c29d937050 | 57 | ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * |
jaga1184 | 0:f3c29d937050 | 58 | ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + |
jaga1184 | 0:f3c29d937050 | 59 | ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , |
jaga1184 | 0:f3c29d937050 | 60 | ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - |
jaga1184 | 0:f3c29d937050 | 61 | ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . |
jaga1184 | 0:f3c29d937050 | 62 | ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / |
jaga1184 | 0:f3c29d937050 | 63 | ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 |
jaga1184 | 0:f3c29d937050 | 64 | ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 |
jaga1184 | 0:f3c29d937050 | 65 | ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 |
jaga1184 | 0:f3c29d937050 | 66 | ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 |
jaga1184 | 0:f3c29d937050 | 67 | ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 |
jaga1184 | 0:f3c29d937050 | 68 | ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 |
jaga1184 | 0:f3c29d937050 | 69 | ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 |
jaga1184 | 0:f3c29d937050 | 70 | ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 |
jaga1184 | 0:f3c29d937050 | 71 | ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 |
jaga1184 | 0:f3c29d937050 | 72 | ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 |
jaga1184 | 0:f3c29d937050 | 73 | ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : |
jaga1184 | 0:f3c29d937050 | 74 | ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; |
jaga1184 | 0:f3c29d937050 | 75 | ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < |
jaga1184 | 0:f3c29d937050 | 76 | ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = |
jaga1184 | 0:f3c29d937050 | 77 | ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > |
jaga1184 | 0:f3c29d937050 | 78 | ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? |
jaga1184 | 0:f3c29d937050 | 79 | ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ |
jaga1184 | 0:f3c29d937050 | 80 | ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A |
jaga1184 | 0:f3c29d937050 | 81 | ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B |
jaga1184 | 0:f3c29d937050 | 82 | ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C |
jaga1184 | 0:f3c29d937050 | 83 | ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D |
jaga1184 | 0:f3c29d937050 | 84 | ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E |
jaga1184 | 0:f3c29d937050 | 85 | ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F |
jaga1184 | 0:f3c29d937050 | 86 | ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G |
jaga1184 | 0:f3c29d937050 | 87 | ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H |
jaga1184 | 0:f3c29d937050 | 88 | ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I |
jaga1184 | 0:f3c29d937050 | 89 | ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J |
jaga1184 | 0:f3c29d937050 | 90 | ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K |
jaga1184 | 0:f3c29d937050 | 91 | ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L |
jaga1184 | 0:f3c29d937050 | 92 | ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M |
jaga1184 | 0:f3c29d937050 | 93 | ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N |
jaga1184 | 0:f3c29d937050 | 94 | ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O |
jaga1184 | 0:f3c29d937050 | 95 | ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P |
jaga1184 | 0:f3c29d937050 | 96 | ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q |
jaga1184 | 0:f3c29d937050 | 97 | ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R |
jaga1184 | 0:f3c29d937050 | 98 | ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S |
jaga1184 | 0:f3c29d937050 | 99 | ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T |
jaga1184 | 0:f3c29d937050 | 100 | ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U |
jaga1184 | 0:f3c29d937050 | 101 | ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V |
jaga1184 | 0:f3c29d937050 | 102 | ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W |
jaga1184 | 0:f3c29d937050 | 103 | ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X |
jaga1184 | 0:f3c29d937050 | 104 | ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y |
jaga1184 | 0:f3c29d937050 | 105 | ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z |
jaga1184 | 0:f3c29d937050 | 106 | ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ |
jaga1184 | 0:f3c29d937050 | 107 | ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c � |
jaga1184 | 0:f3c29d937050 | 108 | ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] |
jaga1184 | 0:f3c29d937050 | 109 | ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ |
jaga1184 | 0:f3c29d937050 | 110 | ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ |
jaga1184 | 0:f3c29d937050 | 111 | ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` |
jaga1184 | 0:f3c29d937050 | 112 | ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a |
jaga1184 | 0:f3c29d937050 | 113 | ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b |
jaga1184 | 0:f3c29d937050 | 114 | ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c |
jaga1184 | 0:f3c29d937050 | 115 | ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d |
jaga1184 | 0:f3c29d937050 | 116 | ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e |
jaga1184 | 0:f3c29d937050 | 117 | ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f |
jaga1184 | 0:f3c29d937050 | 118 | ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g |
jaga1184 | 0:f3c29d937050 | 119 | ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h |
jaga1184 | 0:f3c29d937050 | 120 | ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i |
jaga1184 | 0:f3c29d937050 | 121 | ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j |
jaga1184 | 0:f3c29d937050 | 122 | ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k |
jaga1184 | 0:f3c29d937050 | 123 | ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l |
jaga1184 | 0:f3c29d937050 | 124 | ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m |
jaga1184 | 0:f3c29d937050 | 125 | ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n |
jaga1184 | 0:f3c29d937050 | 126 | ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o |
jaga1184 | 0:f3c29d937050 | 127 | ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p |
jaga1184 | 0:f3c29d937050 | 128 | ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q |
jaga1184 | 0:f3c29d937050 | 129 | ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r |
jaga1184 | 0:f3c29d937050 | 130 | ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s |
jaga1184 | 0:f3c29d937050 | 131 | ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t |
jaga1184 | 0:f3c29d937050 | 132 | ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u |
jaga1184 | 0:f3c29d937050 | 133 | ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v |
jaga1184 | 0:f3c29d937050 | 134 | ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w |
jaga1184 | 0:f3c29d937050 | 135 | ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x |
jaga1184 | 0:f3c29d937050 | 136 | ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y |
jaga1184 | 0:f3c29d937050 | 137 | ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z |
jaga1184 | 0:f3c29d937050 | 138 | ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { |
jaga1184 | 0:f3c29d937050 | 139 | ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | |
jaga1184 | 0:f3c29d937050 | 140 | ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } |
jaga1184 | 0:f3c29d937050 | 141 | ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ← |
jaga1184 | 0:f3c29d937050 | 142 | ,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f → |
jaga1184 | 0:f3c29d937050 | 143 | }; |
jaga1184 | 0:f3c29d937050 | 144 | |
jaga1184 | 0:f3c29d937050 | 145 | |
jaga1184 | 0:f3c29d937050 | 146 | /*************************************************************************/ |
jaga1184 | 0:f3c29d937050 | 147 | const char *byte_to_binary |
jaga1184 | 0:f3c29d937050 | 148 | ( |
jaga1184 | 0:f3c29d937050 | 149 | int x |
jaga1184 | 0:f3c29d937050 | 150 | ) |
jaga1184 | 0:f3c29d937050 | 151 | { |
jaga1184 | 0:f3c29d937050 | 152 | static char b[9]; |
jaga1184 | 0:f3c29d937050 | 153 | b[0] = '\0'; |
jaga1184 | 0:f3c29d937050 | 154 | |
jaga1184 | 0:f3c29d937050 | 155 | int z; |
jaga1184 | 0:f3c29d937050 | 156 | for (z = 256; z > 0; z >>= 1) |
jaga1184 | 0:f3c29d937050 | 157 | { |
jaga1184 | 0:f3c29d937050 | 158 | strcat(b, ((x & z) == z) ? "|" : "0"); |
jaga1184 | 0:f3c29d937050 | 159 | } |
jaga1184 | 0:f3c29d937050 | 160 | |
jaga1184 | 0:f3c29d937050 | 161 | return b; |
jaga1184 | 0:f3c29d937050 | 162 | } |
jaga1184 | 0:f3c29d937050 | 163 | /**********************************************************************************************/ |
jaga1184 | 0:f3c29d937050 | 164 | |
jaga1184 | 0:f3c29d937050 | 165 | void LcdCharacter(char character) { |
jaga1184 | 0:f3c29d937050 | 166 | LcdWrite(LCD_D, 0x00); |
jaga1184 | 0:f3c29d937050 | 167 | for (int index = 0; index < 5; index++) { |
jaga1184 | 0:f3c29d937050 | 168 | LcdWrite(LCD_D, ASCII[character - 0x20][index]); |
jaga1184 | 0:f3c29d937050 | 169 | } |
jaga1184 | 0:f3c29d937050 | 170 | LcdWrite(LCD_D, 0x00); |
jaga1184 | 0:f3c29d937050 | 171 | } |
jaga1184 | 0:f3c29d937050 | 172 | |
jaga1184 | 0:f3c29d937050 | 173 | void LcdClear(void) { |
jaga1184 | 0:f3c29d937050 | 174 | for (int index = 0; index < LCD_X * LCD_Y / 8; index++) { |
jaga1184 | 0:f3c29d937050 | 175 | LcdWrite(LCD_D, 0x00); |
jaga1184 | 0:f3c29d937050 | 176 | } |
jaga1184 | 0:f3c29d937050 | 177 | } |
jaga1184 | 0:f3c29d937050 | 178 | |
jaga1184 | 0:f3c29d937050 | 179 | void LcdInitialise(void) { |
jaga1184 | 0:f3c29d937050 | 180 | //pinMode(PIN_SCE,OUTPUT); |
jaga1184 | 0:f3c29d937050 | 181 | //pinMode(PIN_RESET, OUTPUT); |
jaga1184 | 0:f3c29d937050 | 182 | //pinMode(PIN_DC, OUTPUT); |
jaga1184 | 0:f3c29d937050 | 183 | //pinMode(PIN_SDIN, OUTPUT); |
jaga1184 | 0:f3c29d937050 | 184 | //pinMode(PIN_SCLK, OUTPUT); |
jaga1184 | 0:f3c29d937050 | 185 | |
jaga1184 | 0:f3c29d937050 | 186 | PIN_RESET=0; |
jaga1184 | 0:f3c29d937050 | 187 | //digitalWrite(PIN_RESET, LOW); |
jaga1184 | 0:f3c29d937050 | 188 | |
jaga1184 | 0:f3c29d937050 | 189 | // delay(1); |
jaga1184 | 0:f3c29d937050 | 190 | // wait(0.001); |
jaga1184 | 0:f3c29d937050 | 191 | PIN_RESET=1; |
jaga1184 | 0:f3c29d937050 | 192 | //digitalWrite(PIN_RESET, HIGH); |
jaga1184 | 0:f3c29d937050 | 193 | |
jaga1184 | 0:f3c29d937050 | 194 | LcdWrite( LCD_CMD, 0x21 ); // LCD Extended Commands. |
jaga1184 | 0:f3c29d937050 | 195 | LcdWrite( LCD_CMD, 0xB0 ); // Set LCD Vop (Contrast). //B1 for normal clear background, b2 to bf for dark background |
jaga1184 | 0:f3c29d937050 | 196 | LcdWrite( LCD_CMD, 0x04 ); // Set Temp coefficent. //0x04 |
jaga1184 | 0:f3c29d937050 | 197 | LcdWrite( LCD_CMD, 0x14 ); // LCD bias mode 1:48. //0x13 |
jaga1184 | 0:f3c29d937050 | 198 | LcdWrite( LCD_CMD, 0x0C ); // LCD in normal mode. 0x0d for inverse |
jaga1184 | 0:f3c29d937050 | 199 | LcdWrite(LCD_C, 0x20); |
jaga1184 | 0:f3c29d937050 | 200 | LcdWrite(LCD_C, 0x0C); |
jaga1184 | 0:f3c29d937050 | 201 | } |
jaga1184 | 0:f3c29d937050 | 202 | |
jaga1184 | 0:f3c29d937050 | 203 | void LcdString(char *characters) { |
jaga1184 | 0:f3c29d937050 | 204 | while (*characters) { |
jaga1184 | 0:f3c29d937050 | 205 | LcdCharacter(*characters++); |
jaga1184 | 0:f3c29d937050 | 206 | } |
jaga1184 | 0:f3c29d937050 | 207 | } |
jaga1184 | 0:f3c29d937050 | 208 | |
jaga1184 | 0:f3c29d937050 | 209 | void LcdWrite(byte dc, byte data) { |
jaga1184 | 0:f3c29d937050 | 210 | PIN_DC=dc; |
jaga1184 | 0:f3c29d937050 | 211 | PIN_SCE=0; |
jaga1184 | 0:f3c29d937050 | 212 | shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data); |
jaga1184 | 0:f3c29d937050 | 213 | //->wait(0.001); |
jaga1184 | 0:f3c29d937050 | 214 | PIN_SCE=1; |
jaga1184 | 0:f3c29d937050 | 215 | /* |
jaga1184 | 0:f3c29d937050 | 216 | digitalWrite(PIN_DC, dc); |
jaga1184 | 0:f3c29d937050 | 217 | digitalWrite(PIN_SCE, LOW); |
jaga1184 | 0:f3c29d937050 | 218 | shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data); |
jaga1184 | 0:f3c29d937050 | 219 | digitalWrite(PIN_SCE, HIGH); |
jaga1184 | 0:f3c29d937050 | 220 | */ |
jaga1184 | 0:f3c29d937050 | 221 | } |
jaga1184 | 0:f3c29d937050 | 222 | |
jaga1184 | 0:f3c29d937050 | 223 | // gotoXY routine to position cursor |
jaga1184 | 0:f3c29d937050 | 224 | // x - range: 0 to 84 |
jaga1184 | 0:f3c29d937050 | 225 | // y - range: 0 to 5 |
jaga1184 | 0:f3c29d937050 | 226 | |
jaga1184 | 0:f3c29d937050 | 227 | void gotoXY(int x, int y) { |
jaga1184 | 0:f3c29d937050 | 228 | LcdWrite( 0, 0x80 | x); // Column. |
jaga1184 | 0:f3c29d937050 | 229 | LcdWrite( 0, 0x40 | y); // Row. |
jaga1184 | 0:f3c29d937050 | 230 | |
jaga1184 | 0:f3c29d937050 | 231 | } |
jaga1184 | 0:f3c29d937050 | 232 | |
jaga1184 | 0:f3c29d937050 | 233 | |
jaga1184 | 0:f3c29d937050 | 234 | |
jaga1184 | 0:f3c29d937050 | 235 | void drawLine(int x0,int y0,//Initial Point |
jaga1184 | 0:f3c29d937050 | 236 | int x1,int y1)//Final point |
jaga1184 | 0:f3c29d937050 | 237 | { |
jaga1184 | 0:f3c29d937050 | 238 | int dy = y1 - y0; |
jaga1184 | 0:f3c29d937050 | 239 | int dx = x1 - x0; |
jaga1184 | 0:f3c29d937050 | 240 | int stepx, stepy; |
jaga1184 | 0:f3c29d937050 | 241 | if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; } |
jaga1184 | 0:f3c29d937050 | 242 | if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; } |
jaga1184 | 0:f3c29d937050 | 243 | dy <<= 1; // dy is now 2*dy |
jaga1184 | 0:f3c29d937050 | 244 | dx <<= 1; // dx is now 2*dx |
jaga1184 | 0:f3c29d937050 | 245 | bufferLcd[x0][y0]=1; |
jaga1184 | 0:f3c29d937050 | 246 | // printf("Ini X0,y0= %2u ,%2u\n", x0,y0); |
jaga1184 | 0:f3c29d937050 | 247 | if (dx > dy) { |
jaga1184 | 0:f3c29d937050 | 248 | int fraction = dy - (dx >> 1);// same as 2*dy - dx |
jaga1184 | 0:f3c29d937050 | 249 | while (x0 != x1) { |
jaga1184 | 0:f3c29d937050 | 250 | if (fraction >= 0) { |
jaga1184 | 0:f3c29d937050 | 251 | y0 += stepy; |
jaga1184 | 0:f3c29d937050 | 252 | fraction -= dx; // same as fraction -= 2*dx |
jaga1184 | 0:f3c29d937050 | 253 | } |
jaga1184 | 0:f3c29d937050 | 254 | x0 += stepx; |
jaga1184 | 0:f3c29d937050 | 255 | fraction += dy; // same as fraction -= 2*dy |
jaga1184 | 0:f3c29d937050 | 256 | bufferLcd[x0][y0]=1; |
jaga1184 | 0:f3c29d937050 | 257 | // printf(" X0,y0= %2u ,%2u\n", x0,y0); |
jaga1184 | 0:f3c29d937050 | 258 | } |
jaga1184 | 0:f3c29d937050 | 259 | } else { |
jaga1184 | 0:f3c29d937050 | 260 | int fraction = dx - (dy >> 1); |
jaga1184 | 0:f3c29d937050 | 261 | while (y0 != y1) { |
jaga1184 | 0:f3c29d937050 | 262 | if (fraction >= 0) { |
jaga1184 | 0:f3c29d937050 | 263 | x0 += stepx; |
jaga1184 | 0:f3c29d937050 | 264 | fraction -= dy; |
jaga1184 | 0:f3c29d937050 | 265 | } |
jaga1184 | 0:f3c29d937050 | 266 | y0 += stepy; |
jaga1184 | 0:f3c29d937050 | 267 | fraction += dx; |
jaga1184 | 0:f3c29d937050 | 268 | bufferLcd[x0][y0]=1; |
jaga1184 | 0:f3c29d937050 | 269 | // printf(" X0,y0= %2u ,%2u\n", x0,y0); |
jaga1184 | 0:f3c29d937050 | 270 | } |
jaga1184 | 0:f3c29d937050 | 271 | } |
jaga1184 | 0:f3c29d937050 | 272 | |
jaga1184 | 0:f3c29d937050 | 273 | // printf("<------- ------->\n"); |
jaga1184 | 0:f3c29d937050 | 274 | |
jaga1184 | 0:f3c29d937050 | 275 | } |
jaga1184 | 0:f3c29d937050 | 276 | |
jaga1184 | 0:f3c29d937050 | 277 | void updateLcd(void) {//Update with data from Buffer(Use drawPoint) |
jaga1184 | 0:f3c29d937050 | 278 | int blockVal; |
jaga1184 | 0:f3c29d937050 | 279 | for(int x=0;x<XMAX;x++) { //For every value of x |
jaga1184 | 0:f3c29d937050 | 280 | for(int block=0;block<6;block++) {//For everyone of the 6 block in y. |
jaga1184 | 0:f3c29d937050 | 281 | blockVal=0;//Initialise to zero value of hte block |
jaga1184 | 0:f3c29d937050 | 282 | for(int i=0;i<8;i++) {//For every block�s bit |
jaga1184 | 0:f3c29d937050 | 283 | blockVal|=(bufferLcd[x][(block*8)+i])<<i;//Current block�s bit value is pushed |
jaga1184 | 0:f3c29d937050 | 284 | } |
jaga1184 | 0:f3c29d937050 | 285 | //The point is drawed |
jaga1184 | 0:f3c29d937050 | 286 | gotoXY (x,block); |
jaga1184 | 0:f3c29d937050 | 287 | LcdWrite (1,blockVal); |
jaga1184 | 0:f3c29d937050 | 288 | //wait(0.1); |
jaga1184 | 0:f3c29d937050 | 289 | } |
jaga1184 | 0:f3c29d937050 | 290 | } |
jaga1184 | 0:f3c29d937050 | 291 | } |
jaga1184 | 0:f3c29d937050 | 292 | |
jaga1184 | 0:f3c29d937050 | 293 | void clearLcdBuff() { //Clear the entire buffer (Use drawPoint) |
jaga1184 | 0:f3c29d937050 | 294 | |
jaga1184 | 0:f3c29d937050 | 295 | for(int i=0;i<XMAX;i++) { |
jaga1184 | 0:f3c29d937050 | 296 | for(int j=0;j<YMAX;j++) { |
jaga1184 | 0:f3c29d937050 | 297 | bufferLcd[i][j]=0; |
jaga1184 | 0:f3c29d937050 | 298 | |
jaga1184 | 0:f3c29d937050 | 299 | } |
jaga1184 | 0:f3c29d937050 | 300 | } |
jaga1184 | 0:f3c29d937050 | 301 | /*int blockVal; |
jaga1184 | 0:f3c29d937050 | 302 | for(int x=0;x<XMAX;x++) { |
jaga1184 | 0:f3c29d937050 | 303 | for(int block=0;block<5;block++) { |
jaga1184 | 0:f3c29d937050 | 304 | blockVal=0; |
jaga1184 | 0:f3c29d937050 | 305 | |
jaga1184 | 0:f3c29d937050 | 306 | //The point is drawed |
jaga1184 | 0:f3c29d937050 | 307 | gotoXY (x,block); |
jaga1184 | 0:f3c29d937050 | 308 | LcdWrite (1,blockVal); |
jaga1184 | 0:f3c29d937050 | 309 | } |
jaga1184 | 0:f3c29d937050 | 310 | } |
jaga1184 | 0:f3c29d937050 | 311 | */ |
jaga1184 | 0:f3c29d937050 | 312 | } |
jaga1184 | 0:f3c29d937050 | 313 | |
jaga1184 | 0:f3c29d937050 | 314 | void drawPoint(int X, int Y) { //drawing point using values 0->83 in X and 0->47 in Y [READ BLOCK THEN add/Modify NEW POINT] |
jaga1184 | 0:f3c29d937050 | 315 | /*int blck,blckPos,buffY; |
jaga1184 | 0:f3c29d937050 | 316 | //Selection of y block(0->5) |
jaga1184 | 0:f3c29d937050 | 317 | blck=(int)(floor((y_dbl/8))); //Determining the block |
jaga1184 | 0:f3c29d937050 | 318 | blckPos=(int)(y%8);//Calculating position in block |
jaga1184 | 0:f3c29d937050 | 319 | buffY|=1<<blckPos; |
jaga1184 | 0:f3c29d937050 | 320 | */ |
jaga1184 | 0:f3c29d937050 | 321 | //The point is stored |
jaga1184 | 0:f3c29d937050 | 322 | bufferLcd[X][Y]=1; |
jaga1184 | 0:f3c29d937050 | 323 | |
jaga1184 | 0:f3c29d937050 | 324 | } |
jaga1184 | 0:f3c29d937050 | 325 | void drawPoint_inst(int x, int y) { //drawing point using values 0->83 in X and 0->47 in Y [READ BLOCK THEN add/Modify NEW POINT] |
jaga1184 | 0:f3c29d937050 | 326 | int buf_y=0,blck,blckPos; |
jaga1184 | 0:f3c29d937050 | 327 | double y_dbl; |
jaga1184 | 0:f3c29d937050 | 328 | y_dbl=(double)(y); |
jaga1184 | 0:f3c29d937050 | 329 | //Selection of y block(0->5) |
jaga1184 | 0:f3c29d937050 | 330 | blck=(int)(floor((y_dbl/8))); //Determining the block |
jaga1184 | 0:f3c29d937050 | 331 | blckPos=(int)(y%8);//Calculating position in block |
jaga1184 | 0:f3c29d937050 | 332 | buf_y|=1<<blckPos; |
jaga1184 | 0:f3c29d937050 | 333 | |
jaga1184 | 0:f3c29d937050 | 334 | //The point is stored |
jaga1184 | 0:f3c29d937050 | 335 | gotoXY (x,blck); |
jaga1184 | 0:f3c29d937050 | 336 | LcdWrite (1,buf_y); |
jaga1184 | 0:f3c29d937050 | 337 | |
jaga1184 | 0:f3c29d937050 | 338 | } |
jaga1184 | 0:f3c29d937050 | 339 | /* |
jaga1184 | 0:f3c29d937050 | 340 | int roundVal(float value ) {//Round point in line |
jaga1184 | 0:f3c29d937050 | 341 | int y; |
jaga1184 | 0:f3c29d937050 | 342 | if(abs(value-ceil(value))>=abs(value-floor(value))) { |
jaga1184 | 0:f3c29d937050 | 343 | y=(int)(floor(value)); |
jaga1184 | 0:f3c29d937050 | 344 | } |
jaga1184 | 0:f3c29d937050 | 345 | else { |
jaga1184 | 0:f3c29d937050 | 346 | y=(int)(ceil(value)); |
jaga1184 | 0:f3c29d937050 | 347 | } |
jaga1184 | 0:f3c29d937050 | 348 | |
jaga1184 | 0:f3c29d937050 | 349 | return y; |
jaga1184 | 0:f3c29d937050 | 350 | } |
jaga1184 | 0:f3c29d937050 | 351 | */ |
jaga1184 | 0:f3c29d937050 | 352 | void setup(void) { |
jaga1184 | 0:f3c29d937050 | 353 | |
jaga1184 | 0:f3c29d937050 | 354 | LcdInitialise(); |
jaga1184 | 0:f3c29d937050 | 355 | LcdClear(); |
jaga1184 | 0:f3c29d937050 | 356 | |
jaga1184 | 0:f3c29d937050 | 357 | } |
jaga1184 | 0:f3c29d937050 | 358 | |
jaga1184 | 0:f3c29d937050 | 359 | int main(void) { |
jaga1184 | 0:f3c29d937050 | 360 | // Display some simple character animation |
jaga1184 | 0:f3c29d937050 | 361 | // |
jaga1184 | 0:f3c29d937050 | 362 | int a,b; |
jaga1184 | 0:f3c29d937050 | 363 | char Str[15]; |
jaga1184 | 0:f3c29d937050 | 364 | int count=0; |
jaga1184 | 0:f3c29d937050 | 365 | |
jaga1184 | 0:f3c29d937050 | 366 | |
jaga1184 | 0:f3c29d937050 | 367 | setup(); |
jaga1184 | 0:f3c29d937050 | 368 | //wait(0.1); |
jaga1184 | 0:f3c29d937050 | 369 | PIN_BCKL=0; |
jaga1184 | 0:f3c29d937050 | 370 | wait(0.5); |
jaga1184 | 0:f3c29d937050 | 371 | PIN_BCKL=1; |
jaga1184 | 0:f3c29d937050 | 372 | while(1) { |
jaga1184 | 0:f3c29d937050 | 373 | printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); |
jaga1184 | 0:f3c29d937050 | 374 | for(int a=0;a<504;a++) { |
jaga1184 | 0:f3c29d937050 | 375 | if((a%84)==0) |
jaga1184 | 1:023f6d8981d8 | 376 | printf("Last frame\n"); |
jaga1184 | 0:f3c29d937050 | 377 | printf("%3u:: %s\n",a,byte_to_binary(MCertified2[a])); |
jaga1184 | 0:f3c29d937050 | 378 | } |
jaga1184 | 0:f3c29d937050 | 379 | printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); |
jaga1184 | 0:f3c29d937050 | 380 | clearLcdBuff(); |
jaga1184 | 0:f3c29d937050 | 381 | printf("Start---------\n"); |
jaga1184 | 0:f3c29d937050 | 382 | for (int index3 = 0; index3 < 6; index3++) { |
jaga1184 | 0:f3c29d937050 | 383 | for( int index1= 0; index1 <8; index1++) { |
jaga1184 | 0:f3c29d937050 | 384 | for( int index2= 0; index2 < 84; index2++) { |
jaga1184 | 0:f3c29d937050 | 385 | if((MCertified[(index3*84)+index2]&(1<<index1))!=0) { |
jaga1184 | 0:f3c29d937050 | 386 | #ifdef FastLcd |
jaga1184 | 0:f3c29d937050 | 387 | bufferLcd[index2][(index3*8)+index1]=1;//(7-index1)]= 1; |
jaga1184 | 0:f3c29d937050 | 388 | #endif |
jaga1184 | 0:f3c29d937050 | 389 | #ifdef Bitmap2Lcd |
jaga1184 | 0:f3c29d937050 | 390 | bufferLcd[index2][(index3*8)+(7-index1)]= 1; |
jaga1184 | 0:f3c29d937050 | 391 | #endif |
jaga1184 | 0:f3c29d937050 | 392 | printf("|"); |
jaga1184 | 0:f3c29d937050 | 393 | } |
jaga1184 | 0:f3c29d937050 | 394 | else |
jaga1184 | 0:f3c29d937050 | 395 | printf(" "); |
jaga1184 | 0:f3c29d937050 | 396 | } |
jaga1184 | 0:f3c29d937050 | 397 | printf("\n"); |
jaga1184 | 0:f3c29d937050 | 398 | } |
jaga1184 | 0:f3c29d937050 | 399 | } |
jaga1184 | 0:f3c29d937050 | 400 | printf("\End---------\n"); |
jaga1184 | 0:f3c29d937050 | 401 | updateLcd(); |
jaga1184 | 0:f3c29d937050 | 402 | wait(0.5); |
jaga1184 | 0:f3c29d937050 | 403 | } |
jaga1184 | 0:f3c29d937050 | 404 | while (1) { |
jaga1184 | 0:f3c29d937050 | 405 | //gotoXY(0,0); |
jaga1184 | 0:f3c29d937050 | 406 | count++; |
jaga1184 | 0:f3c29d937050 | 407 | //LcdString("Hello there esta es una prueba de lcd "); |
jaga1184 | 0:f3c29d937050 | 408 | |
jaga1184 | 0:f3c29d937050 | 409 | //drawLine(1,1,count,47); |
jaga1184 | 0:f3c29d937050 | 410 | clearLcdBuff(); |
jaga1184 | 0:f3c29d937050 | 411 | /* drawLine(0,0,83,0); |
jaga1184 | 0:f3c29d937050 | 412 | drawLine(83,0,83,47); |
jaga1184 | 0:f3c29d937050 | 413 | drawLine(83,47,0,47); |
jaga1184 | 0:f3c29d937050 | 414 | drawLine(0,47,0,0); |
jaga1184 | 0:f3c29d937050 | 415 | */ |
jaga1184 | 0:f3c29d937050 | 416 | drawLine(0,0,count,47); |
jaga1184 | 0:f3c29d937050 | 417 | updateLcd(); |
jaga1184 | 0:f3c29d937050 | 418 | wait(0.15); |
jaga1184 | 0:f3c29d937050 | 419 | LcdClear(); |
jaga1184 | 0:f3c29d937050 | 420 | if (count==83) |
jaga1184 | 0:f3c29d937050 | 421 | count=0; |
jaga1184 | 0:f3c29d937050 | 422 | } |
jaga1184 | 0:f3c29d937050 | 423 | // Draw a Box |
jaga1184 | 0:f3c29d937050 | 424 | // for(b=1000; b>0; b--){ |
jaga1184 | 0:f3c29d937050 | 425 | // drawLine(); |
jaga1184 | 0:f3c29d937050 | 426 | // for(a=0; a<=5 ; a++){ |
jaga1184 | 0:f3c29d937050 | 427 | // gotoXY(4,1); |
jaga1184 | 0:f3c29d937050 | 428 | // Put text in Box |
jaga1184 | 0:f3c29d937050 | 429 | LcdString("TestDisplay"); |
jaga1184 | 0:f3c29d937050 | 430 | gotoXY(24,3); |
jaga1184 | 0:f3c29d937050 | 431 | LcdCharacter('H'); |
jaga1184 | 0:f3c29d937050 | 432 | LcdCharacter('E'); |
jaga1184 | 0:f3c29d937050 | 433 | LcdCharacter('L'); |
jaga1184 | 0:f3c29d937050 | 434 | LcdCharacter('L'); |
jaga1184 | 0:f3c29d937050 | 435 | LcdCharacter('O'); |
jaga1184 | 0:f3c29d937050 | 436 | LcdCharacter(' '); |
jaga1184 | 0:f3c29d937050 | 437 | LcdCharacter('='); |
jaga1184 | 0:f3c29d937050 | 438 | // Draw + at this position |
jaga1184 | 0:f3c29d937050 | 439 | gotoXY(10,3); |
jaga1184 | 0:f3c29d937050 | 440 | LcdCharacter('='); |
jaga1184 | 0:f3c29d937050 | 441 | wait(0.5); |
jaga1184 | 0:f3c29d937050 | 442 | gotoXY(24,3); |
jaga1184 | 0:f3c29d937050 | 443 | LcdCharacter('h'); |
jaga1184 | 0:f3c29d937050 | 444 | LcdCharacter('e'); |
jaga1184 | 0:f3c29d937050 | 445 | LcdCharacter('l'); |
jaga1184 | 0:f3c29d937050 | 446 | LcdCharacter('l'); |
jaga1184 | 0:f3c29d937050 | 447 | LcdCharacter('o'); |
jaga1184 | 0:f3c29d937050 | 448 | LcdCharacter(' '); |
jaga1184 | 0:f3c29d937050 | 449 | LcdCharacter('-'); |
jaga1184 | 0:f3c29d937050 | 450 | // Draw - at this position |
jaga1184 | 0:f3c29d937050 | 451 | gotoXY(10,3); |
jaga1184 | 0:f3c29d937050 | 452 | LcdCharacter('-'); |
jaga1184 | 0:f3c29d937050 | 453 | wait(0.5); |
jaga1184 | 0:f3c29d937050 | 454 | // } |
jaga1184 | 0:f3c29d937050 | 455 | // } |
jaga1184 | 0:f3c29d937050 | 456 | |
jaga1184 | 0:f3c29d937050 | 457 | while (1); |
jaga1184 | 0:f3c29d937050 | 458 | return 0; |
jaga1184 | 0:f3c29d937050 | 459 | } |
jaga1184 | 0:f3c29d937050 | 460 | |
jaga1184 | 0:f3c29d937050 | 461 | /* |
jaga1184 | 0:f3c29d937050 | 462 | LYBRARIES |
jaga1184 | 0:f3c29d937050 | 463 | */ |
jaga1184 | 0:f3c29d937050 | 464 | //shiftOut(dataPin, clockPin, bitOrder, value) |
jaga1184 | 0:f3c29d937050 | 465 | void shiftOut(DigitalOut dataPin,DigitalOut clockPin,char bitOrder, char value ) { |
jaga1184 | 0:f3c29d937050 | 466 | int i; |
jaga1184 | 0:f3c29d937050 | 467 | clockPin=0; |
jaga1184 | 0:f3c29d937050 | 468 | if (bitOrder==LSBFIRST) { |
jaga1184 | 0:f3c29d937050 | 469 | for (i=0;i<=7;i++) { |
jaga1184 | 0:f3c29d937050 | 470 | //dataPin=value&(1>>i); |
jaga1184 | 0:f3c29d937050 | 471 | dataPin=value&(1); |
jaga1184 | 0:f3c29d937050 | 472 | value=value>>1; |
jaga1184 | 0:f3c29d937050 | 473 | clockPin=1; |
jaga1184 | 0:f3c29d937050 | 474 | //->wait(0.0001); |
jaga1184 | 0:f3c29d937050 | 475 | clockPin=0; |
jaga1184 | 0:f3c29d937050 | 476 | } |
jaga1184 | 0:f3c29d937050 | 477 | } else { |
jaga1184 | 0:f3c29d937050 | 478 | for (i=7;i>=0;i--) { |
jaga1184 | 0:f3c29d937050 | 479 | //dataPin=value&(1<<i); |
jaga1184 | 0:f3c29d937050 | 480 | dataPin=value&(1<<7); |
jaga1184 | 0:f3c29d937050 | 481 | value=value<<1; |
jaga1184 | 0:f3c29d937050 | 482 | clockPin=1; |
jaga1184 | 0:f3c29d937050 | 483 | //->wait(0.0001); |
jaga1184 | 0:f3c29d937050 | 484 | clockPin=0; |
jaga1184 | 0:f3c29d937050 | 485 | } |
jaga1184 | 0:f3c29d937050 | 486 | } |
jaga1184 | 0:f3c29d937050 | 487 | |
jaga1184 | 0:f3c29d937050 | 488 | } |
jaga1184 | 0:f3c29d937050 | 489 |