Key.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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_RCU RCU_GPIOE
  14. #define KEY_IO GPIOE
  15. #define KEY_ON 0
  16. #define KEY_OFF 1
  17. #define KEY1 GPIO_PIN_2
  18. #define KEY2 GPIO_PIN_3
  19. #define KEY3 GPIO_PIN_4
  20. #define KEY4 GPIO_PIN_5
  21. #define KEY5 GPIO_PIN_6
  22. static unsigned char s_arrKeyDownLevel[KEY_NAME_MAX];
  23. static void ConfigKeyGPIO(void);
  24. static void ConfigKeyGPIO(void)
  25. {
  26. rcu_periph_clock_enable(KEY_RCU); //ʹÄÜGPIOAµÄʱÖÓ
  27. gpio_init(KEY_IO,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,KEY1|KEY2|KEY3|KEY4|KEY5);
  28. }
  29. void InitKey(void)
  30. {
  31. ConfigKeyGPIO();
  32. }
  33. unsigned char ScanKey(unsigned int gpio_periph,unsigned int pin)
  34. {
  35. if(gpio_input_bit_get(gpio_periph,pin)==0)
  36. return KEY_ON;
  37. else
  38. return KEY_OFF;
  39. }
  40. unsigned char ReadKeyValue(void)
  41. {
  42. static unsigned char SlaveAddress;
  43. s_arrKeyDownLevel[0]=ScanKey(KEY_IO,KEY1);
  44. s_arrKeyDownLevel[1]=ScanKey(KEY_IO,KEY2);
  45. s_arrKeyDownLevel[2]=ScanKey(KEY_IO,KEY3);
  46. s_arrKeyDownLevel[3]=ScanKey(KEY_IO,KEY4);
  47. s_arrKeyDownLevel[4]=ScanKey(KEY_IO,KEY5);
  48. SlaveAddress=(~((s_arrKeyDownLevel[4]<<4)|(s_arrKeyDownLevel[3]<<3)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[1]<<1)|s_arrKeyDownLevel[0]))&0x1f;
  49. return SlaveAddress;
  50. }