SSD1306(OLED) Figure Test

Dependencies:   mbed

Committer:
eunkyoungkim
Date:
Wed Aug 12 05:42:29 2015 +0000
Revision:
0:bfb5421d4a36
SSD1306(OLED) figure Test

Who changed what in which revision?

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