char keypadPort at PORTD; sbit LCD_RS at RA4_bit; sbit LCD_EN at RA5_bit; sbit LCD_D4 at RA0_bit; sbit LCD_D5 at RA1_bit; sbit LCD_D6 at RA2_bit; sbit LCD_D7 at RA3_bit; sbit LCD_RS_Direction at TRISA4_bit; sbit LCD_EN_Direction at TRISA5_bit; sbit LCD_D4_Direction at TRISA0_bit; sbit LCD_D5_Direction at TRISA1_bit; sbit LCD_D6_Direction at TRISA2_bit; sbit LCD_D7_Direction at TRISA3_bit; int flag; int k; int kp; int countPom = 0; int nizaPom[3]; char uart_rd; char pp[4]; char print[15]; char print2[15]; int niza[6]; int niza2[40]; int pom = 14; int trocifren; int value, count = 0; int isStarted = 0; int brojach = 0; int brojach2 = 0; int broj; int Dvocifren(int a){ if(a >= 10 && a <= 99) return 1; else return 0; } int makeTrocifren(int niza3[3]){ trocifren = niza3[0] * 100 + niza3[1] * 10 + niza3[2]; return trocifren; } void main() { Keypad_Init(); // initialize the keypad ANSEL = 0; ANSELH = 0; // AN pins are configured as digital ANSELH.B4 = 1; TRISB.B0 = 1; Lcd_Init(); // initialize the LCD Lcd_Cmd(_LCD_CLEAR); // clear the screen Lcd_Cmd(_LCD_CURSOR_OFF); C1ON_bit = 0; // comparators are disabled C2ON_bit = 0; UART1_Init(9600); // Initialization of UART on 9600 bps Delay_ms(100); do { kp = 0; do kp = Keypad_Key_Click(); while (!kp); switch (kp) { case 1: kp = -1; break; case 2: kp = 1; break; case 3: kp = -1; break; case 4: kp = -1; break; case 5: kp = 2; break; case 6: kp = 3; break; case 7: kp = -1; break; case 8: kp = -1; break; case 9: kp = 4; break; case 10: kp = 5; break; case 11: kp = -1; break; case 12: kp = -1; break; case 13: kp = -1; break; case 14: kp = 6; break; case 15: kp = -1; break; case 16: kp = -1; break; } if(kp == 2){ isStarted = 1; Lcd_Cmd(_LCD_CLEAR); LCD_Out(1,1, "Reading"); while(count < 6){ value = ADC_Read(12); if(Dvocifren(value) == 1) { niza[count] = value; count++; } Delay_ms(25); } count = 0; Lcd_Cmd(_LCD_CLEAR); while(count < 6){ print[count * 2] = niza[count] / 10 + 48; print[count * 2 + 1] = niza[count] % 10 + 48; count++; } LCD_Out(1,1,print); Lcd_Cmd(_LCD_CLEAR); while(1){ flag = 0; brojach = 0; brojach2 = 0; while(1){ if (UART1_Data_Ready()) { uart_rd = UART1_Read(); LCD_Chr(1,1,uart_rd); Delay_ms(15); Lcd_Cmd(_LCD_CLEAR); if(isdigit(uart_rd)){ nizaPom[brojach] = uart_rd - 48; brojach++; LCD_Out(2,1, "IS DIGIT"); } else if (uart_rd == '-'){ if(brojach != 3){ flag = 1; LCD_Out(1,1,"FIRST ONE"); Lcd_Cmd(_LCD_CLEAR); break; } else{ brojach = 0; broj = MakeTrocifren(nizaPom); niza2[brojach2] = broj; brojach2++; IntToStr(brojach2, pp); LCD_Out(2,1, pp); } } else if( uart_rd == '$'){ if(brojach2 != 3){ LCD_Out(1,1,"SECOND ONE"); Lcd_Cmd(_LCD_CLEAR); flag = 1; } break; } else{ flag = 1; LCD_Out(1,1,"THIRD ONE"); Lcd_Cmd(_LCD_CLEAR); break; } } } if(flag == 1){ Lcd_Cmd(_LCD_CLEAR); LCD_Out(1,1, "Error"); } else if (flag == 0){ brojach2 = 0; //Lcd_Cmd(_LCD_CLEAR); LCD_Out(1,1, "IT'S OKAY"); while(brojach2 < 4){ k = niza2[brojach2] / 100 - 48; print2[brojach2 * 3] = k; print2[brojach2 * 3 + 1] = ((niza2[brojach2] / 10) % 10) - 48; print2[brojach2 * 3 + 2] = niza2[brojach2] % 100 - 48; } LCD_Out(1,1,print2); Delay_ms(20); break; } } if(isStarted){ } } } while(1); }