Advanced Simon Says

Dependencies:   PinDetect mbed

Committer:
joon874
Date:
Mon Nov 02 00:39:04 2015 +0000
Revision:
0:55ca2ac95962
Advanced Simon Says

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joon874 0:55ca2ac95962 1 #include "data.h"
joon874 0:55ca2ac95962 2 #define addr (0x78)
joon874 0:55ca2ac95962 3
joon874 0:55ca2ac95962 4 #if defined(TARGET_WIZwiki_W7500)
joon874 0:55ca2ac95962 5 #define SDA PA_10
joon874 0:55ca2ac95962 6 #define SCL PA_9
joon874 0:55ca2ac95962 7 #endif
joon874 0:55ca2ac95962 8
joon874 0:55ca2ac95962 9 I2C i2c(SDA, SCL);
joon874 0:55ca2ac95962 10
joon874 0:55ca2ac95962 11 void send_cmd(uint8_t cmd){
joon874 0:55ca2ac95962 12 char c[2] ={0x00,cmd};
joon874 0:55ca2ac95962 13
joon874 0:55ca2ac95962 14 i2c.write(addr,c,2,1);
joon874 0:55ca2ac95962 15
joon874 0:55ca2ac95962 16 }
joon874 0:55ca2ac95962 17
joon874 0:55ca2ac95962 18 void send_data(uint8_t data){
joon874 0:55ca2ac95962 19 char c[2] = {0x40,data};
joon874 0:55ca2ac95962 20 i2c.write(addr,c,2,1);
joon874 0:55ca2ac95962 21
joon874 0:55ca2ac95962 22 }
joon874 0:55ca2ac95962 23
joon874 0:55ca2ac95962 24 void init(void)
joon874 0:55ca2ac95962 25 {
joon874 0:55ca2ac95962 26 wait_ms(5); // TBD
joon874 0:55ca2ac95962 27
joon874 0:55ca2ac95962 28 send_cmd(0xae); // display off
joon874 0:55ca2ac95962 29 send_cmd(0xd5); // display divide ratio/osc. freq. ratio
joon874 0:55ca2ac95962 30 send_cmd(0x80);
joon874 0:55ca2ac95962 31 send_cmd(0xa8); // multiplex ation mode: 63
joon874 0:55ca2ac95962 32 send_cmd(0x3f);
joon874 0:55ca2ac95962 33 send_cmd(0xd3); // set display offset
joon874 0:55ca2ac95962 34 send_cmd(0x00);
joon874 0:55ca2ac95962 35 send_cmd(0x40); // set display start line
joon874 0:55ca2ac95962 36 send_cmd(0x8d); // set display offset
joon874 0:55ca2ac95962 37 send_cmd(0x14);
joon874 0:55ca2ac95962 38 send_cmd(0xa1); // segment remap
joon874 0:55ca2ac95962 39 send_cmd(0xc8); // set COM output scan direction
joon874 0:55ca2ac95962 40 send_cmd(0xda); // common pads hardware: alternative
joon874 0:55ca2ac95962 41 send_cmd(0x12);
joon874 0:55ca2ac95962 42 send_cmd(0x81); // contrast control
joon874 0:55ca2ac95962 43 send_cmd(0xcf);
joon874 0:55ca2ac95962 44 send_cmd(0xd9); // set pre-charge period
joon874 0:55ca2ac95962 45 send_cmd(0xf1);
joon874 0:55ca2ac95962 46 send_cmd(0xdb); // VCOM deselect level mode
joon874 0:55ca2ac95962 47 send_cmd(0x40); // set vcomh = 0.83 * VCC
joon874 0:55ca2ac95962 48 send_cmd(0xa4); // set entire display on/off
joon874 0:55ca2ac95962 49 send_cmd(0xa6); // set normal display
joon874 0:55ca2ac95962 50 send_cmd(0xaf); // set display on
joon874 0:55ca2ac95962 51 }
joon874 0:55ca2ac95962 52
joon874 0:55ca2ac95962 53 // set position (x, 8*y)
joon874 0:55ca2ac95962 54 void locate(int x, int y){
joon874 0:55ca2ac95962 55 send_cmd(0xb0+y);
joon874 0:55ca2ac95962 56 send_cmd(((x&0xf0)>>4)|0x10);
joon874 0:55ca2ac95962 57 send_cmd((x&0x0f)|0x01);
joon874 0:55ca2ac95962 58 }
joon874 0:55ca2ac95962 59
joon874 0:55ca2ac95962 60 void cls(void){
joon874 0:55ca2ac95962 61 int x, y;
joon874 0:55ca2ac95962 62 for(y = 0; y < 8; y++){
joon874 0:55ca2ac95962 63 locate(0, y);
joon874 0:55ca2ac95962 64 for(x = 0; x < 128; x++) send_data(0x00);
joon874 0:55ca2ac95962 65 }
joon874 0:55ca2ac95962 66 }
joon874 0:55ca2ac95962 67
joon874 0:55ca2ac95962 68
joon874 0:55ca2ac95962 69
joon874 0:55ca2ac95962 70 void OLED_ShowStr(unsigned char x, unsigned char y, char ch[], unsigned char TextSize)
joon874 0:55ca2ac95962 71 {
joon874 0:55ca2ac95962 72 unsigned char c = 0,i = 0,j = 0;
joon874 0:55ca2ac95962 73 switch(TextSize)
joon874 0:55ca2ac95962 74 {
joon874 0:55ca2ac95962 75 case 1:
joon874 0:55ca2ac95962 76 {
joon874 0:55ca2ac95962 77 while(ch[j] != '\0')
joon874 0:55ca2ac95962 78 {
joon874 0:55ca2ac95962 79 c = ch[j] - 32;
joon874 0:55ca2ac95962 80 if(x > 126)
joon874 0:55ca2ac95962 81 {
joon874 0:55ca2ac95962 82 x = 0;
joon874 0:55ca2ac95962 83 y++;
joon874 0:55ca2ac95962 84 }
joon874 0:55ca2ac95962 85 locate(x,y);
joon874 0:55ca2ac95962 86 for(i=0;i<6;i++)
joon874 0:55ca2ac95962 87 send_data(F6x8[c][i]);
joon874 0:55ca2ac95962 88 x += 6;
joon874 0:55ca2ac95962 89 j++;
joon874 0:55ca2ac95962 90 }
joon874 0:55ca2ac95962 91 }break;
joon874 0:55ca2ac95962 92 case 2:
joon874 0:55ca2ac95962 93 {
joon874 0:55ca2ac95962 94 while(ch[j] != '\0')
joon874 0:55ca2ac95962 95 {
joon874 0:55ca2ac95962 96 c = ch[j] - 32;
joon874 0:55ca2ac95962 97 if(x > 120)
joon874 0:55ca2ac95962 98 {
joon874 0:55ca2ac95962 99 x = 0;
joon874 0:55ca2ac95962 100 y++;
joon874 0:55ca2ac95962 101 }
joon874 0:55ca2ac95962 102 locate(x,y);
joon874 0:55ca2ac95962 103 for(i=0;i<8;i++)
joon874 0:55ca2ac95962 104 send_data(F8X16[c*16+i]);
joon874 0:55ca2ac95962 105 locate(x,y+1);
joon874 0:55ca2ac95962 106 for(i=0;i<8;i++)
joon874 0:55ca2ac95962 107 send_data(F8X16[c*16+i+8]);
joon874 0:55ca2ac95962 108 x += 8;
joon874 0:55ca2ac95962 109 j++;
joon874 0:55ca2ac95962 110 }
joon874 0:55ca2ac95962 111 }break;
joon874 0:55ca2ac95962 112 }
joon874 0:55ca2ac95962 113 }
joon874 0:55ca2ac95962 114 void OLED_DrawBMP(unsigned char x0,
joon874 0:55ca2ac95962 115 unsigned char y0,unsigned char x1,
joon874 0:55ca2ac95962 116 unsigned char y1,unsigned char BMP[])
joon874 0:55ca2ac95962 117 {
joon874 0:55ca2ac95962 118 unsigned int j=0;
joon874 0:55ca2ac95962 119 unsigned char x,y;
joon874 0:55ca2ac95962 120
joon874 0:55ca2ac95962 121 if(y1%8==0)
joon874 0:55ca2ac95962 122 y = y1/8;
joon874 0:55ca2ac95962 123 else
joon874 0:55ca2ac95962 124 y = y1/8 + 1;
joon874 0:55ca2ac95962 125 for(y=y0;y<y1;y++)
joon874 0:55ca2ac95962 126 {
joon874 0:55ca2ac95962 127 locate(x0,y);
joon874 0:55ca2ac95962 128 for(x=x0;x<x1;x++)
joon874 0:55ca2ac95962 129 {
joon874 0:55ca2ac95962 130 send_data(BMP[j++]);
joon874 0:55ca2ac95962 131 }
joon874 0:55ca2ac95962 132 }
joon874 0:55ca2ac95962 133 }
joon874 0:55ca2ac95962 134 //==========================================================//
joon874 0:55ca2ac95962 135 // Prints a display big number (96 bytes) in coordinates X Y,
joon874 0:55ca2ac95962 136 // being multiples of 8. This means we have 16 COLS (0-15)
joon874 0:55ca2ac95962 137 // and 8 ROWS (0-7).
joon874 0:55ca2ac95962 138 void printBigNumber(unsigned char s, int x, int y)
joon874 0:55ca2ac95962 139 {
joon874 0:55ca2ac95962 140 locate(x,y);
joon874 0:55ca2ac95962 141 int salto=0;
joon874 0:55ca2ac95962 142 for(int i=0; i<96; i++) {
joon874 0:55ca2ac95962 143 if(s == ' ') {
joon874 0:55ca2ac95962 144 send_data(0);
joon874 0:55ca2ac95962 145 } else
joon874 0:55ca2ac95962 146 send_data(bigNumbers[s-0x30][i]);
joon874 0:55ca2ac95962 147
joon874 0:55ca2ac95962 148 if(salto == 23) {
joon874 0:55ca2ac95962 149 salto = 0;
joon874 0:55ca2ac95962 150 x++;
joon874 0:55ca2ac95962 151 locate(x,y);
joon874 0:55ca2ac95962 152 } else {
joon874 0:55ca2ac95962 153 salto++;
joon874 0:55ca2ac95962 154 }
joon874 0:55ca2ac95962 155 }
joon874 0:55ca2ac95962 156 }
joon874 0:55ca2ac95962 157 void printBigTime(char *s)
joon874 0:55ca2ac95962 158 {
joon874 0:55ca2ac95962 159
joon874 0:55ca2ac95962 160 int y=0;
joon874 0:55ca2ac95962 161 int lon = strlen(s);
joon874 0:55ca2ac95962 162 if(lon == 6) {
joon874 0:55ca2ac95962 163 y = 0;
joon874 0:55ca2ac95962 164 } else if (lon == 5) {
joon874 0:55ca2ac95962 165 y = 3;
joon874 0:55ca2ac95962 166 } else if (lon == 4) {
joon874 0:55ca2ac95962 167 y = 6;
joon874 0:55ca2ac95962 168 }
joon874 0:55ca2ac95962 169 else if(lon == 3) {
joon874 0:55ca2ac95962 170 y = 9;
joon874 0:55ca2ac95962 171 } else if (lon == 2) {
joon874 0:55ca2ac95962 172 y = 12;
joon874 0:55ca2ac95962 173 } else if (lon == 1) {
joon874 0:55ca2ac95962 174 y = 15;
joon874 0:55ca2ac95962 175 }
joon874 0:55ca2ac95962 176
joon874 0:55ca2ac95962 177 int x = 2;
joon874 0:55ca2ac95962 178 while(*s) {
joon874 0:55ca2ac95962 179 printBigNumber(*s, x, y);
joon874 0:55ca2ac95962 180
joon874 0:55ca2ac95962 181 y+=3;
joon874 0:55ca2ac95962 182 x=2;
joon874 0:55ca2ac95962 183 locate(x,y);
joon874 0:55ca2ac95962 184 *s++;
joon874 0:55ca2ac95962 185 }
joon874 0:55ca2ac95962 186 }
joon874 0:55ca2ac95962 187 void LED_P23x32Str(unsigned char x, unsigned char y, char ch[])
joon874 0:55ca2ac95962 188 {
joon874 0:55ca2ac95962 189 unsigned char c = 0, i = 0, j = 0, k = 0;
joon874 0:55ca2ac95962 190 while (ch[j] != '\0')
joon874 0:55ca2ac95962 191 {
joon874 0:55ca2ac95962 192 c = ch[j] - '0';
joon874 0:55ca2ac95962 193 if (x > 120) {
joon874 0:55ca2ac95962 194 x = 0;
joon874 0:55ca2ac95962 195 y++;
joon874 0:55ca2ac95962 196 }
joon874 0:55ca2ac95962 197
joon874 0:55ca2ac95962 198 for (k = 0; k < 4; k++) {
joon874 0:55ca2ac95962 199 locate(x, y + k);
joon874 0:55ca2ac95962 200 for (i = 0; i < 23; i++) {
joon874 0:55ca2ac95962 201 send_data(F23x32[c * 23 * 4 + k * 23 + i]);
joon874 0:55ca2ac95962 202 }
joon874 0:55ca2ac95962 203 }
joon874 0:55ca2ac95962 204 x += 25;
joon874 0:55ca2ac95962 205 j++;
joon874 0:55ca2ac95962 206 }
joon874 0:55ca2ac95962 207 }
joon874 0:55ca2ac95962 208