key.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "key.h"
  2. #include "../App/ota_update.h"
  3. #include "../App/xspDataOpt.h"
  4. #include "../App/taskOpt.h"
  5. KeyInfo g_keyinfo;
  6. void key_delay(uint32_t time)
  7. {
  8. volatile uint32_t idly=0;
  9. for(idly=20*time; idly>0; idly--);
  10. }
  11. /*-----------------------------------------------------------------------
  12. * 初始化按键
  13. * key2
  14. * *PE3
  15. * -----------------------------------------------------------------------*/
  16. void key_init(void)
  17. {
  18. rcu_periph_clock_enable(RCU_GPIOE);
  19. gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_3); //
  20. timeout_setValue(&g_keyinfo.timer,5000);
  21. g_keyinfo.keyVal = 0;
  22. g_keyinfo.count = 0;
  23. g_keyinfo.keyPress = 0x00;
  24. }
  25. static void set_key_value(uint8_t keyval)
  26. {
  27. if((0!=g_keyinfo.keyVal) && (keyval != g_keyinfo.keyVal) ){
  28. g_keyinfo.count = 0;
  29. g_keyinfo.keyPress = 0;
  30. timeout_stop(&g_keyinfo.timer);
  31. }
  32. g_keyinfo.keyVal = keyval;
  33. if(0==g_keyinfo.count){
  34. timeout_start(&g_keyinfo.timer);
  35. }
  36. if(0 == g_keyinfo.keyPress){
  37. g_keyinfo.count++;
  38. g_keyinfo.keyPress = 1;
  39. }
  40. }
  41. /*-----------------------------------------------------------------------
  42. * 检测按键的输入
  43. * ----------------------------------------------------------------------*/
  44. uint8_t key_scan(void)
  45. {
  46. if(KEY2_DOWN()){ // 按键按下
  47. key_delay(20); // 消抖
  48. if(KEY2_DOWN()) { // 确定按键按下
  49. set_key_value(KEY2_VAL);
  50. }
  51. }
  52. else {
  53. g_keyinfo.keyPress = 0x00;
  54. if((g_keyinfo.keyVal !=0) && (g_keyinfo.count>0) ){
  55. if(timeout_isOut(&g_keyinfo.timer))
  56. return 1;
  57. else return 0;
  58. }
  59. }
  60. return 0;
  61. }
  62. /*---------------------------------------------------------------------------------
  63. * 按键的处理
  64. * --------------------------------------------------------------------------------*/
  65. void key_opteration(void)
  66. {
  67. if(KEY2_VAL == g_keyinfo.keyVal ){
  68. switch (g_keyinfo.count){
  69. case 1:break; // 按键按一次
  70. case 2:break; // 按键按二次
  71. case 3: // 按键按三次
  72. ota_start_offline_update();
  73. break;
  74. default:
  75. break;
  76. }
  77. }
  78. else if(KEY4_VAL == g_keyinfo.keyVal) {
  79. switch(g_keyinfo.count){
  80. case 1:
  81. break;
  82. case 2: break;
  83. case 3:
  84. // if(IDENTITY_MASTER == g_iDentity) {
  85. // g_taskRunDa.keyReadcurData = 1;
  86. // g_taskRunDa.keySaveMasterDa = 1;
  87. // printf("按键读取显示屏的值 \r\n");
  88. // }
  89. break;
  90. default: break;
  91. }
  92. }
  93. }