Advertisement
nikolaliltek

MPS Kol2 2016

Jan 15th, 2019
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.35 KB | None | 0 0
  1. char keypadPort at PORTD;
  2.  
  3. sbit LCD_RS at RA4_bit;
  4. sbit LCD_EN at RA5_bit;
  5. sbit LCD_D4 at RA0_bit;
  6. sbit LCD_D5 at RA1_bit;
  7. sbit LCD_D6 at RA2_bit;
  8. sbit LCD_D7 at RA3_bit;
  9. sbit LCD_RS_Direction at TRISA4_bit;
  10. sbit LCD_EN_Direction at TRISA5_bit;
  11. sbit LCD_D4_Direction at TRISA0_bit;
  12. sbit LCD_D5_Direction at TRISA1_bit;
  13. sbit LCD_D6_Direction at TRISA2_bit;
  14. sbit LCD_D7_Direction at TRISA3_bit;
  15.  
  16. char kp;
  17. int input;
  18. int numbers[6];
  19. int i, j, index;
  20. char text[16], txt[6], guessTxt[20], toBeTxt[20];
  21. int number;
  22. int serialNumbers[4];
  23. short flag;
  24. char ch;
  25. int position = 0;
  26.  
  27. void main() {
  28.      Keypad_Init();
  29.  
  30.      ANSEL = 0;
  31.      ANSELH = 0b00010000;
  32.      C1ON_bit = 0;
  33.      C2ON_bit = 0;
  34.      
  35.      PORTB=0x00;
  36.      TRISB=0x01;
  37.      
  38.      INTCON=0b10100000;
  39.      
  40.      Lcd_Init();
  41.      Lcd_Cmd(_LCD_CLEAR);
  42.      Lcd_Cmd(_LCD_CURSOR_OFF);
  43.      
  44.      while(1) {
  45.           kp = 0;
  46.           do
  47.              kp = Keypad_Key_Click();
  48.           while(!kp);
  49.          
  50.           switch (kp) {
  51.               case 2:
  52.                    Lcd_Cmd(_LCD_CLEAR);
  53.                    Lcd_out(1,1,"READING");
  54.                    i = 0;
  55.                    while(i<6) {
  56.                       Delay_ms(25);
  57.                       input = ADC_Read(12);
  58.                       if(input>=10 && input<=99) {
  59.                          numbers[i]=input;
  60.                          IntToStr(input,txt);
  61.                          guessTxt[2*i]=txt[4];
  62.                          guessTxt[2*i+1]=txt[5];
  63.                          i++;
  64.                       }
  65.                    }
  66.                    Lcd_Cmd(_LCD_CLEAR);
  67.                    guessTxt[12]='\0';
  68.                    Lcd_out(1,1,guessTxt);
  69.  
  70.                    UART1_Init(9600);
  71.                    Delay_ms(50);
  72.  
  73.                    flag=1;
  74.                    i = 0;
  75.                    while(flag) {
  76.                       if (UART1_Data_Ready()) {
  77.                          ch = UART1_Read();
  78.                          if(isdigit(ch)) number = number*10 + (ch-'0');
  79.                          if(ch=='-') {
  80.                             if(number>=100 && number<=999){
  81.                                serialNumbers[i] = number;
  82.                                EEPROM_write(0x00+i, number);
  83.                                i++;
  84.                                number = 0;
  85.                                if (i==4) flag = 0;
  86.                             } else {
  87.                                Lcd_Cmd(_LCD_CLEAR);
  88.                                Lcd_out(1,1,"ERROR");
  89.                                i = 0;
  90.                                number = 0;
  91.                                while(UART1_Data_Ready()) {
  92.                                   ch = UART1_Read();
  93.                                }
  94.                             }
  95.                          }
  96.                          if (ch=='$') {
  97.                             if(number>=100 && number<=999){
  98.                                serialNumbers[i] = number;
  99.                                EEPROM_Write(0x00+i, number);
  100.                                i++;
  101.                                number = 0;
  102.                             }
  103.                             if (i==4){
  104.                                flag = 0;
  105.                             } else {
  106.                                Lcd_Cmd(_LCD_CLEAR);
  107.                                Lcd_out(1,1,"ERROR");
  108.                                i = 0;
  109.                                number = 0;
  110.                                while(UART1_Data_Ready()) {
  111.                                   ch = UART1_Read();
  112.                                }
  113.                             }
  114.                          }
  115.                       }
  116.                    }
  117.                    for(i=0;i<4;i++){
  118.                       number = serialNumbers[i];
  119.                       IntToStr(number,txt);
  120.                       toBeTxt[i*3]=txt[3];
  121.                       toBeTxt[i*3+1]=txt[4];
  122.                       toBeTxt[i*3+2]=txt[5];
  123.                    }
  124.                    toBeTxt[12]='\0';
  125.                    Lcd_out(2,1,toBeTxt);
  126.                    Delay_ms(100);
  127.                    strcpy(text,"START         ");
  128.                    Lcd_out(2,1,text);
  129.                    break; // START
  130.               case 3:
  131.                    Lcd_Cmd(_LCD_CLEAR);
  132.                    j = 0;
  133.                    for(i=0;i<12;i++){
  134.                       if(guessTxt[i]!=toBeTxt[i]) j++;
  135.                    }
  136.                    IntToStr(j,text);
  137.                    Lcd_out(1,1,"ERRORS:");
  138.                    Lcd_out(2,1,text);
  139.                    Delay_ms(100);
  140.                    Lcd_Cmd(_LCD_CLEAR);
  141.                    break; // END
  142.               case 5:
  143.                    if(position>0) position--;
  144.                    break; // <-
  145.               case 6:
  146.                    ch = guessTxt[position];
  147.                    i = ch - '0';
  148.                    if(i<9) i++;
  149.                    guessTxt[position] = i + '0';
  150.                    Lcd_Out(1,1,guessTxt);
  151.                    break; // ++
  152.               case 7:
  153.                    ch = guessTxt[position];
  154.                    i = ch - '0';
  155.                    if(i>0) i--;
  156.                    guessTxt[position] = i + '0';
  157.                    Lcd_Out(1,1,guessTxt);
  158.                    break; // --
  159.               case 8:
  160.                    if(position<11) position++;
  161.                    break; // ->
  162.           }
  163.      
  164.      }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement