program for ping pong robot

Dependencies:   mbed

Committer:
pnpako
Date:
Wed Jun 29 00:02:00 2016 +0000
Revision:
0:14b64813c04d
ping pong robot

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pnpako 0:14b64813c04d 1 DigitalOut LCD_DB4(p5);
pnpako 0:14b64813c04d 2 DigitalOut LCD_DB5(p6);
pnpako 0:14b64813c04d 3 DigitalOut LCD_DB6(p7);
pnpako 0:14b64813c04d 4 DigitalOut LCD_DB7(p8);
pnpako 0:14b64813c04d 5
pnpako 0:14b64813c04d 6 DigitalOut LCD_EN(p30);
pnpako 0:14b64813c04d 7 DigitalOut LCD_RW(p29);
pnpako 0:14b64813c04d 8 DigitalOut LCD_RS(p28);
pnpako 0:14b64813c04d 9
pnpako 0:14b64813c04d 10 unsigned int get_power2(int a)
pnpako 0:14b64813c04d 11 {
pnpako 0:14b64813c04d 12 int i = 0;
pnpako 0:14b64813c04d 13
pnpako 0:14b64813c04d 14 unsigned int power = 1;
pnpako 0:14b64813c04d 15 for(i = 0; i < a; i++) {
pnpako 0:14b64813c04d 16 power *= 2;
pnpako 0:14b64813c04d 17 }
pnpako 0:14b64813c04d 18 return power;
pnpako 0:14b64813c04d 19 }
pnpako 0:14b64813c04d 20
pnpako 0:14b64813c04d 21 unsigned int get_bit(char word, int a)
pnpako 0:14b64813c04d 22 {
pnpako 0:14b64813c04d 23 unsigned int s = get_power2(a);
pnpako 0:14b64813c04d 24
pnpako 0:14b64813c04d 25 if((word & s) != 0)
pnpako 0:14b64813c04d 26 return(1);
pnpako 0:14b64813c04d 27 else
pnpako 0:14b64813c04d 28 return(0);
pnpako 0:14b64813c04d 29 }
pnpako 0:14b64813c04d 30
pnpako 0:14b64813c04d 31 void setDB_singleShot(unsigned short x)
pnpako 0:14b64813c04d 32 {
pnpako 0:14b64813c04d 33 /* This hex number is the same as binary 0001 */
pnpako 0:14b64813c04d 34 short MASK = 0x01;
pnpako 0:14b64813c04d 35
pnpako 0:14b64813c04d 36 LCD_DB4 = (MASK & x) ? 1 : 0;
pnpako 0:14b64813c04d 37 MASK = MASK << 1;
pnpako 0:14b64813c04d 38 LCD_DB5 = (MASK & x) ? 1 : 0;
pnpako 0:14b64813c04d 39 MASK = MASK << 1;
pnpako 0:14b64813c04d 40 LCD_DB6 = (MASK & x) ? 1 : 0;
pnpako 0:14b64813c04d 41 MASK = MASK << 1;
pnpako 0:14b64813c04d 42 LCD_DB7 = (MASK & x) ? 1 : 0;
pnpako 0:14b64813c04d 43 }
pnpako 0:14b64813c04d 44
pnpako 0:14b64813c04d 45 void EnableImp()
pnpako 0:14b64813c04d 46 {
pnpako 0:14b64813c04d 47 wait(0.02);
pnpako 0:14b64813c04d 48 LCD_EN = 1;
pnpako 0:14b64813c04d 49 wait(0.02);
pnpako 0:14b64813c04d 50 LCD_EN = 0;
pnpako 0:14b64813c04d 51 wait(0.02);
pnpako 0:14b64813c04d 52 }
pnpako 0:14b64813c04d 53
pnpako 0:14b64813c04d 54 void FastEnableImp()
pnpako 0:14b64813c04d 55 {
pnpako 0:14b64813c04d 56 wait(0.001);
pnpako 0:14b64813c04d 57 LCD_EN = 1;
pnpako 0:14b64813c04d 58 wait(0.001);
pnpako 0:14b64813c04d 59 LCD_EN = 0;
pnpako 0:14b64813c04d 60 wait(0.001);
pnpako 0:14b64813c04d 61 }
pnpako 0:14b64813c04d 62
pnpako 0:14b64813c04d 63 void init()
pnpako 0:14b64813c04d 64 {
pnpako 0:14b64813c04d 65 //SET ALL BITS TO 0
pnpako 0:14b64813c04d 66 LCD_RS = 0;
pnpako 0:14b64813c04d 67 LCD_RW = 0;
pnpako 0:14b64813c04d 68 LCD_EN = 0;
pnpako 0:14b64813c04d 69
pnpako 0:14b64813c04d 70 setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary
pnpako 0:14b64813c04d 71 EnableImp();
pnpako 0:14b64813c04d 72 //DISPLAY IN 4BIT MODE
pnpako 0:14b64813c04d 73 LCD_RS = 0;
pnpako 0:14b64813c04d 74 LCD_RW = 0;
pnpako 0:14b64813c04d 75 setDB_singleShot(0x02); //HEX 0x02 is 0010 in Binary
pnpako 0:14b64813c04d 76 EnableImp();
pnpako 0:14b64813c04d 77
pnpako 0:14b64813c04d 78 setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary
pnpako 0:14b64813c04d 79 EnableImp();
pnpako 0:14b64813c04d 80 //SET FUNCTION
pnpako 0:14b64813c04d 81 LCD_RS = 0;
pnpako 0:14b64813c04d 82 LCD_RW = 0;
pnpako 0:14b64813c04d 83 setDB_singleShot(0x0C); //HEX 0x0C is 1100 in Binary
pnpako 0:14b64813c04d 84 EnableImp();
pnpako 0:14b64813c04d 85
pnpako 0:14b64813c04d 86 setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary
pnpako 0:14b64813c04d 87 EnableImp();
pnpako 0:14b64813c04d 88 //DISPLAY ON
pnpako 0:14b64813c04d 89 LCD_RS = 0;
pnpako 0:14b64813c04d 90 LCD_RW = 0;
pnpako 0:14b64813c04d 91 setDB_singleShot(0x0C); //HEX 0x0F is 1111 in Binary --> Cursor ON + BLINKING
pnpako 0:14b64813c04d 92 EnableImp(); //HEX 0x0C is 1100 in Binary --> Cursor OFF + NO BLINKING
pnpako 0:14b64813c04d 93
pnpako 0:14b64813c04d 94 setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary
pnpako 0:14b64813c04d 95 EnableImp();
pnpako 0:14b64813c04d 96 //DISPLAY CLEAR
pnpako 0:14b64813c04d 97 LCD_RS = 0;
pnpako 0:14b64813c04d 98 LCD_RW = 0;
pnpako 0:14b64813c04d 99 setDB_singleShot(0x01); //HEX 0x01 is 0001 in Binary
pnpako 0:14b64813c04d 100 EnableImp();
pnpako 0:14b64813c04d 101
pnpako 0:14b64813c04d 102 setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary
pnpako 0:14b64813c04d 103 EnableImp();
pnpako 0:14b64813c04d 104 //SET ENTRY MODE
pnpako 0:14b64813c04d 105 LCD_RS = 0;
pnpako 0:14b64813c04d 106 LCD_RW = 0;
pnpako 0:14b64813c04d 107 setDB_singleShot(0x06); //HEX 0x06 is 0110 in Binary
pnpako 0:14b64813c04d 108 EnableImp();
pnpako 0:14b64813c04d 109
pnpako 0:14b64813c04d 110
pnpako 0:14b64813c04d 111 }
pnpako 0:14b64813c04d 112
pnpako 0:14b64813c04d 113 void clearDispl()
pnpako 0:14b64813c04d 114 {
pnpako 0:14b64813c04d 115 //DISPLAY CLEAR
pnpako 0:14b64813c04d 116 LCD_RS = 0;
pnpako 0:14b64813c04d 117 LCD_RW = 0;
pnpako 0:14b64813c04d 118 wait(0.001);
pnpako 0:14b64813c04d 119 setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary
pnpako 0:14b64813c04d 120 FastEnableImp();
pnpako 0:14b64813c04d 121
pnpako 0:14b64813c04d 122 setDB_singleShot(0x01); //HEX 0x01 is 0001 in Binary
pnpako 0:14b64813c04d 123 FastEnableImp();
pnpako 0:14b64813c04d 124 }
pnpako 0:14b64813c04d 125
pnpako 0:14b64813c04d 126 void setCursorPos(unsigned short pos)
pnpako 0:14b64813c04d 127 {
pnpako 0:14b64813c04d 128 LCD_RS = 0;
pnpako 0:14b64813c04d 129 LCD_RW = 0;
pnpako 0:14b64813c04d 130
pnpako 0:14b64813c04d 131 /* This hex number is the same as binary 0001 */
pnpako 0:14b64813c04d 132 short MASK = 0x01;
pnpako 0:14b64813c04d 133
pnpako 0:14b64813c04d 134 MASK = MASK << 4;
pnpako 0:14b64813c04d 135 LCD_DB4 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 136 MASK = MASK << 1;
pnpako 0:14b64813c04d 137 LCD_DB5 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 138 MASK = MASK << 1;
pnpako 0:14b64813c04d 139 LCD_DB6 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 140 MASK = MASK << 1;
pnpako 0:14b64813c04d 141 LCD_DB7 = 1;
pnpako 0:14b64813c04d 142 FastEnableImp();
pnpako 0:14b64813c04d 143
pnpako 0:14b64813c04d 144 MASK = 0x01;
pnpako 0:14b64813c04d 145 LCD_DB4 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 146 MASK = MASK << 1;
pnpako 0:14b64813c04d 147 LCD_DB5 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 148 MASK = MASK << 1;
pnpako 0:14b64813c04d 149 LCD_DB6 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 150 MASK = MASK << 1;
pnpako 0:14b64813c04d 151 LCD_DB7 = (MASK & pos) ? 1 : 0;
pnpako 0:14b64813c04d 152 FastEnableImp();
pnpako 0:14b64813c04d 153 }
pnpako 0:14b64813c04d 154
pnpako 0:14b64813c04d 155 void writeChar(char x)
pnpako 0:14b64813c04d 156 {
pnpako 0:14b64813c04d 157 LCD_RS = 1;
pnpako 0:14b64813c04d 158 LCD_RW = 0;
pnpako 0:14b64813c04d 159
pnpako 0:14b64813c04d 160 LCD_DB4 = get_bit(x, 4);
pnpako 0:14b64813c04d 161 LCD_DB5 = get_bit(x, 5);
pnpako 0:14b64813c04d 162 LCD_DB6 = get_bit(x, 6);
pnpako 0:14b64813c04d 163 LCD_DB7 = get_bit(x, 7);
pnpako 0:14b64813c04d 164 EnableImp();
pnpako 0:14b64813c04d 165
pnpako 0:14b64813c04d 166 LCD_DB4 = get_bit(x, 0);
pnpako 0:14b64813c04d 167 LCD_DB5 = get_bit(x, 1);
pnpako 0:14b64813c04d 168 LCD_DB6 = get_bit(x, 2);
pnpako 0:14b64813c04d 169 LCD_DB7 = get_bit(x, 3);
pnpako 0:14b64813c04d 170 EnableImp();
pnpako 0:14b64813c04d 171 }
pnpako 0:14b64813c04d 172
pnpako 0:14b64813c04d 173 void fastWriteChar(char x)
pnpako 0:14b64813c04d 174 {
pnpako 0:14b64813c04d 175 LCD_RS = 1;
pnpako 0:14b64813c04d 176 LCD_RW = 0;
pnpako 0:14b64813c04d 177
pnpako 0:14b64813c04d 178 LCD_DB4 = get_bit(x, 4);
pnpako 0:14b64813c04d 179 LCD_DB5 = get_bit(x, 5);
pnpako 0:14b64813c04d 180 LCD_DB6 = get_bit(x, 6);
pnpako 0:14b64813c04d 181 LCD_DB7 = get_bit(x, 7);
pnpako 0:14b64813c04d 182 FastEnableImp();
pnpako 0:14b64813c04d 183
pnpako 0:14b64813c04d 184 LCD_DB4 = get_bit(x, 0);
pnpako 0:14b64813c04d 185 LCD_DB5 = get_bit(x, 1);
pnpako 0:14b64813c04d 186 LCD_DB6 = get_bit(x, 2);
pnpako 0:14b64813c04d 187 LCD_DB7 = get_bit(x, 3);
pnpako 0:14b64813c04d 188 FastEnableImp();
pnpako 0:14b64813c04d 189 }
pnpako 0:14b64813c04d 190
pnpako 0:14b64813c04d 191 void writeHex(unsigned short x, unsigned short y)
pnpako 0:14b64813c04d 192 {
pnpako 0:14b64813c04d 193 LCD_RS = 1;
pnpako 0:14b64813c04d 194 LCD_RW = 0;
pnpako 0:14b64813c04d 195
pnpako 0:14b64813c04d 196 setDB_singleShot(x);
pnpako 0:14b64813c04d 197 EnableImp();
pnpako 0:14b64813c04d 198
pnpako 0:14b64813c04d 199 setDB_singleShot(y);
pnpako 0:14b64813c04d 200 EnableImp();
pnpako 0:14b64813c04d 201 }
pnpako 0:14b64813c04d 202
pnpako 0:14b64813c04d 203 void writeString(char str[])
pnpako 0:14b64813c04d 204 {
pnpako 0:14b64813c04d 205 while(*str) {
pnpako 0:14b64813c04d 206 writeChar(*str);
pnpako 0:14b64813c04d 207 str++;
pnpako 0:14b64813c04d 208 }
pnpako 0:14b64813c04d 209 }
pnpako 0:14b64813c04d 210
pnpako 0:14b64813c04d 211 void fastWriteString(char str[])
pnpako 0:14b64813c04d 212 {
pnpako 0:14b64813c04d 213 while(*str) {
pnpako 0:14b64813c04d 214 fastWriteChar(*str);
pnpako 0:14b64813c04d 215 str++;
pnpako 0:14b64813c04d 216 }
pnpako 0:14b64813c04d 217 }
pnpako 0:14b64813c04d 218
pnpako 0:14b64813c04d 219 void writeHex_RS0_RW0(unsigned short x, unsigned short y)
pnpako 0:14b64813c04d 220 {
pnpako 0:14b64813c04d 221 //SET CGRAM Address
pnpako 0:14b64813c04d 222 LCD_RS = 0;
pnpako 0:14b64813c04d 223 LCD_RW = 0;
pnpako 0:14b64813c04d 224
pnpako 0:14b64813c04d 225 setDB_singleShot(x);
pnpako 0:14b64813c04d 226 EnableImp();
pnpako 0:14b64813c04d 227
pnpako 0:14b64813c04d 228 setDB_singleShot(y);
pnpako 0:14b64813c04d 229 EnableImp();
pnpako 0:14b64813c04d 230 }
pnpako 0:14b64813c04d 231
pnpako 0:14b64813c04d 232 void writeHex_RS1_RW0(unsigned short x, unsigned short y)
pnpako 0:14b64813c04d 233 {
pnpako 0:14b64813c04d 234 LCD_RS = 1;
pnpako 0:14b64813c04d 235 LCD_RW = 0;
pnpako 0:14b64813c04d 236
pnpako 0:14b64813c04d 237 setDB_singleShot(x);
pnpako 0:14b64813c04d 238 EnableImp();
pnpako 0:14b64813c04d 239
pnpako 0:14b64813c04d 240 setDB_singleShot(y);
pnpako 0:14b64813c04d 241 EnableImp();
pnpako 0:14b64813c04d 242 }
pnpako 0:14b64813c04d 243
pnpako 0:14b64813c04d 244 void write_pixel_character(void)
pnpako 0:14b64813c04d 245 {
pnpako 0:14b64813c04d 246
pnpako 0:14b64813c04d 247 for(int i = 0; i < 8; i++) {
pnpako 0:14b64813c04d 248 //Set the Adress to 0100 0000 to 0100 0111
pnpako 0:14b64813c04d 249 writeHex_RS0_RW0(4, i);
pnpako 0:14b64813c04d 250 //Write the user specified pixel line
pnpako 0:14b64813c04d 251 switch(i) {
pnpako 0:14b64813c04d 252 case 0:
pnpako 0:14b64813c04d 253 writeHex(0,14);
pnpako 0:14b64813c04d 254 break;
pnpako 0:14b64813c04d 255 case 1:
pnpako 0:14b64813c04d 256 writeHex(0,14);
pnpako 0:14b64813c04d 257 break;
pnpako 0:14b64813c04d 258 case 2:
pnpako 0:14b64813c04d 259 writeHex(0,4);
pnpako 0:14b64813c04d 260 break;
pnpako 0:14b64813c04d 261 case 3:
pnpako 0:14b64813c04d 262 writeHex(1,15);
pnpako 0:14b64813c04d 263 break;
pnpako 0:14b64813c04d 264 case 4:
pnpako 0:14b64813c04d 265 writeHex(0,4);
pnpako 0:14b64813c04d 266 break;
pnpako 0:14b64813c04d 267 case 5:
pnpako 0:14b64813c04d 268 writeHex(0,14);
pnpako 0:14b64813c04d 269 break;
pnpako 0:14b64813c04d 270 case 6:
pnpako 0:14b64813c04d 271 writeHex(0,10);
pnpako 0:14b64813c04d 272 break;
pnpako 0:14b64813c04d 273 case 7:
pnpako 0:14b64813c04d 274 writeHex(0,10);
pnpako 0:14b64813c04d 275 break;
pnpako 0:14b64813c04d 276 default:
pnpako 0:14b64813c04d 277 writeHex(0,0);
pnpako 0:14b64813c04d 278 break;
pnpako 0:14b64813c04d 279 }
pnpako 0:14b64813c04d 280 }
pnpako 0:14b64813c04d 281
pnpako 0:14b64813c04d 282 writeHex(0,0);
pnpako 0:14b64813c04d 283
pnpako 0:14b64813c04d 284 return;
pnpako 0:14b64813c04d 285 }
pnpako 0:14b64813c04d 286