key.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 key3 key4
  14. * *PB0, PB1, PB2
  15. * -----------------------------------------------------------------------*/
  16. void key_init(void)
  17. {
  18. rcu_periph_clock_enable(RCU_GPIOB);
  19. gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2); //
  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 if(KEY3_DOWN()){ // 按键按下
  53. key_delay(20); // 消抖
  54. if(KEY3_DOWN()) { // 确定按键按下
  55. set_key_value(KEY3_VAL) ;
  56. }
  57. }
  58. else if(KEY4_DOWN()){ // 按键按下
  59. key_delay(20); // 消抖
  60. if(KEY4_DOWN()) { // 确定按键按下
  61. set_key_value(KEY4_VAL);
  62. }
  63. }
  64. else {
  65. g_keyinfo.keyPress = 0x00;
  66. if((g_keyinfo.keyVal !=0) && (g_keyinfo.count>0) ){
  67. if(timeout_isOut(&g_keyinfo.timer))
  68. return 1;
  69. else return 0;
  70. }
  71. }
  72. return 0;
  73. }
  74. /*---------------------------------------------------------------------------------
  75. * 按键的处理
  76. * --------------------------------------------------------------------------------*/
  77. void key_opteration(void)
  78. {
  79. if(KEY2_VAL == g_keyinfo.keyVal ){
  80. switch (g_keyinfo.count){
  81. case 1:break; // 按键按一次
  82. case 2:break; // 按键按二次
  83. case 3: // 按键按三次
  84. ota_start_offline_update();
  85. break;
  86. default:
  87. break;
  88. }
  89. }
  90. else if(KEY4_VAL == g_keyinfo.keyVal) {
  91. // switch(g_keyinfo.count){
  92. // case 1:
  93. // save_display_data_to_flash();
  94. // break;
  95. // case 2: break;
  96. // case 3:
  97. // if(IDENTITY_MASTER == g_iDentity) {
  98. // g_taskRunDa.keyReadcurData = 1;
  99. // g_taskRunDa.keySaveMasterDa = 1;
  100. // printf("按键读取显示屏的值 \r\n");
  101. // }
  102. // break;
  103. // default: break;
  104. // }
  105. }
  106. }