sbit LCD_RS at LATD2_bit; sbit LCD_EN at LATD3_bit; sbit LCD_D4 at LATD4_bit; sbit LCD_D5 at LATD5_bit; sbit LCD_D6 at LATD6_bit; sbit LCD_D7 at LATD7_bit; sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; int sekund, minut, sat, dan, mjesec, godina; int states[16]; void strip_blanks(char *in, char *out) { int i,j; int len=0; len = strlen(in); for(j=0,i=0; i59) { sekund=0; minut++; } if(minut>59) { minut=0; sat++; } if(sat>23) { sat=0; dan++; } if(dan>28 && mjesec==2 && (godina%4)) { dan=1; mjesec++; } else if(dan>29 && mjesec==2 && !(godina%4)) { dan=1; mjesec++; } else if(dan>30 && (mjesec==4 || mjesec==6 || mjesec==9 || mjesec==11)) { dan=1; mjesec++; } else if(dan>31) { dan=1; mjesec++; } if(mjesec>12) { mjesec=1; godina++; } //sprintf(line1, "%.2d.%.2d.%.4d.", dan, mjesec, godina); IntToStr(dan, buf); if(dan<10) strcat(bigbuf, "0"); strcat(bigbuf, buf); strcat(bigbuf, "."); IntToStr(mjesec, buf); if(mjesec<10) strcat(bigbuf, "0"); strcat(bigbuf, buf); strcat(bigbuf, "."); IntToStr(godina, buf); strcat(bigbuf, buf); strip_blanks(bigbuf, line1); //sprintf(line2, "%.2d:%.2d:%.2d", sat, minut, sekund); bigbuf[0] = '\0'; IntToStr(sat, buf); if(sat<10) strcat(bigbuf, "0"); strcat(bigbuf, buf); strcat(bigbuf, ":"); IntToStr(minut, buf); if(minut<10) strcat(bigbuf, "0"); strcat(bigbuf, buf); strcat(bigbuf, ":"); IntToStr(sekund, buf); if(sekund<10) strcat(bigbuf, "0"); strcat(bigbuf, buf); strip_blanks(bigbuf, line2); Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1, 1, line1); Lcd_Out(2, 1, line2); } int StrToInt(char *s) { int num_digits; char digit; char c; int result = 0; int exp; int i=0; int st; int j=0; num_digits = strlen(s); while(s[i] != '\0') { c = s[i]; digit = c - '0'; st=1; exp = num_digits-i-1; for (j=0 ; j < exp; j++) { st*=10; } result+=digit*st; i++; } return result; } int button_released(int i, unsigned int *port, unsigned int pin) { if (Button(port, pin, 1, 1)) { states[i] = 1; } if (states[i] && Button(port, pin, 1, 0)) { states[i] = 0; return 1; } return 0; } void Lcd_Read(char * buffer) { int i = 0; do{ if(button_released( 0, &PORTE, 4)) { Lcd_Chr_Cp('1'); buffer[i++] = '1'; } if(button_released( 1, &PORTF, 4)) { Lcd_Chr_Cp('2'); buffer[i++] = '2'; } if(button_released( 2, &PORTG, 0)) { Lcd_Chr_Cp('3'); buffer[i++] = '3'; } if(button_released( 3, &PORTE, 5)) { Lcd_Chr_Cp('4'); buffer[i++] = '4'; } if(button_released( 4, &PORTF, 5)) { Lcd_Chr_Cp('5'); buffer[i++] = '5'; } if(button_released( 5, &PORTG, 1)) { Lcd_Chr_Cp('6'); buffer[i++] = '6'; } if(button_released( 6, &PORTE, 6)) { Lcd_Chr_Cp('7'); buffer[i++] = '7'; } if(button_released( 7, &PORTF, 6)) { Lcd_Chr_Cp('8'); buffer[i++] = '8'; } if(button_released( 8, &PORTG, 2)) { Lcd_Chr_Cp('9'); buffer[i++] = '9'; } if(button_released( 9, &PORTF, 7)) { Lcd_Chr_Cp('0'); buffer[i++] = '0'; } if(button_released( 10, &PORTE, 7)) {Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);i--;} }while(i < 16 && !button_released(11, &PORTG, 15)); buffer[i] = '\0'; } int Lcd_Read_Int(char *label) { char buffer[17]; Lcd_Cmd(_Lcd_Clear); Lcd_Out(1, 1, label); Lcd_Cmd(_LCD_SECOND_ROW); Lcd_Read(buffer); Lcd_Cmd(_LCD_CLEAR); return StrToInt(buffer); } void main() { AD1PCFG = 0xFFFF; Lcd_Init(); Lcd_Cmd(_Lcd_Cursor_Off); TRISE |= 0b0000000011110000; TRISF |= 0b0000000011110000; TRISG |= 0b1111000000001111; godina = Lcd_Read_Int("Godina:"); mjesec = Lcd_Read_Int("Mjesec:"); dan = Lcd_Read_Int("Dan:"); sat = Lcd_Read_Int("Sat:"); minut = Lcd_Read_Int("Minut:"); sekund = Lcd_Read_Int("Sekund:"); T2CONbits.T32 = 1; T2CONbits.TCKPS0 = 0; T2CONbits.TCKPS1 = 1; T2CONbits.TCS = 0; PR3 = 0x0001; PR2 = 0x312D; //1s T2CONbits.TON = 1; IEC0bits.T3IE = 1; IFS0bits.T3IF=0; while(1); }