Tobias Kuhn
/
LCD_XpressoBoard_3_SoundSens
program for ping pong robot
LCD.h@0:14b64813c04d, 2016-06-29 (annotated)
- Committer:
- pnpako
- Date:
- Wed Jun 29 00:02:00 2016 +0000
- Revision:
- 0:14b64813c04d
ping pong robot
Who changed what in which revision?
User | Revision | Line number | New 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 |