Key.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*********************************************************************************************************
  2. * Module : key.c
  3. * Abstract : key modules,key be used to determing modebus address and It content interfaces of scankey to read!
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-02-16
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #include "Key.h"
  11. #include "gd32f30x_libopt.h"
  12. #define KEY_NAME_MAX 5
  13. #define KEY_1_RCU RCU_GPIOA
  14. #define KEY_1_IO GPIOA
  15. #define KEY_2_5_RCU RCU_GPIOB
  16. #define KEY_2_5_IO GPIOB
  17. #define KEY_ON 0
  18. #define KEY_OFF 1
  19. #define KEY1 GPIO_PIN_11
  20. #define KEY2 GPIO_PIN_15
  21. #define KEY3 GPIO_PIN_14
  22. #define KEY4 GPIO_PIN_13
  23. #define KEY5 GPIO_PIN_12
  24. static unsigned char s_arrKeyDownLevel[KEY_NAME_MAX];
  25. static void ConfigKeyGPIO(void);
  26. static void ConfigKeyGPIO(void)
  27. {
  28. rcu_periph_clock_enable(KEY_1_RCU); //ʹÄÜGPIOAµÄʱÖÓ
  29. rcu_periph_clock_enable(KEY_2_5_RCU);
  30. gpio_init(KEY_1_IO,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,KEY1);
  31. gpio_init(KEY_2_5_IO,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,KEY2);
  32. gpio_init(KEY_2_5_IO,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,KEY3);
  33. gpio_init(KEY_2_5_IO,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,KEY4);
  34. gpio_init(KEY_2_5_IO,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,KEY5);
  35. }
  36. void InitKey(void)
  37. {
  38. ConfigKeyGPIO();
  39. }
  40. unsigned char ScanKey(unsigned int gpio_periph,unsigned int pin)
  41. {
  42. if(gpio_input_bit_get(gpio_periph,pin)==0)
  43. return KEY_ON;
  44. else
  45. return KEY_OFF;
  46. }
  47. unsigned char ReadKeyValue(void)
  48. {
  49. static unsigned char SlaveAddress;
  50. s_arrKeyDownLevel[0]=ScanKey(KEY_1_IO,KEY1);
  51. s_arrKeyDownLevel[1]=ScanKey(KEY_2_5_IO,KEY2);
  52. s_arrKeyDownLevel[2]=ScanKey(KEY_2_5_IO,KEY3);
  53. s_arrKeyDownLevel[3]=ScanKey(KEY_2_5_IO,KEY4);
  54. s_arrKeyDownLevel[4]=ScanKey(KEY_2_5_IO,KEY5);
  55. SlaveAddress=(~((s_arrKeyDownLevel[4]<<4)|(s_arrKeyDownLevel[3]<<3)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[1]<<1)|s_arrKeyDownLevel[0]))&0x1f;
  56. return SlaveAddress;
  57. }