📄 hal_key.lst
字号:
373 }
374 else if ((adc >= 75) && (adc <= 85))
375 {
376 ksave0 |= HAL_KEY_RIGHT;
377 }
378 else if ((adc >= 45) && (adc <= 55))
379 {
380 ksave0 |= HAL_KEY_LEFT;
381 }
382 else if (adc <= 10)
383 {
384 ksave0 |= HAL_KEY_DOWN;
385 }
386 else if ((adc >= 101) && (adc <= 115))
387 {
388 }
389 }
390 else
391 {
392 /* Rev C */
393 if ((adc >= 90) && (adc <= 104))
394 {
395 ksave0 |= HAL_KEY_UP;
396 }
397 else if ((adc >= 75) && (adc <= 89))
398 {
399 ksave0 |= HAL_KEY_RIGHT;
400 }
401 else if ((adc >= 45) && (adc <= 56))
402 {
403 ksave0 |= HAL_KEY_LEFT;
404 }
405 else if (adc <= 10)
406 {
407 ksave0 |= HAL_KEY_DOWN;
408 }
409 else if ((adc >= 105) && (adc <= 121))
410 {
411 }
412 }
413
414 } while (ksave0 != ksave1);
415
416 keys |= ksave0;
417
418 #endif
419
420 #endif /* HAL_KEY */
421
422 return keys;
\ 000000 REQUIRE ?Subroutine0
\ 000000 ; // Fall through to label ?Subroutine0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 7900 MOV R1,#0x0
\ 000002 02.... LJMP ?BRET
423
424 }
425
426
427 /**************************************************************************************************
428 * @fn HalKeyPoll
429 *
430 * @brief Called by hal_driver to poll the keys
431 *
432 * @param None
433 *
434 * @return None
435 **************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
436 void HalKeyPoll (void)
\ HalKeyPoll:
437 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
438 #if (HAL_KEY == TRUE)
439
440 uint8 keys = 0;
441
442 #if defined (HAL_KEY_JOYSTICK_ENABLE)
443 uint8 ksave0 = 0;
444 uint8 ksave1;
445 uint8 adc;
446 #endif
447
448 /*
449 * If interrupts are enabled, get the status of the interrupt-driven keys from 'halSaveIntKey'
450 * which is updated by the key ISR. If Polling, read these keys directly.
451 */
452 #if defined (HAL_KEY_SW_6_ENABLE)
453 if (!(HAL_KEY_SW_6_PORT & HAL_KEY_SW_6_BIT)) /* Key is active low */
454 {
455 keys |= HAL_KEY_SW_6;
456 }
457 #endif
458 #if defined (HAL_KEY_SW_5_ENABLE)
459 if (HAL_KEY_SW_5_PORT & HAL_KEY_SW_5_BIT) /* Key is active high */
460 {
461 keys |= HAL_KEY_SW_5;
462 }
463 #endif
464
465 #if defined (HAL_KEY_JOYSTICK_ENABLE)
466 /*
467 * The joystick control is encoded as an analog voltage. Keep on reading
468 * the ADC until two consecutive key decisions are the same.
469 */
470
471 do
472 {
473 ksave1 = ksave0; /* save previouse key reading */
474
475 adc = HalAdcRead (HAL_KEY_JOY_CHN, HAL_ADC_RESOLUTION_8);
476
477 if (CHVER == 0x01)
478 {
479 /* Rev B */
480 if ((adc >= 90) && (adc <= 100))
481 {
482 ksave0 |= HAL_KEY_UP;
483 }
484 else if ((adc >= 75) && (adc <= 85))
485 {
486 ksave0 |= HAL_KEY_RIGHT;
487 }
488 else if ((adc >= 45) && (adc <= 55))
489 {
490 ksave0 |= HAL_KEY_LEFT;
491 }
492 else if (adc <= 10)
493 {
494 ksave0 |= HAL_KEY_DOWN;
495 }
496 else if ((adc >= 101) && (adc <= 115))
497 {
498 }
499 }
500 else
501 {
502 /* Rev C */
503 if ((adc >= 90) && (adc <= 104))
504 {
505 ksave0 |= HAL_KEY_UP;
506 }
507 else if ((adc >= 75) && (adc <= 89))
508 {
509 ksave0 |= HAL_KEY_RIGHT;
510 }
511 else if ((adc >= 45) && (adc <= 56))
512 {
513 ksave0 |= HAL_KEY_LEFT;
514 }
515 else if (adc <= 10)
516 {
517 ksave0 |= HAL_KEY_DOWN;
518 }
519 else if ((adc >= 105) && (adc <= 121))
520 {
521 }
522 }
523
524
525 } while (ksave0 != ksave1);
526
527 keys |= ksave0;
528
529 #endif
530
531 /* Exit if polling and no keys have changed */
532 if (!Hal_KeyIntEnable)
533 {
534 if (keys == halKeySavedKeys)
535 {
536 return;
537 }
538 halKeySavedKeys = keys; /* Store the current keys for comparation next time */
539 }
540
541 /* Invoke Callback if new keys were depressed */
542 if (keys && (pHalKeyProcessFunction))
543 {
544 (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
545 }
546
547 #endif /* HAL_KEY */
548
549 }
\ 000000 02.... LJMP ?BRET
550
551
552 /**************************************************************************************************
553 * @fn halProcessKeyInterrupt
554 *
555 * @brief Checks to see if it's a valid key interrupt, saves interrupt driven key states for
556 * processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later.
557 *
558 * @param
559 *
560 * @return
561 **************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
562 void halProcessKeyInterrupt (void)
\ halProcessKeyInterrupt:
563 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
564
565 #if (HAL_KEY == TRUE)
566
567 bool valid=FALSE;
568
569 #if defined (HAL_KEY_SW_6_ENABLE)
570 if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT) /* Interrupt Flag has been set */
571 {
572 HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */
573 valid = TRUE;
574 }
575 #endif
576
577 #if defined (HAL_KEY_SW_5_ENABLE)
578 if (HAL_KEY_SW_5_PXIFG & HAL_KEY_SW_5_BIT) /* Interrupt Flag has been set */
579 {
580 HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT); /* Clear Interrupt Flag */
581 valid = TRUE;
582 }
583 #endif
584
585 if (valid)
586 {
587 osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);
588 }
589 #endif /* HAL_KEY */
590 }
\ 000000 02.... LJMP ?BRET
591
592 /**************************************************************************************************
593 * @fn HalKeyEnterSleep
594 *
595 * @brief - Get called to enter sleep mode
596 *
597 * @param
598 *
599 * @return
600 **************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
601 void HalKeyEnterSleep ( void )
\ HalKeyEnterSleep:
602 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
603 /* Sleep!!! */
604 }
\ 000000 02.... LJMP ?BRET
605
606 /**************************************************************************************************
607 * @fn HalKeyExitSleep
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -