Peter Cooper
/
diags
test code for our MBED board
i2c.c@1:6877bb99aa17, 2011-05-04 (annotated)
- Committer:
- lolpcc
- Date:
- Wed May 04 08:30:52 2011 +0000
- Revision:
- 1:6877bb99aa17
- Parent:
- 0:9edfcca7cd25
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lolpcc | 0:9edfcca7cd25 | 1 | #include "mbed.h" |
lolpcc | 1:6877bb99aa17 | 2 | |
lolpcc | 1:6877bb99aa17 | 3 | #include "main.h" |
lolpcc | 1:6877bb99aa17 | 4 | #include "i2c.h" |
lolpcc | 1:6877bb99aa17 | 5 | #include "useful.h" |
lolpcc | 1:6877bb99aa17 | 6 | #include "pca9685_reg.h" /* Light Driver Chip */ |
lolpcc | 0:9edfcca7cd25 | 7 | |
lolpcc | 0:9edfcca7cd25 | 8 | I2C i2c(p9, p10); // sda, scl |
lolpcc | 0:9edfcca7cd25 | 9 | |
lolpcc | 1:6877bb99aa17 | 10 | #define PIO 0x40 |
lolpcc | 1:6877bb99aa17 | 11 | #define RELAYS 0x40 |
lolpcc | 0:9edfcca7cd25 | 12 | #define LCD 0xC6 |
lolpcc | 1:6877bb99aa17 | 13 | #define BAT 0x76 /* Batron LCD device */ |
lolpcc | 1:6877bb99aa17 | 14 | #define BATKBD 0x42 /* batron Keyboard */ |
lolpcc | 0:9edfcca7cd25 | 15 | #define SEVEN_SEG 0x70 |
lolpcc | 1:6877bb99aa17 | 16 | #define ASCII_OFFSET 0x80 |
lolpcc | 1:6877bb99aa17 | 17 | |
lolpcc | 1:6877bb99aa17 | 18 | |
lolpcc | 0:9edfcca7cd25 | 19 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 20 | /* */ |
lolpcc | 0:9edfcca7cd25 | 21 | /* Probe the I2C bus, and show the */ |
lolpcc | 0:9edfcca7cd25 | 22 | /* user what we have found */ |
lolpcc | 0:9edfcca7cd25 | 23 | /* */ |
lolpcc | 0:9edfcca7cd25 | 24 | /* */ |
lolpcc | 0:9edfcca7cd25 | 25 | /* */ |
lolpcc | 0:9edfcca7cd25 | 26 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 27 | void i2c_probe(void) |
lolpcc | 0:9edfcca7cd25 | 28 | { |
lolpcc | 1:6877bb99aa17 | 29 | lprintf("Searching for I2C devices...\n\r"); |
lolpcc | 1:6877bb99aa17 | 30 | |
lolpcc | 0:9edfcca7cd25 | 31 | int count = 0; |
lolpcc | 0:9edfcca7cd25 | 32 | for (int address=4; address<256; address+=2) { |
lolpcc | 0:9edfcca7cd25 | 33 | if (!i2c.write(address, NULL, 0)) { // 0 returned is ok |
lolpcc | 1:6877bb99aa17 | 34 | lprintf(" - I2C device found at address 0x%02X\n\r", address); |
lolpcc | 0:9edfcca7cd25 | 35 | count++; |
lolpcc | 0:9edfcca7cd25 | 36 | } |
lolpcc | 0:9edfcca7cd25 | 37 | } |
lolpcc | 1:6877bb99aa17 | 38 | lprintf("%d devices found\n\r", count); |
lolpcc | 0:9edfcca7cd25 | 39 | } |
lolpcc | 0:9edfcca7cd25 | 40 | |
lolpcc | 0:9edfcca7cd25 | 41 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 42 | /* */ |
lolpcc | 1:6877bb99aa17 | 43 | /* Should drive the I2C based LCD */ |
lolpcc | 1:6877bb99aa17 | 44 | /* Display If attached */ |
lolpcc | 0:9edfcca7cd25 | 45 | /* */ |
lolpcc | 0:9edfcca7cd25 | 46 | /* */ |
lolpcc | 0:9edfcca7cd25 | 47 | /* */ |
lolpcc | 0:9edfcca7cd25 | 48 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 49 | char init_lcd(void) |
lolpcc | 0:9edfcca7cd25 | 50 | { |
lolpcc | 0:9edfcca7cd25 | 51 | char buf[4]; |
lolpcc | 0:9edfcca7cd25 | 52 | buf[0]=0; |
lolpcc | 0:9edfcca7cd25 | 53 | buf[1]=19; |
lolpcc | 0:9edfcca7cd25 | 54 | return(i2c.write(LCD,buf,2)); |
lolpcc | 0:9edfcca7cd25 | 55 | } |
lolpcc | 0:9edfcca7cd25 | 56 | char clear_lcd(void) |
lolpcc | 0:9edfcca7cd25 | 57 | { |
lolpcc | 0:9edfcca7cd25 | 58 | char buf[4]; |
lolpcc | 0:9edfcca7cd25 | 59 | buf[0]=0; |
lolpcc | 0:9edfcca7cd25 | 60 | buf[1]=12; |
lolpcc | 0:9edfcca7cd25 | 61 | return(i2c.write(LCD,buf,2)); |
lolpcc | 0:9edfcca7cd25 | 62 | } |
lolpcc | 0:9edfcca7cd25 | 63 | char set_lcd(char line, char col) |
lolpcc | 0:9edfcca7cd25 | 64 | { |
lolpcc | 0:9edfcca7cd25 | 65 | char buf[4]; |
lolpcc | 0:9edfcca7cd25 | 66 | buf[0]=0; |
lolpcc | 0:9edfcca7cd25 | 67 | buf[1]=3; |
lolpcc | 0:9edfcca7cd25 | 68 | buf[2]=line; |
lolpcc | 0:9edfcca7cd25 | 69 | buf[3]=col; |
lolpcc | 0:9edfcca7cd25 | 70 | return(i2c.write(LCD,buf,4)); |
lolpcc | 0:9edfcca7cd25 | 71 | } |
lolpcc | 0:9edfcca7cd25 | 72 | char write_lcd(char *str) |
lolpcc | 0:9edfcca7cd25 | 73 | { |
lolpcc | 0:9edfcca7cd25 | 74 | char buf[0x60]; |
lolpcc | 0:9edfcca7cd25 | 75 | if(strlen(str)>50){ |
lolpcc | 1:6877bb99aa17 | 76 | lprintf("Line length to long\n\r"); |
lolpcc | 0:9edfcca7cd25 | 77 | return(0); |
lolpcc | 0:9edfcca7cd25 | 78 | } |
lolpcc | 0:9edfcca7cd25 | 79 | sprintf(buf,"%c%s",'\0',str); |
lolpcc | 0:9edfcca7cd25 | 80 | buf[0]=0; |
lolpcc | 0:9edfcca7cd25 | 81 | return(i2c.write(LCD,buf,strlen(str)+1)); |
lolpcc | 0:9edfcca7cd25 | 82 | } |
lolpcc | 1:6877bb99aa17 | 83 | |
lolpcc | 0:9edfcca7cd25 | 84 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 85 | /* */ |
lolpcc | 1:6877bb99aa17 | 86 | /* Read key presses from the keyboard */ |
lolpcc | 1:6877bb99aa17 | 87 | /* Attached to the LCD interface */ |
lolpcc | 1:6877bb99aa17 | 88 | /* It returns 0 if no key is pressed */ |
lolpcc | 1:6877bb99aa17 | 89 | /* or the ascii value of the key press */ |
lolpcc | 0:9edfcca7cd25 | 90 | /* */ |
lolpcc | 0:9edfcca7cd25 | 91 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 92 | char read_keyboard(void) |
lolpcc | 0:9edfcca7cd25 | 93 | { |
lolpcc | 0:9edfcca7cd25 | 94 | char buf[10]; |
lolpcc | 0:9edfcca7cd25 | 95 | i2c.read(LCD,buf,4); |
lolpcc | 0:9edfcca7cd25 | 96 | if(buf[1]!=0){ |
lolpcc | 0:9edfcca7cd25 | 97 | switch(buf[1]){ |
lolpcc | 0:9edfcca7cd25 | 98 | case 0x01 : |
lolpcc | 0:9edfcca7cd25 | 99 | return('1'); |
lolpcc | 0:9edfcca7cd25 | 100 | case 0x02 : |
lolpcc | 0:9edfcca7cd25 | 101 | return('2'); |
lolpcc | 0:9edfcca7cd25 | 102 | case 0x04 : |
lolpcc | 0:9edfcca7cd25 | 103 | return('3'); |
lolpcc | 0:9edfcca7cd25 | 104 | case 0x08 : |
lolpcc | 0:9edfcca7cd25 | 105 | return('4'); |
lolpcc | 0:9edfcca7cd25 | 106 | case 0x10 : |
lolpcc | 0:9edfcca7cd25 | 107 | return('5'); |
lolpcc | 0:9edfcca7cd25 | 108 | case 0x20 : |
lolpcc | 0:9edfcca7cd25 | 109 | return('6'); |
lolpcc | 0:9edfcca7cd25 | 110 | case 0x40 : |
lolpcc | 0:9edfcca7cd25 | 111 | return('7'); |
lolpcc | 0:9edfcca7cd25 | 112 | case 0x80 : |
lolpcc | 0:9edfcca7cd25 | 113 | return('8'); |
lolpcc | 0:9edfcca7cd25 | 114 | } |
lolpcc | 0:9edfcca7cd25 | 115 | } |
lolpcc | 0:9edfcca7cd25 | 116 | if(buf[2]!=0){ |
lolpcc | 0:9edfcca7cd25 | 117 | switch(buf[2]){ |
lolpcc | 0:9edfcca7cd25 | 118 | case 0x01 : |
lolpcc | 0:9edfcca7cd25 | 119 | return('9'); |
lolpcc | 0:9edfcca7cd25 | 120 | case 0x02 : |
lolpcc | 0:9edfcca7cd25 | 121 | return('*'); |
lolpcc | 0:9edfcca7cd25 | 122 | case 0x04 : |
lolpcc | 0:9edfcca7cd25 | 123 | return('0'); |
lolpcc | 0:9edfcca7cd25 | 124 | case 0x08 : |
lolpcc | 0:9edfcca7cd25 | 125 | return('#'); |
lolpcc | 0:9edfcca7cd25 | 126 | } |
lolpcc | 0:9edfcca7cd25 | 127 | } |
lolpcc | 0:9edfcca7cd25 | 128 | return('\0'); |
lolpcc | 0:9edfcca7cd25 | 129 | } |
lolpcc | 0:9edfcca7cd25 | 130 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 131 | /* */ |
lolpcc | 1:6877bb99aa17 | 132 | /* Blocking key press, will wait for */ |
lolpcc | 1:6877bb99aa17 | 133 | /* the user to press a key */ |
lolpcc | 1:6877bb99aa17 | 134 | /* */ |
lolpcc | 1:6877bb99aa17 | 135 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 136 | char blocking_read_keyboard(void) |
lolpcc | 1:6877bb99aa17 | 137 | { |
lolpcc | 1:6877bb99aa17 | 138 | char c = 0; |
lolpcc | 1:6877bb99aa17 | 139 | while((c=read_keyboard())==0) |
lolpcc | 1:6877bb99aa17 | 140 | while((read_keyboard())==c); |
lolpcc | 1:6877bb99aa17 | 141 | wait(0.5); |
lolpcc | 1:6877bb99aa17 | 142 | return(c); |
lolpcc | 1:6877bb99aa17 | 143 | } |
lolpcc | 1:6877bb99aa17 | 144 | |
lolpcc | 1:6877bb99aa17 | 145 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 146 | /* */ |
lolpcc | 1:6877bb99aa17 | 147 | /* 1 - 8, Relays On, */ |
lolpcc | 0:9edfcca7cd25 | 148 | /* */ |
lolpcc | 1:6877bb99aa17 | 149 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 150 | void relay_operate(char r) |
lolpcc | 1:6877bb99aa17 | 151 | { |
lolpcc | 1:6877bb99aa17 | 152 | char buf[0x60]; |
lolpcc | 1:6877bb99aa17 | 153 | |
lolpcc | 1:6877bb99aa17 | 154 | switch(r){ |
lolpcc | 1:6877bb99aa17 | 155 | case 0 : /* Turn off the relays */ |
lolpcc | 1:6877bb99aa17 | 156 | buf[0]=0x00; |
lolpcc | 1:6877bb99aa17 | 157 | break; |
lolpcc | 1:6877bb99aa17 | 158 | case 1 : |
lolpcc | 1:6877bb99aa17 | 159 | buf[0]=0x01; |
lolpcc | 1:6877bb99aa17 | 160 | break; |
lolpcc | 1:6877bb99aa17 | 161 | case 2 : |
lolpcc | 1:6877bb99aa17 | 162 | buf[0]=0x02; |
lolpcc | 1:6877bb99aa17 | 163 | break; |
lolpcc | 1:6877bb99aa17 | 164 | case 3 : |
lolpcc | 1:6877bb99aa17 | 165 | buf[0]=0x04; |
lolpcc | 1:6877bb99aa17 | 166 | break; |
lolpcc | 1:6877bb99aa17 | 167 | case 4 : |
lolpcc | 1:6877bb99aa17 | 168 | buf[0]=0x08; |
lolpcc | 1:6877bb99aa17 | 169 | break; |
lolpcc | 1:6877bb99aa17 | 170 | case 5 : |
lolpcc | 1:6877bb99aa17 | 171 | buf[0]=0x10; |
lolpcc | 1:6877bb99aa17 | 172 | break; |
lolpcc | 1:6877bb99aa17 | 173 | case 6 : |
lolpcc | 1:6877bb99aa17 | 174 | buf[0]=0x20; |
lolpcc | 1:6877bb99aa17 | 175 | break; |
lolpcc | 1:6877bb99aa17 | 176 | case 7 : |
lolpcc | 1:6877bb99aa17 | 177 | buf[0]=0x40; |
lolpcc | 1:6877bb99aa17 | 178 | break; |
lolpcc | 1:6877bb99aa17 | 179 | case 8 : |
lolpcc | 1:6877bb99aa17 | 180 | buf[0]=0x80; |
lolpcc | 1:6877bb99aa17 | 181 | break; |
lolpcc | 1:6877bb99aa17 | 182 | default : |
lolpcc | 1:6877bb99aa17 | 183 | lprintf("Unknown Relay %d\n\r",r); |
lolpcc | 1:6877bb99aa17 | 184 | return; |
lolpcc | 1:6877bb99aa17 | 185 | } |
lolpcc | 1:6877bb99aa17 | 186 | i2c.write(RELAYS,buf,1); |
lolpcc | 1:6877bb99aa17 | 187 | } |
lolpcc | 1:6877bb99aa17 | 188 | |
lolpcc | 1:6877bb99aa17 | 189 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 190 | /* */ |
lolpcc | 1:6877bb99aa17 | 191 | /* Read and Write the PIO latch */ |
lolpcc | 1:6877bb99aa17 | 192 | /* */ |
lolpcc | 1:6877bb99aa17 | 193 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 194 | void pio_write(unsigned char r, unsigned char d) |
lolpcc | 1:6877bb99aa17 | 195 | { |
lolpcc | 1:6877bb99aa17 | 196 | unsigned char buf[0x60]; |
lolpcc | 1:6877bb99aa17 | 197 | |
lolpcc | 1:6877bb99aa17 | 198 | buf[0]=d; |
lolpcc | 1:6877bb99aa17 | 199 | i2c.write(r,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 200 | } |
lolpcc | 1:6877bb99aa17 | 201 | void pio_read(unsigned char d) |
lolpcc | 1:6877bb99aa17 | 202 | { |
lolpcc | 1:6877bb99aa17 | 203 | unsigned char r; |
lolpcc | 1:6877bb99aa17 | 204 | unsigned char buf[0x60]; |
lolpcc | 1:6877bb99aa17 | 205 | |
lolpcc | 1:6877bb99aa17 | 206 | i2c.read(d,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 207 | r = buf[0]; |
lolpcc | 1:6877bb99aa17 | 208 | |
lolpcc | 1:6877bb99aa17 | 209 | lprintf("Returned value from the PIO was 0x%02x\n\r",r); |
lolpcc | 1:6877bb99aa17 | 210 | } |
lolpcc | 1:6877bb99aa17 | 211 | |
lolpcc | 1:6877bb99aa17 | 212 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 213 | /* */ |
lolpcc | 1:6877bb99aa17 | 214 | /* Philips PCA9685 I2C Driver, 16 channel */ |
lolpcc | 1:6877bb99aa17 | 215 | /* Lighting controler chip, we have 4 */ |
lolpcc | 1:6877bb99aa17 | 216 | /* running in this system, so we need to */ |
lolpcc | 1:6877bb99aa17 | 217 | /* think how the channels map ?? */ |
lolpcc | 1:6877bb99aa17 | 218 | /* */ |
lolpcc | 1:6877bb99aa17 | 219 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 220 | |
lolpcc | 1:6877bb99aa17 | 221 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 222 | /* */ |
lolpcc | 1:6877bb99aa17 | 223 | /* Init code for the PCA9685 */ |
lolpcc | 0:9edfcca7cd25 | 224 | /* */ |
lolpcc | 0:9edfcca7cd25 | 225 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 226 | |
lolpcc | 1:6877bb99aa17 | 227 | void init_pca9685(unsigned char address) |
lolpcc | 1:6877bb99aa17 | 228 | { |
lolpcc | 1:6877bb99aa17 | 229 | unsigned char buf[30]; |
lolpcc | 1:6877bb99aa17 | 230 | |
lolpcc | 1:6877bb99aa17 | 231 | lprintf("Setting up channel %d\n\r",address); |
lolpcc | 1:6877bb99aa17 | 232 | |
lolpcc | 1:6877bb99aa17 | 233 | buf[0] = PCA9685_MODE1; |
lolpcc | 1:6877bb99aa17 | 234 | buf[1] = PCA9685_AI; |
lolpcc | 1:6877bb99aa17 | 235 | buf[2] = PCA9685_OUTDRV; |
lolpcc | 1:6877bb99aa17 | 236 | i2c.write(address,(char *) buf, 3); |
lolpcc | 1:6877bb99aa17 | 237 | } |
lolpcc | 1:6877bb99aa17 | 238 | |
lolpcc | 1:6877bb99aa17 | 239 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 240 | /* */ |
lolpcc | 1:6877bb99aa17 | 241 | /* Send data to a given channle of a */ |
lolpcc | 1:6877bb99aa17 | 242 | /* given PCA9685 chip */ |
lolpcc | 1:6877bb99aa17 | 243 | /* */ |
lolpcc | 1:6877bb99aa17 | 244 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 245 | |
lolpcc | 1:6877bb99aa17 | 246 | void pca9685_led(unsigned char addr, int led, unsigned char *values) |
lolpcc | 1:6877bb99aa17 | 247 | { |
lolpcc | 1:6877bb99aa17 | 248 | unsigned char buf[5]; |
lolpcc | 1:6877bb99aa17 | 249 | |
lolpcc | 1:6877bb99aa17 | 250 | if (led == PCA9685_ALL_LEDS) { |
lolpcc | 1:6877bb99aa17 | 251 | buf[0] = PCA9685_ALL_LED_ON_L; |
lolpcc | 1:6877bb99aa17 | 252 | } else { |
lolpcc | 1:6877bb99aa17 | 253 | buf[0] = PCA9685_BASE(led); |
lolpcc | 1:6877bb99aa17 | 254 | } |
lolpcc | 1:6877bb99aa17 | 255 | |
lolpcc | 1:6877bb99aa17 | 256 | buf[1] = values[0]; |
lolpcc | 1:6877bb99aa17 | 257 | buf[2] = values[1]; |
lolpcc | 1:6877bb99aa17 | 258 | buf[3] = values[2]; |
lolpcc | 1:6877bb99aa17 | 259 | buf[4] = values[3]; |
lolpcc | 1:6877bb99aa17 | 260 | i2c.write(addr, (char *)buf, 5); |
lolpcc | 1:6877bb99aa17 | 261 | } |
lolpcc | 1:6877bb99aa17 | 262 | |
lolpcc | 1:6877bb99aa17 | 263 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 264 | /* */ |
lolpcc | 1:6877bb99aa17 | 265 | /* Calculate the register values for a */ |
lolpcc | 1:6877bb99aa17 | 266 | /* givern brightness percentage */ |
lolpcc | 1:6877bb99aa17 | 267 | /* */ |
lolpcc | 1:6877bb99aa17 | 268 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 269 | |
lolpcc | 1:6877bb99aa17 | 270 | void pca9685_brightness(int percent, unsigned char *values) |
lolpcc | 0:9edfcca7cd25 | 271 | { |
lolpcc | 1:6877bb99aa17 | 272 | unsigned int on, off; |
lolpcc | 1:6877bb99aa17 | 273 | |
lolpcc | 1:6877bb99aa17 | 274 | if (percent == 0) { |
lolpcc | 1:6877bb99aa17 | 275 | values[PCA9685_LED_ON_H] = 0; |
lolpcc | 1:6877bb99aa17 | 276 | values[PCA9685_LED_OFF_H] = PCA9685_LED_OFF; |
lolpcc | 1:6877bb99aa17 | 277 | return; |
lolpcc | 1:6877bb99aa17 | 278 | } |
lolpcc | 1:6877bb99aa17 | 279 | if (percent == 100) { |
lolpcc | 1:6877bb99aa17 | 280 | values[PCA9685_LED_ON_H] = PCA9685_LED_ON; |
lolpcc | 1:6877bb99aa17 | 281 | values[PCA9685_LED_OFF_H] = 0; |
lolpcc | 1:6877bb99aa17 | 282 | return; |
lolpcc | 1:6877bb99aa17 | 283 | } |
lolpcc | 1:6877bb99aa17 | 284 | on = 0; |
lolpcc | 1:6877bb99aa17 | 285 | off = (4096 * percent) / 100; |
lolpcc | 1:6877bb99aa17 | 286 | values[PCA9685_LED_ON_L] = on & 0xff; |
lolpcc | 1:6877bb99aa17 | 287 | values[PCA9685_LED_ON_H] = (on >> 8) & 0xf; |
lolpcc | 1:6877bb99aa17 | 288 | values[PCA9685_LED_OFF_L] = off & 0xff; |
lolpcc | 1:6877bb99aa17 | 289 | values[PCA9685_LED_OFF_H] = (off >> 8) & 0xf; |
lolpcc | 0:9edfcca7cd25 | 290 | } |
lolpcc | 1:6877bb99aa17 | 291 | |
lolpcc | 1:6877bb99aa17 | 292 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 293 | /* */ |
lolpcc | 1:6877bb99aa17 | 294 | /* Set a given channel to a given level */ |
lolpcc | 1:6877bb99aa17 | 295 | /* */ |
lolpcc | 1:6877bb99aa17 | 296 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 297 | void channel_light(unsigned char ch, unsigned char lev) |
lolpcc | 1:6877bb99aa17 | 298 | { |
lolpcc | 1:6877bb99aa17 | 299 | char chip,led; /* Chip Number, channel number */ |
lolpcc | 1:6877bb99aa17 | 300 | unsigned char v[4]; /* register data for givern level */ |
lolpcc | 1:6877bb99aa17 | 301 | |
lolpcc | 1:6877bb99aa17 | 302 | led = ch%16; |
lolpcc | 1:6877bb99aa17 | 303 | v[0]=0; |
lolpcc | 1:6877bb99aa17 | 304 | v[1]=0; |
lolpcc | 1:6877bb99aa17 | 305 | v[2]=0; |
lolpcc | 1:6877bb99aa17 | 306 | v[3]=0; |
lolpcc | 1:6877bb99aa17 | 307 | |
lolpcc | 1:6877bb99aa17 | 308 | if(lev > 100){ |
lolpcc | 1:6877bb99aa17 | 309 | lprintf("Level percentage range 0 - 100 (Trying for %d)\n\r",lev); |
lolpcc | 1:6877bb99aa17 | 310 | return; |
lolpcc | 1:6877bb99aa17 | 311 | } |
lolpcc | 1:6877bb99aa17 | 312 | |
lolpcc | 1:6877bb99aa17 | 313 | switch(ch/16){ |
lolpcc | 1:6877bb99aa17 | 314 | case 0 : |
lolpcc | 1:6877bb99aa17 | 315 | chip=LEDDRV1; |
lolpcc | 1:6877bb99aa17 | 316 | break; |
lolpcc | 1:6877bb99aa17 | 317 | case 1 : |
lolpcc | 1:6877bb99aa17 | 318 | chip=LEDDRV2; |
lolpcc | 1:6877bb99aa17 | 319 | break; |
lolpcc | 1:6877bb99aa17 | 320 | case 2 : |
lolpcc | 1:6877bb99aa17 | 321 | chip=LEDDRV3; |
lolpcc | 1:6877bb99aa17 | 322 | break; |
lolpcc | 1:6877bb99aa17 | 323 | case 3 : |
lolpcc | 1:6877bb99aa17 | 324 | chip=LEDDRV4; |
lolpcc | 1:6877bb99aa17 | 325 | break; |
lolpcc | 1:6877bb99aa17 | 326 | case 4 : |
lolpcc | 1:6877bb99aa17 | 327 | chip=LEDDRV5; |
lolpcc | 1:6877bb99aa17 | 328 | break; |
lolpcc | 1:6877bb99aa17 | 329 | case 5 : |
lolpcc | 1:6877bb99aa17 | 330 | chip=LEDDRV6; |
lolpcc | 1:6877bb99aa17 | 331 | break; |
lolpcc | 1:6877bb99aa17 | 332 | default : |
lolpcc | 1:6877bb99aa17 | 333 | lprintf("Error unknown chip %d\n\r",ch/16); |
lolpcc | 1:6877bb99aa17 | 334 | return; |
lolpcc | 1:6877bb99aa17 | 335 | } |
lolpcc | 1:6877bb99aa17 | 336 | |
lolpcc | 1:6877bb99aa17 | 337 | lprintf("Setting channel %d to brightness leven %d chip = %d(%d),%d\n\r", |
lolpcc | 1:6877bb99aa17 | 338 | ch,lev,chip,ch/16,led); |
lolpcc | 1:6877bb99aa17 | 339 | pca9685_brightness(lev,v); /* Calculate the brightness level */ |
lolpcc | 1:6877bb99aa17 | 340 | lprintf("Brightness level is %02x,%02x,%02x,%02x\n\r",v[0],v[1],v[2],v[3]); |
lolpcc | 1:6877bb99aa17 | 341 | pca9685_led(chip,led,v); /* Send to chip */ |
lolpcc | 1:6877bb99aa17 | 342 | } |
lolpcc | 1:6877bb99aa17 | 343 | |
lolpcc | 0:9edfcca7cd25 | 344 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 345 | /* */ |
lolpcc | 0:9edfcca7cd25 | 346 | /* Send some data to the seven segment */ |
lolpcc | 0:9edfcca7cd25 | 347 | /* display device, showing the user */ |
lolpcc | 0:9edfcca7cd25 | 348 | /* what the SAA1064 can do */ |
lolpcc | 0:9edfcca7cd25 | 349 | /* */ |
lolpcc | 0:9edfcca7cd25 | 350 | /* */ |
lolpcc | 0:9edfcca7cd25 | 351 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 352 | |
lolpcc | 0:9edfcca7cd25 | 353 | /* mapping of bit pattern to number 0-9 */ |
lolpcc | 0:9edfcca7cd25 | 354 | char sseg_map[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67}; |
lolpcc | 0:9edfcca7cd25 | 355 | |
lolpcc | 0:9edfcca7cd25 | 356 | void test_seven_seg(char loop) |
lolpcc | 0:9edfcca7cd25 | 357 | { |
lolpcc | 0:9edfcca7cd25 | 358 | unsigned char buf[10]; |
lolpcc | 0:9edfcca7cd25 | 359 | char a,b,c; |
lolpcc | 0:9edfcca7cd25 | 360 | |
lolpcc | 0:9edfcca7cd25 | 361 | buf[0]=0; |
lolpcc | 0:9edfcca7cd25 | 362 | buf[1]=0x27; |
lolpcc | 0:9edfcca7cd25 | 363 | c=0; |
lolpcc | 0:9edfcca7cd25 | 364 | i2c.write(SEVEN_SEG,(char *)buf,7); |
lolpcc | 0:9edfcca7cd25 | 365 | while(c!=loop){ |
lolpcc | 0:9edfcca7cd25 | 366 | a = 1; |
lolpcc | 0:9edfcca7cd25 | 367 | b = 0; |
lolpcc | 0:9edfcca7cd25 | 368 | while(b!=8){ |
lolpcc | 0:9edfcca7cd25 | 369 | buf[2]=a<<b; |
lolpcc | 0:9edfcca7cd25 | 370 | buf[3]=a<<b; |
lolpcc | 0:9edfcca7cd25 | 371 | buf[4]=a<<b; |
lolpcc | 0:9edfcca7cd25 | 372 | buf[5]=a<<b; |
lolpcc | 0:9edfcca7cd25 | 373 | i2c.write(SEVEN_SEG,(char *)buf,7); |
lolpcc | 0:9edfcca7cd25 | 374 | wait(0.5); |
lolpcc | 0:9edfcca7cd25 | 375 | b++; |
lolpcc | 0:9edfcca7cd25 | 376 | } |
lolpcc | 0:9edfcca7cd25 | 377 | c++; |
lolpcc | 0:9edfcca7cd25 | 378 | } |
lolpcc | 0:9edfcca7cd25 | 379 | } |
lolpcc | 0:9edfcca7cd25 | 380 | |
lolpcc | 1:6877bb99aa17 | 381 | void sseg_four_digits(int a) |
lolpcc | 1:6877bb99aa17 | 382 | { |
lolpcc | 1:6877bb99aa17 | 383 | int index = 4; |
lolpcc | 1:6877bb99aa17 | 384 | int val = a; |
lolpcc | 1:6877bb99aa17 | 385 | char pt[5]; |
lolpcc | 1:6877bb99aa17 | 386 | |
lolpcc | 1:6877bb99aa17 | 387 | pt[1] = 0; |
lolpcc | 1:6877bb99aa17 | 388 | pt[2] = 0; |
lolpcc | 1:6877bb99aa17 | 389 | pt[3] = 0; |
lolpcc | 1:6877bb99aa17 | 390 | pt[4] = 0; |
lolpcc | 1:6877bb99aa17 | 391 | |
lolpcc | 1:6877bb99aa17 | 392 | do { |
lolpcc | 1:6877bb99aa17 | 393 | register unsigned short temp; |
lolpcc | 1:6877bb99aa17 | 394 | |
lolpcc | 1:6877bb99aa17 | 395 | temp = val / 10; |
lolpcc | 1:6877bb99aa17 | 396 | pt[index] = (char)(val - (temp * 10)); |
lolpcc | 1:6877bb99aa17 | 397 | val = temp; |
lolpcc | 1:6877bb99aa17 | 398 | index -= 1; |
lolpcc | 1:6877bb99aa17 | 399 | |
lolpcc | 1:6877bb99aa17 | 400 | } while ( val > 0 ); |
lolpcc | 1:6877bb99aa17 | 401 | |
lolpcc | 1:6877bb99aa17 | 402 | print_seven_seg(sseg_map[pt[1]],sseg_map[pt[2]],sseg_map[pt[3]],sseg_map[pt[4]]); |
lolpcc | 1:6877bb99aa17 | 403 | } |
lolpcc | 1:6877bb99aa17 | 404 | |
lolpcc | 0:9edfcca7cd25 | 405 | void print_seven_seg(unsigned char a,unsigned char b,unsigned char c,unsigned char d) |
lolpcc | 0:9edfcca7cd25 | 406 | { |
lolpcc | 0:9edfcca7cd25 | 407 | unsigned char buf[10]; |
lolpcc | 0:9edfcca7cd25 | 408 | |
lolpcc | 0:9edfcca7cd25 | 409 | buf[0]=0; |
lolpcc | 0:9edfcca7cd25 | 410 | buf[1]=0x27; |
lolpcc | 0:9edfcca7cd25 | 411 | buf[2]=a; |
lolpcc | 0:9edfcca7cd25 | 412 | buf[3]=b; |
lolpcc | 1:6877bb99aa17 | 413 | buf[4]=c; |
lolpcc | 1:6877bb99aa17 | 414 | buf[5]=d; |
lolpcc | 0:9edfcca7cd25 | 415 | i2c.write(SEVEN_SEG,(char *)buf,7); |
lolpcc | 0:9edfcca7cd25 | 416 | } |
lolpcc | 0:9edfcca7cd25 | 417 | |
lolpcc | 1:6877bb99aa17 | 418 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 419 | /* */ |
lolpcc | 1:6877bb99aa17 | 420 | /* Test code to drive the Batron LCD */ |
lolpcc | 1:6877bb99aa17 | 421 | /* */ |
lolpcc | 1:6877bb99aa17 | 422 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 423 | |
lolpcc | 1:6877bb99aa17 | 424 | void batron_lcd_init(void) |
lolpcc | 1:6877bb99aa17 | 425 | { |
lolpcc | 1:6877bb99aa17 | 426 | char buf[0x60]; |
lolpcc | 1:6877bb99aa17 | 427 | |
lolpcc | 1:6877bb99aa17 | 428 | lprintf("Init Batron LCD at %02x\n\r",BAT); |
lolpcc | 1:6877bb99aa17 | 429 | |
lolpcc | 1:6877bb99aa17 | 430 | buf[0]=0x00; |
lolpcc | 1:6877bb99aa17 | 431 | buf[1]=0x34; |
lolpcc | 1:6877bb99aa17 | 432 | buf[2]=0x0c; |
lolpcc | 1:6877bb99aa17 | 433 | buf[3]=0x06; |
lolpcc | 1:6877bb99aa17 | 434 | buf[4]=0x35; |
lolpcc | 1:6877bb99aa17 | 435 | buf[5]=0x04; |
lolpcc | 1:6877bb99aa17 | 436 | buf[6]=0x10; |
lolpcc | 1:6877bb99aa17 | 437 | buf[7]=0x42; |
lolpcc | 1:6877bb99aa17 | 438 | buf[8]=0x9f; |
lolpcc | 1:6877bb99aa17 | 439 | buf[9]=0x34; |
lolpcc | 1:6877bb99aa17 | 440 | buf[10]=0x80; |
lolpcc | 1:6877bb99aa17 | 441 | buf[11]=0x02; |
lolpcc | 1:6877bb99aa17 | 442 | |
lolpcc | 1:6877bb99aa17 | 443 | i2c.write(BAT,(char *)buf,12); |
lolpcc | 1:6877bb99aa17 | 444 | batron_clear(); |
lolpcc | 1:6877bb99aa17 | 445 | } |
lolpcc | 1:6877bb99aa17 | 446 | void batron(char *str) |
lolpcc | 1:6877bb99aa17 | 447 | { |
lolpcc | 1:6877bb99aa17 | 448 | lprintf("Testing Batron LCD, Clearing Display\n\r"); |
lolpcc | 1:6877bb99aa17 | 449 | |
lolpcc | 1:6877bb99aa17 | 450 | batron_clear(); |
lolpcc | 1:6877bb99aa17 | 451 | |
lolpcc | 1:6877bb99aa17 | 452 | lprintf("Sending %s\n",str); |
lolpcc | 1:6877bb99aa17 | 453 | |
lolpcc | 1:6877bb99aa17 | 454 | batron_lcd_write(str); |
lolpcc | 1:6877bb99aa17 | 455 | } |
lolpcc | 1:6877bb99aa17 | 456 | |
lolpcc | 1:6877bb99aa17 | 457 | char batron_lcd_write(char *b) |
lolpcc | 0:9edfcca7cd25 | 458 | { |
lolpcc | 1:6877bb99aa17 | 459 | char buf[0x60]; |
lolpcc | 1:6877bb99aa17 | 460 | int a; |
lolpcc | 1:6877bb99aa17 | 461 | |
lolpcc | 1:6877bb99aa17 | 462 | buf[0]=0x00; |
lolpcc | 1:6877bb99aa17 | 463 | buf[1]=0x80; |
lolpcc | 1:6877bb99aa17 | 464 | i2c.write(BAT,(char *)buf,2); |
lolpcc | 1:6877bb99aa17 | 465 | |
lolpcc | 1:6877bb99aa17 | 466 | a=0; |
lolpcc | 1:6877bb99aa17 | 467 | buf[0]=0x40; |
lolpcc | 1:6877bb99aa17 | 468 | |
lolpcc | 1:6877bb99aa17 | 469 | while(a!=strlen(b)){ |
lolpcc | 1:6877bb99aa17 | 470 | buf[a+1]=ascii_to_lcd(b[a]); |
lolpcc | 1:6877bb99aa17 | 471 | a++; |
lolpcc | 1:6877bb99aa17 | 472 | } |
lolpcc | 1:6877bb99aa17 | 473 | buf[a+1]=0x00; |
lolpcc | 1:6877bb99aa17 | 474 | |
lolpcc | 1:6877bb99aa17 | 475 | i2c.write(BAT,buf,strlen(b)+1); |
lolpcc | 1:6877bb99aa17 | 476 | |
lolpcc | 1:6877bb99aa17 | 477 | buf[0]=0x80; |
lolpcc | 1:6877bb99aa17 | 478 | buf[1]=0x02; |
lolpcc | 1:6877bb99aa17 | 479 | i2c.write(BAT,(char *)buf,2); |
lolpcc | 1:6877bb99aa17 | 480 | return(0); |
lolpcc | 1:6877bb99aa17 | 481 | } |
lolpcc | 1:6877bb99aa17 | 482 | |
lolpcc | 1:6877bb99aa17 | 483 | char ascii_to_lcd(char ch) |
lolpcc | 1:6877bb99aa17 | 484 | { |
lolpcc | 1:6877bb99aa17 | 485 | char c; |
lolpcc | 1:6877bb99aa17 | 486 | |
lolpcc | 1:6877bb99aa17 | 487 | c = 0xA0; // default: white space |
lolpcc | 1:6877bb99aa17 | 488 | |
lolpcc | 1:6877bb99aa17 | 489 | if((ch>=' ') & (ch<='?')) |
lolpcc | 1:6877bb99aa17 | 490 | c = ASCII_OFFSET + ch; |
lolpcc | 1:6877bb99aa17 | 491 | if((ch>='A') & (ch<='Z')) |
lolpcc | 1:6877bb99aa17 | 492 | c = ASCII_OFFSET + ch; |
lolpcc | 1:6877bb99aa17 | 493 | if((ch>='a') & (ch<='z')) |
lolpcc | 1:6877bb99aa17 | 494 | c = ASCII_OFFSET + ch; |
lolpcc | 1:6877bb99aa17 | 495 | return c; |
lolpcc | 1:6877bb99aa17 | 496 | } |
lolpcc | 1:6877bb99aa17 | 497 | void batron_clear(void) |
lolpcc | 1:6877bb99aa17 | 498 | { |
lolpcc | 1:6877bb99aa17 | 499 | batron_clear_line(0); // clear 1st line |
lolpcc | 1:6877bb99aa17 | 500 | batron_clear_line(1); // clear 2nd line |
lolpcc | 1:6877bb99aa17 | 501 | |
lolpcc | 1:6877bb99aa17 | 502 | return; |
lolpcc | 1:6877bb99aa17 | 503 | } |
lolpcc | 1:6877bb99aa17 | 504 | char batron_clear_line(char row) |
lolpcc | 1:6877bb99aa17 | 505 | { |
lolpcc | 1:6877bb99aa17 | 506 | char i=0, state; |
lolpcc | 1:6877bb99aa17 | 507 | do |
lolpcc | 1:6877bb99aa17 | 508 | //state = LCD_put_xy(LCD_ascii_to_lcd(0x20), row, i); |
lolpcc | 1:6877bb99aa17 | 509 | state = batron_put_xy(0xA0, row, i); |
lolpcc | 1:6877bb99aa17 | 510 | while((i++<16)); |
lolpcc | 1:6877bb99aa17 | 511 | return state; |
lolpcc | 1:6877bb99aa17 | 512 | } |
lolpcc | 1:6877bb99aa17 | 513 | char batron_put_xy(char ddram_byte, char row, char column) |
lolpcc | 1:6877bb99aa17 | 514 | { |
lolpcc | 1:6877bb99aa17 | 515 | char buf[0x10]; |
lolpcc | 1:6877bb99aa17 | 516 | char adr; |
lolpcc | 1:6877bb99aa17 | 517 | |
lolpcc | 1:6877bb99aa17 | 518 | if(row == 0) // line offset |
lolpcc | 1:6877bb99aa17 | 519 | adr = column; |
lolpcc | 1:6877bb99aa17 | 520 | else |
lolpcc | 1:6877bb99aa17 | 521 | adr = 0x40 + column; |
lolpcc | 0:9edfcca7cd25 | 522 | |
lolpcc | 1:6877bb99aa17 | 523 | buf[0] = 0x00; // Enter function setting |
lolpcc | 1:6877bb99aa17 | 524 | buf[1] = 0x80 + adr; // LCD adr counter set to "adr" |
lolpcc | 1:6877bb99aa17 | 525 | |
lolpcc | 1:6877bb99aa17 | 526 | i2c.write(BAT,(char *)buf,2); |
lolpcc | 1:6877bb99aa17 | 527 | |
lolpcc | 1:6877bb99aa17 | 528 | buf[0] = 0x40; // write to DDRAM |
lolpcc | 1:6877bb99aa17 | 529 | buf[1] = ddram_byte; |
lolpcc | 1:6877bb99aa17 | 530 | |
lolpcc | 1:6877bb99aa17 | 531 | i2c.write(BAT,(char *)buf,2); |
lolpcc | 1:6877bb99aa17 | 532 | |
lolpcc | 1:6877bb99aa17 | 533 | return(0); |
lolpcc | 1:6877bb99aa17 | 534 | } |
lolpcc | 1:6877bb99aa17 | 535 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 536 | /* */ |
lolpcc | 1:6877bb99aa17 | 537 | /* Test code for a matrix KBD built on a */ |
lolpcc | 1:6877bb99aa17 | 538 | /* PCF8574 I2C driver */ |
lolpcc | 1:6877bb99aa17 | 539 | /* State, 0 - test, 1 - wait till a press */ |
lolpcc | 1:6877bb99aa17 | 540 | /* Out on the lower nibble, in upper */ |
lolpcc | 1:6877bb99aa17 | 541 | /* */ |
lolpcc | 1:6877bb99aa17 | 542 | /******************************************/ |
lolpcc | 1:6877bb99aa17 | 543 | |
lolpcc | 1:6877bb99aa17 | 544 | char pcf8574_kbd(char state) |
lolpcc | 1:6877bb99aa17 | 545 | { |
lolpcc | 1:6877bb99aa17 | 546 | char buf[0x60]; |
lolpcc | 1:6877bb99aa17 | 547 | |
lolpcc | 1:6877bb99aa17 | 548 | char r = 0; |
lolpcc | 1:6877bb99aa17 | 549 | |
lolpcc | 1:6877bb99aa17 | 550 | buf[0]=0xf0; |
lolpcc | 1:6877bb99aa17 | 551 | i2c.write(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 552 | while(r==0){ |
lolpcc | 1:6877bb99aa17 | 553 | i2c.read(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 554 | if((buf[0] & 0xf0)!=0xf0){ |
lolpcc | 1:6877bb99aa17 | 555 | buf[0]=0xfe; |
lolpcc | 1:6877bb99aa17 | 556 | i2c.write(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 557 | i2c.read(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 558 | if((buf[0] & 0xf0)!=0xf0) |
lolpcc | 1:6877bb99aa17 | 559 | r = pcf8584_sub_kbd(buf[0]); |
lolpcc | 1:6877bb99aa17 | 560 | buf[0]=0xfd; |
lolpcc | 1:6877bb99aa17 | 561 | i2c.write(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 562 | i2c.read(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 563 | if((buf[0] & 0xf0)!=0xf0) |
lolpcc | 1:6877bb99aa17 | 564 | r = pcf8584_sub_kbd(buf[0]); |
lolpcc | 1:6877bb99aa17 | 565 | buf[0]=0xfb; |
lolpcc | 1:6877bb99aa17 | 566 | i2c.write(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 567 | i2c.read(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 568 | if((buf[0] & 0xf0)!=0xf0) |
lolpcc | 1:6877bb99aa17 | 569 | r = pcf8584_sub_kbd(buf[0]); |
lolpcc | 1:6877bb99aa17 | 570 | buf[0]=0xf7; |
lolpcc | 1:6877bb99aa17 | 571 | i2c.write(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 572 | i2c.read(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 573 | if((buf[0] & 0xf0)!=0xf0) |
lolpcc | 1:6877bb99aa17 | 574 | r = pcf8584_sub_kbd(buf[0]); |
lolpcc | 1:6877bb99aa17 | 575 | } else { |
lolpcc | 1:6877bb99aa17 | 576 | buf[0]=0xf0; |
lolpcc | 1:6877bb99aa17 | 577 | i2c.write(BATKBD,(char *)buf,1); |
lolpcc | 1:6877bb99aa17 | 578 | } |
lolpcc | 1:6877bb99aa17 | 579 | if(state==0) |
lolpcc | 1:6877bb99aa17 | 580 | return(r); |
lolpcc | 1:6877bb99aa17 | 581 | wait(0.2); |
lolpcc | 1:6877bb99aa17 | 582 | } |
lolpcc | 1:6877bb99aa17 | 583 | |
lolpcc | 1:6877bb99aa17 | 584 | return(r); |
lolpcc | 1:6877bb99aa17 | 585 | } |
lolpcc | 1:6877bb99aa17 | 586 | char pcf8584_sub_kbd(unsigned char d) |
lolpcc | 1:6877bb99aa17 | 587 | { |
lolpcc | 1:6877bb99aa17 | 588 | lprintf("Raw Code %02x, ",d); |
lolpcc | 1:6877bb99aa17 | 589 | switch(d){ |
lolpcc | 1:6877bb99aa17 | 590 | case 0xee : |
lolpcc | 1:6877bb99aa17 | 591 | return('c'); |
lolpcc | 1:6877bb99aa17 | 592 | case 0xed : |
lolpcc | 1:6877bb99aa17 | 593 | return('d'); |
lolpcc | 1:6877bb99aa17 | 594 | case 0xeb : |
lolpcc | 1:6877bb99aa17 | 595 | return('e'); |
lolpcc | 1:6877bb99aa17 | 596 | case 0xe7 : |
lolpcc | 1:6877bb99aa17 | 597 | return('f'); |
lolpcc | 1:6877bb99aa17 | 598 | case 0xde : |
lolpcc | 1:6877bb99aa17 | 599 | return('b'); |
lolpcc | 1:6877bb99aa17 | 600 | case 0xdd : |
lolpcc | 1:6877bb99aa17 | 601 | return('9'); |
lolpcc | 1:6877bb99aa17 | 602 | case 0xdb : |
lolpcc | 1:6877bb99aa17 | 603 | return('6'); |
lolpcc | 1:6877bb99aa17 | 604 | case 0xd7 : |
lolpcc | 1:6877bb99aa17 | 605 | return('3'); |
lolpcc | 1:6877bb99aa17 | 606 | case 0xbe : |
lolpcc | 1:6877bb99aa17 | 607 | return('0'); |
lolpcc | 1:6877bb99aa17 | 608 | case 0xbd : |
lolpcc | 1:6877bb99aa17 | 609 | return('8'); |
lolpcc | 1:6877bb99aa17 | 610 | case 0xbb : |
lolpcc | 1:6877bb99aa17 | 611 | return('5'); |
lolpcc | 1:6877bb99aa17 | 612 | case 0xb7 : |
lolpcc | 1:6877bb99aa17 | 613 | return('2'); |
lolpcc | 1:6877bb99aa17 | 614 | case 0x7e : |
lolpcc | 1:6877bb99aa17 | 615 | return('a'); |
lolpcc | 1:6877bb99aa17 | 616 | case 0x7d : |
lolpcc | 1:6877bb99aa17 | 617 | return('7'); |
lolpcc | 1:6877bb99aa17 | 618 | case 0x7b : |
lolpcc | 1:6877bb99aa17 | 619 | return('4'); |
lolpcc | 1:6877bb99aa17 | 620 | case 0x77 : |
lolpcc | 1:6877bb99aa17 | 621 | return('1'); |
lolpcc | 1:6877bb99aa17 | 622 | default : |
lolpcc | 1:6877bb99aa17 | 623 | lprintf("Strange key value passed 0X%02x\n\r",d); |
lolpcc | 1:6877bb99aa17 | 624 | return(0); |
lolpcc | 1:6877bb99aa17 | 625 | } |
lolpcc | 0:9edfcca7cd25 | 626 | } |