Advertisement
milanmetal

[RSDMK] Tastatura zad1

Apr 24th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <c8051f340.h>        
  2. #include "time.h"
  3. #include "uart.h"
  4.  
  5. void OSCILLATOR_Init (void);          
  6. void PORT_Init (void);
  7.  
  8. char Keypad_Scan();
  9.  
  10. char taster;
  11. char taster_pred;
  12. char enable = 0;
  13.  
  14. char cnt = 0;
  15.  
  16. void main(void)
  17. {
  18.  
  19.     OSCILLATOR_Init();  // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
  20.     TIME_Init();        // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
  21.     PORT_Init();        // Inicijalizacija portova
  22.     UART0_Init();  
  23.  
  24.     while(1) {
  25.        
  26.         taster_pred = taster;
  27.         taster = Keypad_Scan();
  28.  
  29.         if(taster &&  (!taster_pred)) {
  30.             UART0_PutChar(taster);
  31.         }
  32.     }
  33.                                
  34.  }
  35.  
  36.  
  37.  
  38. void PORT_Init (void)
  39. {
  40.    P2MDIN |= 0x0F;              // 4 najniza bita porta P2 -> digitalni
  41.    P2MDOUT = 0x0C;              // Pinovi za LED -> push-pull izlazi
  42.  
  43.    // Crossbar inicijalizacija
  44.    XBR1    = 0x40;              // Dozvola crossbar-a i slabih pull-up otpornika
  45. }
  46.  
  47. char Keypad_Scan()
  48. {
  49.  unsigned char col;
  50.  XBR1 = 0x40; //dozvola crossbar-a i pull-up otpornika
  51.  P1MDOUT = 0x00; //svi pinovi su open-drain
  52.  for(col = 0x01; col != 0x10; col <<= 1)
  53.  {
  54.      P1MDIN = col | 0xf0; //nule u masci su HiZ pinovi
  55.      P1 = ~col; //adresiranje kolone
  56.      delay_ms(2);
  57.      //visi nibl predstavlja kolonu, a nizi stanja tastera:
  58.      switch((col << 4) | ((~P1) >> 4))
  59.      {
  60.          //prva kolona:
  61.          case 0x11:
  62.             return '1';
  63.          case 0x12:
  64.             return '2';
  65.          case 0x14:
  66.             return '3';
  67.          case 0x18:
  68.             return 'A';
  69.        
  70.          //druga kolona:
  71.          case 0x21:
  72.          return '4';
  73.          case 0x22:
  74.             return '5';
  75.          case 0x24:
  76.             return '6';
  77.          case 0x28:
  78.             return 'B';
  79.          //treca kolona:
  80.          case 0x41:
  81.             return '7';
  82.          case 0x42:
  83.             return '8';
  84.          case 0x44:
  85.             return '9';
  86.          case 0x48:
  87.             return 'C';
  88.          //cetvrta kolona:
  89.          case 0x81:
  90.             return '*';
  91.          case 0x82:
  92.             return '0';
  93.          case 0x84:
  94.             return '#';
  95.          case 0x88:
  96.             return 'D';
  97.      }
  98.  }
  99.  return 0; //nije detektovan nijedan taster
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement