static void draw_time(struct tm* t, GContext* ctx) { int hour = get_hour(t); int mintueY = MINUTE_00_Y + t->tm_min * (MINUTE_59_Y - MINUTE_00_Y) / 60; if (hour == 1) { //view 1 put_digit(hour, ctx, VIEW_1_FIRST_DIGIT_X, VIEW_1_SEG_WIDTH, mintueY); } else if (hour <= 9) { //view 2 put_digit(hour, ctx, VIEW_2_FIRST_DIGIT_X, VIEW_2_SEG_WIDTH, mintueY); } else if (hour == 11) { //view 3 put_digit(1, ctx, VIEW_3_FIRST_DIGIT_X, VIEW_3_SEG_WIDTH, mintueY); put_digit(1, ctx, VIEW_3_SECOND_DIGIT_X, VIEW_3_SEG_WIDTH, mintueY); } else if (hour <= 19) { //view 4 put_digit(1, ctx, VIEW_4_FIRST_DIGIT_X, VIEW_4_SEG_WIDTH, mintueY); put_digit(hour % 10, ctx, VIEW_4_SECOND_DIGIT_X, VIEW_4_SEG_WIDTH, mintueY); } else if (hour == 21) { //view 5 put_digit(2, ctx, VIEW_5_FIRST_DIGIT_X, VIEW_5_SEG_WIDTH, mintueY); put_digit(1, ctx, VIEW_5_SECOND_DIGIT_X, VIEW_5_SEG_WIDTH, mintueY); } else { //view 6 put_digit(2, ctx, VIEW_6_FIRST_DIGIT_X, VIEW_6_SEG_WIDTH, mintueY); put_digit(hour % 10, ctx, VIEW_6_SECOND_DIGIT_X, VIEW_6_SEG_WIDTH, mintueY); } }
void printTimer(uint8_t x, uint8_t y, t_timer tim){ lcd_gotoxy(x,y); if (tim.H > 9){ put_digit((tim.H / 10)); } put_digit((tim.H % 10)); lcd_putchar(':'); put_digit((tim.M / 10)); put_digit((tim.M % 10)); lcd_putchar(':'); put_digit((tim.S / 10)); if (tim.H < 10){ put_digit((tim.S % 10)); } }
/* * Print a given value <v> as a decimal integer. * NOTE: It's quite buggy with big(ger) numbers. */ static inline void putd(char **buf, size_t space_left, int v) { int out[10 /* ceil(log10(2^32)) */] = {0}; int i = 0; if (v == 0) { putch(buf, space_left, '0'); return; } if (v < 0) { v = -v; putch(buf, space_left, '-'); } for (; v > 0; v /= 10) out[i++] = v % 10; i--; while (i >= 0) put_digit(buf, space_left, out[i--]); }