Advertisement
miszczo

[AVR] Buttons function

Sep 14th, 2014
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. /*
  2.  * keyboard.h
  3.  *
  4.  *  Created on: 7 maj 2014
  5.  *      Author: miszczo
  6.  */
  7.  
  8. #ifndef KEYBOARD_H_
  9. #define KEYBOARD_H_
  10.  
  11.  
  12.  
  13.  
  14. #define KEYBOARD_PORT D
  15. #define KP_UP 0
  16. #define KP_DOWN 1
  17. #define KP_LEFT 2
  18. #define KP_RIGHT 3
  19. #define KP_OK 4
  20. #define KP_ESC 5
  21.  
  22.  
  23.  
  24.  
  25. // Makra upraszczające dostęp do portów
  26. // *** PORT
  27. #define PORT(x) SPORT(x)
  28. #define SPORT(x) (PORT##x)
  29. // *** PIN
  30. #define PIN(x) SPIN(x)
  31. #define SPIN(x) (PIN##x)
  32. // *** DDR
  33. #define DDR(x) SDDR(x)
  34. #define SDDR(x) (DDR##x)
  35.  
  36.  
  37.  
  38.  
  39.  
  40. void keyboard_init(void);
  41. void keyboard_get(uint8_t *kp_up ,uint8_t *kp_down, uint8_t *kp_right ,uint8_t *kp_left ,uint8_t *kp_ok ,uint8_t *kp_esc);
  42.  
  43.  
  44.  
  45. #endif /* KEYBOARD_H_ */
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53. /*
  54.  * keyboard.c
  55.  *
  56.  *  Created on: 7 maj 2014
  57.  *      Author: miszczo
  58.  */
  59.  
  60.  
  61. #include <avr/io.h>
  62. #include <util/delay.h>
  63. #include "keyboard.h"
  64.  
  65.  
  66.  
  67.  
  68. void keyboard_init(void){
  69.     DDR(KEYBOARD_PORT) &= ~((1<<KP_DOWN)|(1<<KP_UP)|(1<<KP_LEFT)|(1<<KP_RIGHT)|(1<<KP_OK)|(1<<KP_ESC));
  70.     PORT(KEYBOARD_PORT) |= ((1<<KP_DOWN)|(1<<KP_UP)|(1<<KP_LEFT)|(1<<KP_RIGHT)|(1<<KP_OK)|(1<<KP_ESC));
  71. }
  72.  
  73. void keyboard_get(uint8_t *kp_up ,uint8_t *kp_down, uint8_t *kp_right ,uint8_t *kp_left ,uint8_t *kp_ok ,uint8_t *kp_esc)
  74. {
  75.     if(~(PIN(KEYBOARD_PORT)&((1<<KP_DOWN)|(1<<KP_UP)|(1<<KP_LEFT)|(1<<KP_RIGHT)|(1<<KP_OK)|(1<<KP_ESC)))){
  76.         _delay_ms(20);
  77.         if(~(PIN(KEYBOARD_PORT)&((1<<KP_DOWN)|(1<<KP_UP)|(1<<KP_LEFT)|(1<<KP_RIGHT)|(1<<KP_OK)|(1<<KP_ESC))))
  78.         {
  79.             *kp_up = !PIN(KEYBOARD_PORT&(1<<KP_UP));
  80.             *kp_down = !PIN(KEYBOARD_PORT&(1<<KP_DOWN));
  81.             *kp_left = !PIN(KEYBOARD_PORT&(1<<KP_LEFT));
  82.             *kp_right = !PIN(KEYBOARD_PORT&(1<<KP_RIGHT));
  83.             *kp_ok = !PIN(KEYBOARD_PORT&(1<<KP_OK));
  84.             *kp_esc = !PIN(KEYBOARD_PORT&(1<<KP_ESC));
  85.             while(((~PIN(KEYBOARD_PORT)&((1<<KP_DOWN)|(1<<KP_UP)|(1<<KP_LEFT)|(1<<KP_RIGHT)|(1<<KP_OK)|(1<<KP_ESC)))));
  86.         }
  87.     }
  88. }
  89. //1010 0000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement