8led.c
上传用户:jinguanrq
上传日期:2022-06-04
资源大小:724k
文件大小:4k
源码类别:

uCOS

开发平台:

C/C++

  1. /*********************************************************************************************
  2. * File: 8led.c
  3. * Author: embest
  4. * Desc: 8-segment digit LED control functions
  5. * History:
  6. *********************************************************************************************/
  7. /*--- include files ---*/
  8. #include "44b.h"
  9. #include "44blib.h"
  10. /*--- macro defines ---*/
  11. /* Bitmaps for 8-segment */
  12. #define SEGMENT_A 0x80
  13. #define SEGMENT_B 0x40
  14. #define SEGMENT_C 0x20
  15. #define SEGMENT_D 0x08
  16. #define SEGMENT_E 0x04
  17. #define SEGMENT_F 0x02
  18. #define SEGMENT_G 0x01
  19. #define SEGMENT_P 0x10
  20. #define DIGIT_F (SEGMENT_A | SEGMENT_G | SEGMENT_E | SEGMENT_F)
  21. #define DIGIT_E (SEGMENT_A | SEGMENT_G | SEGMENT_E | SEGMENT_F | SEGMENT_D)
  22. #define DIGIT_D (SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E)
  23. #define DIGIT_C (SEGMENT_A | SEGMENT_D | SEGMENT_E | SEGMENT_G)
  24. #define DIGIT_B (SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)
  25. #define DIGIT_A (SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_E | SEGMENT_G)
  26. #define DIGIT_9 (SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_G)
  27. #define DIGIT_8 (SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)
  28. #define DIGIT_7 (SEGMENT_A | SEGMENT_B | SEGMENT_C)
  29. #define DIGIT_6 (SEGMENT_A | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)
  30. #define DIGIT_5 (SEGMENT_A | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_G)
  31. #define DIGIT_4 (SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_G)
  32. #define DIGIT_3 (SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F)
  33. #define DIGIT_2 (SEGMENT_A | SEGMENT_B | SEGMENT_D | SEGMENT_E | SEGMENT_F)
  34. #define DIGIT_1 (SEGMENT_B | SEGMENT_C)
  35. #define DIGIT_0 (SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_E | SEGMENT_G)
  36. /* 8led control register address */
  37. #define LED8ADDR (*(volatile unsigned char *)(0x2140000))
  38. /*--- global variables ---*/
  39. /* Digit Symbol table*/
  40. int Symbol[] = { DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7,
  41.       DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_B, DIGIT_C, DIGIT_D, DIGIT_E, DIGIT_F};
  42. /* LED segment table */
  43. int Seg[] = { SEGMENT_A, SEGMENT_B, SEGMENT_C, SEGMENT_D, SEGMENT_E, SEGMENT_F, SEGMENT_G, SEGMENT_P};
  44.      
  45. /*--- functions declare ---*/
  46. void Digit_Led_Test(void);
  47. void Digit_Led_Symbol(int value);
  48. void Digit_Led_Segment(int seg_num);
  49. /*--- extern functions ---*/
  50. extern void Delay(int time);
  51. /*--- function code---*/
  52. /*********************************************************************************************
  53. * name: Digit_Led_Test
  54. * func: 8-segment digit LED test function
  55. * para: none
  56. * ret: none
  57. * modify:
  58. * comment:
  59. *********************************************************************************************/
  60. void Digit_Led_Test(void)
  61. {
  62. int i;
  63. /* display all digit from 0 to F */
  64. for(i=0; i<16; i++)
  65. {
  66. Digit_Led_Symbol(i);
  67. Delay(4000);
  68. }
  69. }
  70. /*********************************************************************************************
  71. * name: Digit_Led_Symbol
  72. * func: display digit symbol on 8-segment digit LED's segment
  73. * para: value --  digit's hexadecimal value
  74. * ret: none
  75. * modify:
  76. * comment:
  77. *********************************************************************************************/
  78. void Digit_Led_Symbol(int value)
  79. {
  80. /* symbol display */
  81. if( (value >= 0) && (value < 16) )
  82. LED8ADDR = ~Symbol[value];
  83. }
  84. /*********************************************************************************************
  85. * name: Digit_Led_Segment
  86. * func: 8-segment digit LED's segment display control function
  87. * para: seg_num -- segment number
  88. * ret: none
  89. * modify:
  90. * comment:
  91. *********************************************************************************************/
  92. void Digit_Led_Segment(int seg_num)
  93. {
  94. /* segment control */
  95. if( (seg_num >= 0) && (seg_num < 8) )
  96. LED8ADDR = ~Seg[seg_num];
  97. }