static void pingPong (int lcd, int cols) { static int position = 0 ; static int dir = 0 ; if (dir == 0) // Setup { dir = 1 ; lcdPosition (lcdHandle, 0, 3) ; lcdPutchar (lcdHandle, '*') ; return ; } lcdPosition (lcdHandle, position, 3) ; lcdPutchar (lcdHandle, ' ') ; position += dir ; if (position == cols) { dir = -1 ; --position ; } if (position < 0) { dir = 1 ; ++position ; } lcdPosition (lcdHandle, position, 3) ; lcdPutchar (lcdHandle, '#') ; }
int main(void) { int fd; int i; if (wiringPiSetup() == -1){ exit(1); } fd = lcdInit(2,16,4, 2,3, 6,5,4,1,0,0,0,0); //see /usr/local/include/lcd.h printf("%d", fd); if (fd == -1){ printf("lcdInit 1 failed\n") ; return 1; } sleep(1); lcdClear(fd); lcdPosition(fd, 0, 0); lcdPuts(fd, "Welcom To--->"); lcdPosition(fd, 0, 1); lcdPuts(fd, " sunfounder.com"); sleep(1); lcdClear(fd); while(1){ for(i=0;i<sizeof(Buf)-1;i++){ lcdPosition(fd, i, 1); lcdPutchar(fd, *(Buf+i)); delay(200); } lcdPosition(fd, 0, 1); lcdClear(fd); sleep(0.5); for(i=0; i<16; i++){ lcdPosition(fd, i, 0); lcdPutchar(fd, *(myBuf+i)); delay(100); } } return 0; }
int lcdPutBigSpecialChar(int col, int row, char charToPrint) { int font[][9] = { //' ' { 254, 254, 254, }, //':' { 3, 254, 2, }, }; int index = -1; switch(charToPrint) { case ' ': index = 0; break; case ':': index = 1; break; } if(index >= 0) { // the number to screen at the position specified. lcdPosition(lcdHandle, col, row); // LINE 1 lcdPutchar (lcdHandle, font[index][0]); lcdPosition(lcdHandle, col, row + 1); //LINE 2 lcdPutchar (lcdHandle, font[index][1]); lcdPosition(lcdHandle, col, row + 2); //LINE 3 lcdPutchar (lcdHandle, font[index][2]); } return 0; }
static ERL_NIF_TERM lcd_put_char_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { int handle, character; if (!enif_get_int(env, argv[0], &handle) || !enif_get_int(env, argv[1], &character)) { return enif_make_badarg(env); } lcdPutchar(handle, (uint8_t)character); return atom_ok; }
void lcdPutsNumber (uint32 number) { char *p; p = buf; do { *p++ = hexChars[number % 10]; } while (number /= 10); //*p++ = '\0'; do { //outputFnk(*--p); lcdPutchar (*--p); } while (p > buf); }
/***************************************************************************** * * Description: * A process entry function * ****************************************************************************/ void displayStartupSequence(void) { tU32 step = 0; tU8 anyKey = KEY_NOTHING; for(step=0; step<=48; step++) { anyKey = checkKey(); if (anyKey != KEY_NOTHING) break; switch(step) { case 0: lcdColor(0xfd,0x00); lcdClrscr(); break; case 1: lcdIcon(0, 0, 130, 90, _fun_0_130x90c[2], _fun_0_130x90c[3], &_fun_0_130x90c[4]); break; case 2: lcdGotoxy(8,100); lcdPutchar('H'); break; case 3: lcdPutchar('A'); break; case 4: lcdPutchar('V'); break; case 5: lcdPutchar('E'); lcdIcon(0, 0, 130, 90, _fun_1_130x90c[2], _fun_1_130x90c[3], &_fun_1_130x90c[4]); break; case 6: lcdGotoxy(8+(8*4),100); lcdPutchar(' '); break; case 7: lcdPutchar('S'); break; case 8: lcdPutchar('O'); break; case 9: lcdPutchar('M'); lcdIcon(0, 0, 130, 90, _fun_0_130x90c[2], _fun_0_130x90c[3], &_fun_0_130x90c[4]); break; case 10: lcdGotoxy(8+(8*8),100); lcdPutchar('E'); break; case 11: lcdPutchar(' '); break; case 12: lcdPutchar('F'); break; case 13: lcdPutchar('U'); lcdIcon(0, 0, 130, 90, _fun_1_130x90c[2], _fun_1_130x90c[3], &_fun_1_130x90c[4]); break; case 14: lcdGotoxy(8+(8*12),100); lcdPutchar('N'); break; case 15: lcdPutchar('!'); break; case 17: case 25: case 33: case 41: lcdIcon(0, 0, 130, 90, _fun_0_130x90c[2], _fun_0_130x90c[3], &_fun_0_130x90c[4]); break; case 21: case 29: case 37: case 45: lcdIcon(0, 0, 130, 90, _fun_1_130x90c[2], _fun_1_130x90c[3], &_fun_1_130x90c[4]); break; default: break; } osSleep(15); } if (anyKey == KEY_NOTHING) for(step=0; step<=257; step++) { anyKey = checkKey(); if (anyKey != KEY_NOTHING) break; switch(step) { case 0: lcdColor(0xff,0x00); lcdClrscr(); break; case 1: lcdIcon(16, 0, 97, 60, _ea_97x60c[2], _ea_97x60c[3], &_ea_97x60c[4]); break; case 2: lcdGotoxy(16,66); lcdPutchar('D'); break; case 3: lcdPutchar('e'); break; case 4: lcdPutchar('s'); break; case 5: lcdPutchar('i'); break; case 6: lcdPutchar('g'); break; case 7: lcdPutchar('n'); break; case 8: lcdPutchar('e'); break; case 9: lcdPutchar('d'); break; case 10: lcdPutchar(' '); break; case 11: lcdPutchar('a'); break; case 12: lcdPutchar('n'); break; case 13: lcdPutchar('d'); break; case 14: lcdGotoxy(20,80); lcdPutchar('p'); break; case 15: lcdPutchar('r'); break; case 16: lcdPutchar('o'); break; case 17: lcdPutchar('d'); break; case 18: lcdPutchar('u'); break; case 19: lcdPutchar('c'); break; case 20: lcdPutchar('e'); break; case 21: lcdPutchar('d'); break; case 22: lcdPutchar(' '); break; case 23: lcdPutchar('b'); break; case 24: lcdPutchar('y'); break; case 25: lcdGotoxy(0,96); lcdPutchar('E'); break; case 26: lcdPutchar('m'); break; case 27: lcdPutchar('b'); break; case 28: lcdPutchar('e'); break; case 29: lcdPutchar('d'); break; case 30: lcdPutchar('d'); break; case 31: lcdPutchar('e'); break; case 32: lcdPutchar('d'); break; case 33: lcdPutchar(' '); break; case 34: lcdPutchar('A'); break; case 35: lcdPutchar('r'); break; case 36: lcdPutchar('t'); break; case 37: lcdPutchar('i'); break; case 38: lcdPutchar('s'); break; case 39: lcdPutchar('t'); break; case 40: lcdPutchar('s'); break; case 41: lcdGotoxy(32,112); lcdPutchar('('); break; case 42: lcdPutchar('C'); break; case 43: lcdPutchar(')'); break; case 44: lcdPutchar(' '); break; case 45: lcdPutchar('2'); break; case 46: lcdPutchar('0'); break; case 47: lcdPutchar('0'); break; case 48: lcdPutchar('6'); break; case 60: lcdClrscr(); lcdIcon(0, 0, 128, 39, _future_128x39c[2], _future_128x39c[3], &_future_128x39c[4]); break; case 61: lcdGotoxy(8,44); lcdPutchar('i'); break; case 62: lcdPutchar('n'); break; case 63: lcdPutchar(' '); break; case 64: lcdPutchar('c'); break; case 65: lcdPutchar('o'); break; case 66: lcdPutchar('o'); break; case 67: lcdPutchar('p'); break; case 68: lcdPutchar('e'); break; case 69: lcdPutchar('r'); break; case 70: lcdPutchar('a'); break; case 71: lcdPutchar('t'); break; case 72: lcdPutchar('i'); break; case 73: lcdPutchar('o'); break; case 74: lcdPutchar('n'); break; case 75: lcdGotoxy(20,60); lcdPutchar('w'); break; case 76: lcdPutchar('i'); break; case 77: lcdPutchar('t'); break; case 78: lcdPutchar('h'); break; case 79: lcdPutchar(' '); break; case 80: lcdPutchar('F'); break; case 81: lcdPutchar('u'); break; case 82: lcdPutchar('t'); break; case 83: lcdPutchar('u'); break; case 84: lcdPutchar('r'); break; case 85: lcdPutchar('e'); break; case 86: lcdGotoxy(4,76); lcdPutchar('E'); break; case 87: lcdPutchar('l'); break; case 88: lcdPutchar('e'); break; case 89: lcdPutchar('c'); break; case 90: lcdPutchar('t'); break; case 91: lcdPutchar('r'); break; case 92: lcdPutchar('o'); break; case 93: lcdPutchar('n'); break; case 94: lcdPutchar('i'); break; case 95: lcdPutchar('c'); break; case 96: lcdPutchar('s'); break; case 97: lcdPutchar(' '); break; case 98: lcdPutchar('a'); break; case 99: lcdPutchar('n'); break; case 100: lcdPutchar('d'); break; case 105: lcdIcon(3, 98, 122, 25, _philips_122x25c[2], _philips_122x25c[3], &_philips_122x25c[4]); break; case 120: lcdClrscr(); lcdIcon(22, 3, 85, 40, _segger_85x40c[2], _segger_85x40c[3], &_segger_85x40c[4]); break; case 121: lcdGotoxy(12,48); lcdPutchar('E'); break; case 122: lcdPutchar('m'); break; case 123: lcdPutchar('b'); break; case 124: lcdPutchar('e'); break; case 125: lcdPutchar('d'); break; case 126: lcdPutchar('d'); break; case 127: lcdPutchar('e'); break; case 128: lcdPutchar('d'); break; case 129: lcdPutchar(' '); break; case 130: lcdPutchar('J'); break; case 131: lcdPutchar('T'); break; case 132: lcdPutchar('A'); break; case 133: lcdPutchar('G'); break; case 134: lcdGotoxy(40,64); lcdPutchar('J'); break; case 135: lcdPutchar('-'); break; case 136: lcdPutchar('l'); break; case 137: lcdPutchar('i'); break; case 138: lcdPutchar('n'); break; case 139: lcdPutchar('k'); break; case 140: lcdGotoxy(20,80); lcdPutchar('t'); break; case 141: lcdPutchar('e'); break; case 142: lcdPutchar('c'); break; case 143: lcdPutchar('h'); break; case 144: lcdPutchar('n'); break; case 145: lcdPutchar('o'); break; case 146: lcdPutchar('l'); break; case 147: lcdPutchar('o'); break; case 148: lcdPutchar('g'); break; case 149: lcdPutchar('y'); break; case 150: lcdGotoxy(16,94); lcdPutchar('l'); break; case 151: lcdPutchar('i'); break; case 152: lcdPutchar('c'); break; case 153: lcdPutchar('e'); break; case 154: lcdPutchar('n'); break; case 155: lcdPutchar('s'); break; case 156: lcdPutchar('e'); break; case 157: lcdPutchar('d'); break; case 158: lcdPutchar(' '); break; case 159: lcdPutchar('b'); break; case 160: lcdPutchar('y'); break; case 161: lcdGotoxy(8,110); lcdPutchar('w'); break; case 162: lcdPutchar('w'); break; case 163: lcdPutchar('w'); break; case 164: lcdPutchar('.'); break; case 165: lcdPutchar('s'); break; case 166: lcdPutchar('e'); break; case 167: lcdPutchar('g'); break; case 168: lcdPutchar('g'); break; case 169: lcdPutchar('e'); break; case 170: lcdPutchar('r'); break; case 171: lcdPutchar('.'); break; case 172: lcdPutchar('c'); break; case 173: lcdPutchar('o'); break; case 174: lcdPutchar('m'); break; case 190: lcdColor(0xff,0x00); lcdClrscr(); break; case 191: lcdIcon(16, 0, 97, 60, _ea_97x60c[2], _ea_97x60c[3], &_ea_97x60c[4]); break; case 192: lcdGotoxy(0,66); lcdPutchar('P'); break; case 193: lcdPutchar('r'); break; case 194: lcdPutchar('o'); break; case 195: lcdPutchar('g'); break; case 196: lcdPutchar('r'); break; case 197: lcdPutchar('a'); break; case 198: lcdPutchar('m'); break; case 199: lcdPutchar(' '); break; case 200: lcdPutchar('v'); break; case 201: lcdPutchar('e'); break; case 202: lcdPutchar('r'); break; case 203: lcdPutchar(':'); break; case 204: lcdPutchar('1'); break; case 205: lcdPutchar('.'); break; case 206: lcdPutchar('8'); break; case 207: lcdGotoxy(20,80); lcdPutchar('C'); break; case 208: lcdPutchar('h'); break; case 209: lcdPutchar('e'); break; case 210: lcdPutchar('c'); break; case 211: lcdPutchar('k'); break; case 212: lcdPutchar(' '); break; case 213: lcdPutchar('f'); break; case 214: lcdPutchar('o'); break; case 215: lcdPutchar('r'); break; case 216: lcdGotoxy(8,96); lcdPutchar('u'); break; case 217: lcdPutchar('p'); break; case 218: lcdPutchar('d'); break; case 219: lcdPutchar('a'); break; case 220: lcdPutchar('t'); break; case 221: lcdPutchar('e'); break; case 222: lcdPutchar('s'); break; case 223: lcdPutchar(' '); break; case 224: lcdPutchar('a'); break; case 225: lcdPutchar('t'); break; case 226: lcdPutchar(' '); break; case 227: lcdPutchar('t'); break; case 228: lcdPutchar('h'); break; case 229: lcdPutchar('e'); break; case 230: lcdGotoxy(8,112); lcdPutchar('s'); break; case 231: lcdPutchar('u'); break; case 232: lcdPutchar('p'); break; case 233: lcdPutchar('p'); break; case 234: lcdPutchar('o'); break; case 235: lcdPutchar('r'); break; case 236: lcdPutchar('t'); break; case 237: lcdPutchar(' '); break; case 238: lcdPutchar('p'); break; case 239: lcdPutchar('a'); break; case 240: lcdPutchar('g'); break; case 241: lcdPutchar('e'); break; case 242: lcdPutchar('.'); break; default: break; } osSleep(10); } lcdColor(0x00,0x00); lcdClrscr(); }
int main (int argc, char *argv[]) { int i ; int lcd ; int bits, rows, cols ; struct tm *t ; time_t tim ; char buf [32] ; if (argc != 4) return usage (argv [0]) ; printf ("Raspberry Pi LCD test\n") ; printf ("=====================\n") ; bits = atoi (argv [1]) ; cols = atoi (argv [2]) ; rows = atoi (argv [3]) ; if (!((rows == 1) || (rows == 2) || (rows == 4))) { fprintf (stderr, "%s: rows must be 1, 2 or 4\n", argv [0]) ; return EXIT_FAILURE ; } if (!((cols == 16) || (cols == 20))) { fprintf (stderr, "%s: cols must be 16 or 20\n", argv [0]) ; return EXIT_FAILURE ; } wiringPiSetup () ; if (bits == 4) lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ; else lcdHandle = lcdInit (rows, cols, 8, 11, 10, 0,1,2,3,4,5,6,7) ; if (lcdHandle < 0) { fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ; return -1 ; } lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ; lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; waitForEnter () ; if (rows > 1) { lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; if (rows == 4) { lcdPosition (lcdHandle, 0, 2) ; for (i = 0 ; i < ((cols - 1) / 2) ; ++i) lcdPuts (lcdHandle, "=-") ; lcdPuts (lcdHandle, "=3") ; lcdPosition (lcdHandle, 0, 3) ; for (i = 0 ; i < ((cols - 1) / 2) ; ++i) lcdPuts (lcdHandle, "-=") ; lcdPuts (lcdHandle, "-4") ; } } waitForEnter () ; lcdCharDef (lcdHandle, 2, newChar) ; lcdClear (lcdHandle) ; lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "User Char: ") ; lcdPutchar (lcdHandle, 2) ; lcdCursor (lcdHandle, TRUE) ; lcdCursorBlink (lcdHandle, TRUE) ; waitForEnter () ; lcdCursor (lcdHandle, FALSE) ; lcdCursorBlink (lcdHandle, FALSE) ; lcdClear (lcdHandle) ; for (;;) { scrollMessage (0, cols) ; if (rows == 1) continue ; tim = time (NULL) ; t = localtime (&tim) ; sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ; lcdPosition (lcdHandle, (cols - 8) / 2, 1) ; lcdPuts (lcdHandle, buf) ; if (rows == 2) continue ; sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ; lcdPosition (lcdHandle, (cols - 10) / 2, 2) ; lcdPuts (lcdHandle, buf) ; pingPong (lcd, cols) ; } return 0 ; }
/***************************************************************************** * * Description: * Write/draw (null-terminated) string of character at current xy-position * ****************************************************************************/ void lcdPuts (char *s) { while (*s != '\0') lcdPutchar (*s++); }
/***************************************************************************** * * Description: * Write/draw (null-terminated) string of character at current xy-position * ****************************************************************************/ void lcdPuts(const tU8 *s) { while(*s != '\0') lcdPutchar(*s++); }
extern int8_t writeLCD(const int fd_lcd, const double value, const char mode, const struct tm *time) { const char *FNAME = "writeLCD()"; char *shour = NULL; char *smin = NULL; char *ssec = NULL; char *svalue = NULL; shour = (char *) alloca(sizeof(char)*3 + 1); smin = (char *) alloca(sizeof(char)*3 + 1); ssec = (char *) alloca(sizeof(char)*3 + 1); svalue = (char *) alloca(sizeof(char)*7 + 1); snprintf(shour, 3, "%02d", time->tm_hour); snprintf(smin, 3, "%02d", time->tm_min); snprintf(ssec, 3, "%02d", time->tm_sec); snprintf(svalue, 7, "%4.1f", value); fprintf(stdout, "DEBUG: %s: hour=%s min=%s sec=%s mode=%c value=%s\n", FNAME, shour, smin, ssec, mode, svalue); /* switch off backlight */ lcdDisplay(fd_lcd, 1); /* set the cursor position: column 0-15, row 0-1*/ /* set cursor top row, position 0 */ lcdPosition(fd_lcd, 0, 0); /* clear the screen (fill with blanks) */ lcdPuts(fd_lcd, " "); /* set cursor bottom row, position 0 */ lcdPosition(fd_lcd, 0, 1); /* clear the screen (fill with blanks) */ lcdPuts(fd_lcd, " "); lcdPosition(fd_lcd, 0, 0); lcdPuts(fd_lcd, shour); lcdPutchar(fd_lcd, ':'); lcdPuts(fd_lcd, smin); lcdPutchar(fd_lcd, ':'); lcdPuts(fd_lcd, ssec); lcdPosition(fd_lcd, 0, 1); switch (mode) { case 't': lcdPuts(fd_lcd, "Temperatur "); lcdPosition(fd_lcd, 11, 1); snprintf(svalue, 5, "%2.1f", value); lcdPrintf(fd_lcd, svalue); break; case 'h': lcdPuts(fd_lcd, "Feuchte "); lcdPosition(fd_lcd, 8, 1); snprintf(svalue, 3, "%2.0f", value); lcdPrintf(fd_lcd, svalue); lcdPutchar(fd_lcd, '%'); break; case 'p': lcdPuts(fd_lcd, "Druck "); lcdPosition(fd_lcd, 6, 1); snprintf(svalue, 5, "%4.0f", value); lcdPrintf(fd_lcd, svalue); lcdPuts(fd_lcd, " HPa"); break; } return 0; }
int lcdPutBigNumber(int col, int row, int numberToPrint) { int font[][9] = { //0 { 255,2,1, 255,254,255, 4,3,255, }, //1 { 2,1,254, 254,255,254, 3,255,3, }, //2 { 2,2,1, 0,6,5, 4,3,3, }, //3 { 2,2,1, 254,2,1, 3,3,255, }, //4 { 255,254,1, 5,5,255, 254,254,255, }, //5 { 255,2,2, 2,2,1, 3,3,255, }, //6 { 255,2,2, 255,2,7, 4,3,255, }, //7 { 2,2,255, 254,0,2, 254,255,254, }, //8 { 255,2,1, 255,2,255, 4,3,255, }, //9 { 255,2,1, 2,2,255, 3,3,255, }, }; // the number to screen at the position specified. lcdPosition(lcdHandle, col, row); // LINE 1 lcdPutchar (lcdHandle, font[numberToPrint][0]); lcdPutchar (lcdHandle, font[numberToPrint][1]); lcdPutchar (lcdHandle, font[numberToPrint][2]); lcdPosition(lcdHandle, col, row + 1); //LINE 2 lcdPutchar (lcdHandle, font[numberToPrint][3]); lcdPutchar (lcdHandle, font[numberToPrint][4]); lcdPutchar (lcdHandle, font[numberToPrint][5]); lcdPosition(lcdHandle, col, row + 2); //LINE 3 lcdPutchar (lcdHandle, font[numberToPrint][6]); lcdPutchar (lcdHandle, font[numberToPrint][7]); lcdPutchar (lcdHandle, font[numberToPrint][8]); //int big4_1[] = {255,2,1, //0 // 2,1,254, //1 // 2,2,1, //2 // 2,2,1, //3 // 255,254,1, //4 // 255,2,2, //5 // 255,2,2, //6 // 2,2,255, //7 // 255,2,1, //8 // 255,2,1, //9 // 254,3,254, //10 (:) // 254,254,254, //11 ( ) // }; //int big4_2[] = {255,254,255, //0 // 254,255,254, //1 // 0,6,5, //2 // 254,2,1, //3 // 5,5,255, //4 // 2,2,1, //5 // 255,2,7, //6 // 254,0,2, //7 // 255,2,255, //8 // 2,2,255, //9 // 254,254,254, //10 (:) // 254,254,254, //11 ( ) // }; //int big4_3[] = {4,3,255, //0 // 3,255,3, //1 // 4,3,3, //2 // 3,3,255, //3 // 254,254,255, //4 // 3,3,255, //5 // 4,3,255, //6 // 254,255,254, //7 // 4,3,255, //8 // 3,3,255, //9 // 254,2,254, //10 (:) // 254,254,254, //11 ( ) // }; //// the number to screen at the position specified. //lcdPosition(lcdHandle, position, rowShift + 0); // LINE 1 //lcdPutchar (lcdHandle, big4_1[(numToPrint * 3) + 0 ]); //lcdPutchar (lcdHandle, big4_1[(numToPrint * 3) + 1 ]); //lcdPutchar (lcdHandle, big4_1[(numToPrint * 3) + 2 ]); // //lcdPosition(lcdHandle, position, rowShift + 1); //LINE 2 //lcdPutchar (lcdHandle, big4_2[(numToPrint * 3) + 0 ]); //lcdPutchar (lcdHandle, big4_2[(numToPrint * 3) + 1 ]); //lcdPutchar (lcdHandle, big4_2[(numToPrint * 3) + 2 ]); // //lcdPosition(lcdHandle, position, rowShift + 2); //LINE 3 //lcdPutchar (lcdHandle, big4_3[(numToPrint * 3) + 0 ]); //lcdPutchar (lcdHandle, big4_3[(numToPrint * 3) + 1 ]); //lcdPutchar (lcdHandle, big4_3[(numToPrint * 3) + 2 ]); return 0; }
int main() { //! Инициализация портов для светодиодов. DDRF |= (1 << DDF0 | 1 << DDF1 | 1 << DDF2 | 1 << DDF3); //! Инициализация порта для пьезоизлучателя. DDRB |= (1 << DDB0); //! Инициализация портов для строк клавиатуры. Строки на ввод. DDRD &= ~(1 << DDD4 | 1 << DDD5 | 1 << DDD6 | 1 << DDD7); //! Инициализация портов для строк клавиатуры. Поддяжка к питанию. PORTD |= (1 << PD4 | 1 << PD5 | 1 << PD6 | 1 << PD7); //! Инициализация портов для столбцоы клавиатуры. столбцы на вывод. DDRG |= (1 << DDG0 | 1 << DDG1 | 1 << DDG2); //! Инициализация таймера для излучателя звука. TCCR3A = 0; TCCR3A = 0; TCCR3B = 0; TCCR3B_struct.cs3 = 0x01; // Предделитель: F_CPU/1 TIMSK3_struct.toie3 = 1; // Разрешаем прерывание по переполнению TCNT3 = -8000; // 8000 тактов центрального проессора ~ 500 мкс. //! Инициализация таймера для смены режимов. TCCR4A = 0; TCCR4A = 0; TCCR4B = 0; uint8_t key1, key2 = 0; //!< Переменные для хранения кода нажатых клавишь. uint8_t i; char tx_buff_str[16]; //! Структура для чтения времени. //! Перед первым использованием должна быть инициализирована. ds18b20_memory_t ds18b20_memory = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int16_t temper = 0; //! Структура для чтения времени. //! Перед первым использованием должна быть инициализирована. rtc_data_r_t time = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //rtc_data_w_t time_w = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //!< Структура для установки времени. uint8_t sec; I2C_Master_Initialise(); //!< Инициализация I2C интерфейса. ds18b20_convert(); //!< Запуск преобразование температуры. uart_init(); //!< Инициализируем UART. uart_set_input_cb(uart_rx_cb);// Устанавливаем функцию обратного вызова на прием байта по UART. printf("\n\rLESO laboratory (c) 2014\r\nDemo test program\r\n"); printf("LESO6 ATMEGA128RFA1\r\n"); fprintf(stderr, "stderr: NO ERRORS\r\n"); //! Массив с описанием символа градуса. uint8_t ch[8] = { 0x06, /*x x x 0 0 1 1 0*/ 0x09, /*x x x 0 1 0 0 1*/ 0x09, /*x x x 0 1 0 0 1*/ 0x06, /*x x x 0 0 1 1 0*/ 0x00, /*x x x 0 0 0 0 0*/ 0x00, /*x x x 0 0 0 0 0*/ 0x00, /*x x x 0 0 0 0 0*/ 0x00 /*x x x 0 0 0 0 0*/ }; //! Управлящая структура для ЖКИ. lcd_t lcd = { 0, 0, 0, 0, 0 }; lcdInit(&lcd); //!< Инициализируем ЖКИ; lcdCursor(&lcd, 0); //!< Выключаем курсор. lcdCursorBlink(&lcd, 0); //!< Выключаем мерцание курсора. sprintf(tx_buff_str, " LESO6 \n 2014%c ", 0xb4); lcdPuts(&lcd, tx_buff_str); lcdCharDef(&lcd, 1, ch); //!< Определяем новый символ. for (i = 0; i < 75; i++) _delay_ms(10); getTimeDS1338(&time); //!< Читаем время. ds18b20_read(&ds18b20_memory); //!< Читаем температуру. sec = time.Second; TIMSK3_struct.toie3 = 0;// Запрещаем прерывание при переполнении таймера 3. off(BIP); // Выключаем звук. lcdClear(&lcd); lcdCursor(&lcd, 1); lcdPuts(&lcd, "Text:\n"); while (1) { while (key_mode) // В режиме набора текст: { key1 = getKeyChar(); for(i=0; i<5; i++) _delay_ms(10); key2 = getKeyChar(); if (key1 == '\n') continue; else if (key1 != key2) continue; TCNT4 = 0; // Дополнительное время работы в этом режиме if((lcd.cx) == lcd.cols)// закончились символы в строке { lcdPuts(&lcd,"\r \r");// стираем строку, возвращаем курсор в начало printf("\r\033[0K");// стираем строку в терминале } lcdPutchar(&lcd, key1); LEDS &= ~0x0F; LEDS |= 0x0F&key1; putchar(key1); TIMSK3_struct.toie3 = 1; // пик for(i=0; i<20; i++) _delay_ms(10); TIMSK3_struct.toie3 = 0; } printf("\r\033[0K%02u:%02u:%02u",time.Hour, time.Minute ,time.Second); sprintf(tx_buff_str, "%02u:%02u:%02u\n",time.Hour, time.Minute ,time.Second); lcdHome(&lcd); lcdPuts(&lcd, tx_buff_str); if(ds18b20_crc8((uint8_t *)&ds18b20_memory, sizeof(ds18b20_memory))) fprintf(stderr,"ERROR read DS18B20\r\n"); else { temper = (ds18b20_memory.temper_MSB << 8) | ds18b20_memory.temper_LSB; printf(" T= %d.%u",temper>>4, ((temper&0xf)*1000)/(16)); sprintf(tx_buff_str,"%02d.%u%cC ",temper>>4, ((temper&0xf)*1000)/(16), 0x01); lcdPuts(&lcd, tx_buff_str); } ds18b20_convert(); // Запуск преобразование температуры. while(sec == time.Second) { if (getTimeDS1338(&time)) { fprintf(stderr,"ERROR: read date fail..!\n\r"); continue; } key1 = getKeyChar(); if (key1 != '\n') { key_mode = 1; lcdClear(&lcd); lcdCursor(&lcd, 1); lcdPuts(&lcd,"Text:\n"); TCCR4B_struct.cs4 = 0x04; // Предделитель: F_CPU/256 TIMSK4_struct.toie4 = 1;// Разрешаем прерывание по переполнению TCNT4 = 0; printf("\r\033[0K");// стираем строку в терминале break; } for(i=0; i<20; i++) _delay_ms(10); } sec = time.Second; ds18b20_read(&ds18b20_memory); if(ds18b20_crc8((uint8_t *)&ds18b20_memory, sizeof(ds18b20_memory))) fprintf(stderr,"ERROR read DS18B20\r\n"); } return 0; }