gollub

Bankomat,ne vraca PIN

May 7th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.41 KB | None | 0 0
  1. #include <c8051f340.h>        
  2. #include "time.h"
  3. #include "uart.h"
  4. #define BR_KORISNIKA 5
  5. #define MAX 32
  6. #include <string.h>
  7.  
  8.  
  9. // tasteri i LED diode
  10. sbit K1 = P2^0;                    
  11. sbit K2 = P2^1;    
  12. sbit D2 = P2^2;
  13. sbit D3 = P2^3;
  14.  
  15. void OSCILLATOR_Init (void);          
  16. void PORT_Init (void);
  17. char Keypad_Scan();
  18.  
  19. char code korisnici[BR_KORISNIKA][MAX] =
  20. {
  21.     "Sundjer Bob Kockalone",
  22.     "Dijego Armando Maradona",
  23.     "Bond. Dzejms bond.",
  24.     "Zoran Kostic Cane",
  25.     "Kim Dzong Un"
  26. };
  27. char korisnik[MAX];
  28. int i;
  29. int postoji;
  30. char code PIN[BR_KORISNIKA][5] =
  31. {
  32.     "5346",
  33.     "2133",
  34.     "7445",
  35.     "8756",
  36.     "7435"
  37. };
  38. char taster_preth = 0;
  39. char taster = 0;
  40. char unos_pina[10];
  41. int k;
  42.  
  43.  
  44.  
  45. void main(void)
  46. {
  47.     bit dioda = 1;      //pomocna promenljiva za selekciju aktivne diode
  48.  
  49.     PCA0MD &= ~0x40;    // Watchdog tajmer iskljucen
  50.  
  51.     OSCILLATOR_Init();  // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
  52.     TIME_Init();        // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
  53.     PORT_Init();        // Inicijalizacija portova
  54.     UART0_Init();
  55.  
  56.     D2 = D3 = 1;
  57.  
  58.     //test aplikacija:
  59.     while (1)
  60.     {
  61.        
  62.         postoji = 0;       
  63.  
  64.         UART0_PutString("Unesi ime korisnika\n");
  65.         while(UART0_Available() == 0);
  66.         delay_ms(50);
  67.  
  68.         UART0_GetString(korisnik);
  69.         UART0_PutString(korisnik);
  70.         UART0_PutString("\n");
  71.  
  72.         for(i = 0;i < BR_KORISNIKA; i++)
  73.         {
  74.             if(strcmp(korisnik,korisnici[i]) == 0)
  75.             {
  76.                 postoji = 1;
  77.                 break; 
  78.             }
  79.         }
  80.  
  81.         if(postoji)
  82.         {
  83.             k = 0;
  84.  
  85.             UART0_PutString("Korisnik postoji u bazi,molimo unesite PIN\n");
  86.  
  87.             while(1)
  88.             {
  89.                 taster_preth = taster;
  90.                 taster = Keypad_Scan();
  91.                
  92.                 if(taster && !(taster_preth))
  93.                 {  
  94.                     if(Keypad_Scan() == '#')
  95.                     {
  96.                         break;
  97.                     }
  98.                     UART0_PutChar(Keypad_Scan());
  99.                     unos_pina[k++] = Keypad_Scan();
  100.                 }
  101.             }
  102.                     unos_pina[k] = '\0';
  103.                 if(strcmp(unos_pina,PIN[i]) == 0)
  104.                 {
  105.                     UART0_PutString("\n");
  106.                     UART0_PutString("Ispravan pin");
  107.                     UART0_PutString("\n"); 
  108.                 }
  109.                 else
  110.                 {
  111.                     UART0_PutString("\n");
  112.                     UART0_PutString("Neispravan pin");
  113.                     UART0_PutString("\n");
  114.  
  115.                 }
  116.             }
  117.             else
  118.             {
  119.             UART0_PutString("Korisnik ne postoji u bazi\n");
  120.             }
  121.         }                          
  122.  }
  123.  
  124. void PORT_Init (void)
  125. {
  126.    P2MDIN |= 0x0F;              // 4 najniza bita porta P2 -> digitalni
  127.    P2MDOUT = 0x0C;              // Pinovi za LED -> push-pull izlazi
  128.  
  129.    // Crossbar inicijalizacija
  130.    XBR1    = 0x40;              // Dozvola crossbar-a i slabih pull-up otpornika
  131. }
  132. char Keypad_Scan()
  133. {
  134.  unsigned char col;
  135.  XBR1 = 0x40; //dozvola crossbar-a i pull-up otpornika
  136.  P1MDOUT = 0x00; //svi pinovi su open-drain
  137.  for(col = 0x01; col != 0x10; col <<= 1)
  138.  {
  139.  P1MDIN = col | 0xf0; //nule u masci su HiZ pinovi
  140.  P1 = ~col; //adresiranje kolone
  141.  delay_ms(2);
  142.  //visi nibl predstavlja kolonu, a nizi stanja tastera:
  143.  switch((col << 4) | ((~P1) >> 4))
  144.  {
  145.  //prva kolona:
  146.  case 0x11:
  147.  return '1';
  148.  case 0x12:
  149.  return '2';
  150.  case 0x14:
  151.  return '3';
  152.  case 0x18:
  153.  return 'A';
  154.  
  155.  //druga kolona:
  156.  case 0x21:
  157.  return '4';
  158.  case 0x22:
  159.  return '5';
  160.  case 0x24:
  161.  return '6';
  162.  case 0x28:
  163.  return 'B';
  164.  //treca kolona:
  165.  case 0x41:
  166.  return '7';
  167.  case 0x42:
  168.  return '8';
  169.  case 0x44:
  170.  return '9';
  171.  case 0x48:
  172.  return 'C';
  173.  //cetvrta kolona:
  174.  case 0x81:
  175.  return '*';
  176.  case 0x82:
  177.  return '0';
  178.  case 0x84:
  179.  return '#';
  180.  case 0x88:
  181.  return 'D';
  182.  }
  183.  }
  184.  return 0; //nije detektovan nijedan taster
  185. }
Add Comment
Please, Sign In to add comment