The Smart Watch using SSD1306 and I2C. The Time obtain using SNTP protocol from NTP Server.

Dependencies:   SNTPClinet WIZnetInterface mbed-src

Fork of SSD1306_smart_watch by eunkyoung kim

Committer:
eunkyoungkim
Date:
Mon Jun 29 04:27:44 2015 +0000
Revision:
2:19e8cd8a0e0c
Parent:
0:6e799e373101
modify SNTPClient

Who changed what in which revision?

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