找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3407|回复: 0
收起左侧

msp430 LED表情矩阵 原理图源程序等资料

[复制链接]
ID:164217 发表于 2017-3-30 20:57 | 显示全部楼层 |阅读模式
原理图、PCB_PDF档
0.png
0.png

部分源程序预览:
  1. #include <msp430.h>
  2. #include <stdint.h>
  3. #include "Application\delay.h"
  4. #include "Application\Display.h"
  5. #include "Application\DS3231.h"
  6. #include "Application\VS10XX.h"

  7. #define BUTTON_PORT_DIR     P2DIR
  8. #define BUTTON_PORT_IES     P2IES
  9. #define BUTTON_PORT_IFG     P2IFG
  10. #define BUTTON_PORT_IE      P2IE

  11. #define BUTTON_FUNC     BIT2
  12. #define BUTTON_SET      BIT3
  13. #define BUTTON_UP       BIT1
  14. #define BUTTON_DOWN     BIT0

  15. #define DISP_REFRESH_GAP    60000
  16. #define PARA_REFRESH_GAP    60000

  17. /* Function indication variable
  18. *      1: Emoji Display
  19. *      2: Time Display
  20. *      3: Temp Display
  21. */
  22. uint8_t FUNC_SWITCH = 1;
  23. #define FUNC_MAX    5

  24. //Define display order
  25. #define DISP_ORDER_EMOJI        2//Display Emoji
  26. #define DISP_ORDER_TIME_TEMP    3//Display time and temperature in turn
  27. #define DISP_ORDER_TIME         4//Display time
  28. #define DISP_ORDER_TEMP         5//Display temperature
  29. #define DISP_ORDER_CHS          1//Display Chinese character, rolling from right to left
  30. #define DISP_ORDER_SPEC         6//Display spectrum//In development

  31. uint8_t GLOBE_STATIC_RESET = 0;//Used to reset all static variables when function is switched and needed, especially counter variables
  32.                                //DISP_CHS clears this in display sub-function in display.c
  33.                                //Others clear this in TIMER_A0 interrupt

  34. uint8_t DISP_EMOJI_NOW = 0;
  35. uint8_t DISP_EMOJI_NEXT = 0;
  36. #define DISP_EMOJI_MAX  21//Define maximum emoji #//XXX

  37. uint8_t DISP_EMOJI_TRANS_DIR = 1;
  38. #define DISP_EMOJI_TRANS_DIR_MAX    4

  39. extern uint8_t Time_Str[2][5];
  40. extern uint8_t Time_SetStr[6][4];
  41. uint8_t Time_Set = 0;
  42. uint8_t Time_Set_Idx = 0;

  43. extern int8_t Temp_Read;
  44. extern uint8_t Temp_Str[4];

  45. uint8_t Time_Temp_Idx = 0;//Index for time/temperature, 0 for time and 1 for temperature
  46. uint16_t Time_Temp_Cnt = 0;//Counter for time/temperature display
  47. #define Time_Temp_Cnt_Max   100//Set switch speed//100 equals about 6 seconds//XXX

  48. uint8_t DISP_CHS_IDX = 1;
  49. #define DISP_CHS_IDX_MAX   1//Define maximum strings in CHS STR//XXX

  50. /*
  51. * main.c
  52. */

  53. void Set_Clock(void)
  54. {
  55.     volatile unsigned int i;

  56.     BCSCTL1 |= XTS;                           // ACLK= LFXT1 = HF XTAL

  57.     do
  58.     {
  59.         IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  60.         for (i = 0xFF; i > 0; i--);               // Time for flag to set
  61.     }
  62.     while ((IFG1 & OFIFG));                   // OSCFault flag still set?

  63.     BCSCTL2 |= SELM_3;                        // MCLK= LFXT1 (safe)
  64. }

  65. void Set_TIMER_B(void)//TIMER_B has higher priority
  66. {
  67.     WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  68.     TBCTL = TBCLR;

  69.     TBCCTL0 = CCIE;                             // CCR1 interrupt enabled
  70.     TBCCR0 = DISP_REFRESH_GAP;
  71.     TBCTL = TBSSEL_1 + MC_1;                  // ACLK, upmode

  72.     TBCTL |= TBIE;
  73. }

  74. void Set_TIMER_A(void)
  75. {
  76.     WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  77.     TACTL = TACLR;

  78.     TACCTL0 = CCIE;                             // CCR1 interrupt enabled
  79.     TACCR0 = PARA_REFRESH_GAP;
  80.     TACTL = TASSEL_1 + MC_1 + ID_3;                  // ACLK, upmode, devide 8

  81.     TACTL |= TAIE;
  82. }

  83. void Set_Button_Int(void)
  84. {
  85.     WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  86.     BUTTON_PORT_DIR &= ~(BUTTON_FUNC + BUTTON_SET + BUTTON_UP + BUTTON_DOWN);
  87.     BUTTON_PORT_IES |= (BUTTON_FUNC + BUTTON_SET + BUTTON_UP + BUTTON_DOWN);
  88.     BUTTON_PORT_IFG &= ~(BUTTON_FUNC + BUTTON_SET + BUTTON_UP + BUTTON_DOWN);
  89.     BUTTON_PORT_IE |= (BUTTON_FUNC + BUTTON_SET + BUTTON_UP + BUTTON_DOWN);
  90. }

  91. void main(void) {

  92. //    uint16_t temp=0;

  93.     WDTCTL = WDTPW + WDTHOLD;        // Stop watchdog timer

  94.     P5DIR |= BIT5;//XXX

  95.     Set_Clock();
  96.     Set_TIMER_B();
  97.     Set_TIMER_A();
  98.     Set_Button_Int();

  99.     Disp_Port_Init();
  100.     I2C_Port_Init();

  101.     _BIS_SR(GIE);

  102.     while(1)
  103.     {
  104.     }
  105. }

  106. // Timer B0 interrupt service routine
  107. // Used as display timer
  108. #pragma vector=TIMERB0_VECTOR
  109. __interrupt void Timer_B (void)
  110. {
  111.     TBCTL &= ~TBIFG;
  112.     TBCCTL0 &= ~CCIFG;
  113.     P5OUT |= BIT5;//XXX
  114.     switch(FUNC_SWITCH)
  115.     {
  116.         case DISP_ORDER_EMOJI://Display Emoji
  117.             Disp_Emoji(DISP_EMOJI_NOW);
  118.             break;
  119.         case DISP_ORDER_TIME://Display and adjust Time
  120.             if(Time_Set == 0)
  121.             {
  122.                 Disp_Char_8(1, 1, Time_Str[0][0]);
  123.                 Disp_Char_8(1, 2, Time_Str[0][1]);
  124.                 Disp_Icon_8(1, 3, 0);
  125.                 Disp_Char_8(1, 4, Time_Str[0][3]);
  126.                 Disp_Char_8(1, 5, Time_Str[0][4]);
  127.                 Disp_Char_8(2, 1, Time_Str[1][0]);
  128.                 Disp_Char_8(2, 2, Time_Str[1][1]);
  129.                 Disp_Char_8(2, 3, Time_Str[1][2]);
  130.                 Disp_Char_8(2, 4, Time_Str[1][3]);
  131.                 Disp_Char_8(2, 5, Time_Str[1][4]);
  132.             }
  133.             else
  134.             {
  135.                 switch(Time_Set_Idx)
  136.                 {
  137.                     case 0:
  138.                         Disp_Char_8(1, 1, 'S');
  139.                         Disp_Char_8(1, 2, 'E');
  140.                         Disp_Char_8(1, 3, 'T');
  141.                         Disp_Char_8(2, 2, 'T');
  142.                         Disp_Char_8(2, 3, 'I');
  143.                         Disp_Char_8(2, 4, 'M');
  144.                         Disp_Char_8(2, 5, 'E');
  145.                         break;
  146.                     case 1:
  147.                         Disp_Char_8(1, 1, 'Y');
  148.                         Disp_Char_8(1, 2, 'E');
  149.                         Disp_Char_8(1, 3, 'A');
  150.                         Disp_Char_8(1, 4, 'R');
  151.                         Disp_Char_8(2, 2, Time_SetStr[0][0]);
  152.                         Disp_Char_8(2, 3, Time_SetStr[0][1]);
  153.                         Disp_Char_8(2, 4, Time_SetStr[0][2]);
  154.                         Disp_Char_8(2, 5, Time_SetStr[0][3]);
  155.                         break;
  156.                     case 2:
  157.                         Disp_Char_8(1, 1, 'M');
  158.                         Disp_Char_8(1, 2, 'O');
  159.                         Disp_Char_8(1, 3, 'N');
  160.                         Disp_Char_8(1, 4, 'T');
  161.                         Disp_Char_8(1, 5, 'H');
  162.                         Disp_Char_8(2, 4, Time_SetStr[1][2]);
  163.                         Disp_Char_8(2, 5, Time_SetStr[1][3]);
  164.                         break;
  165.                     case 3:
  166.                         Disp_Char_8(1, 1, 'D');
  167.                         Disp_Char_8(1, 2, 'A');
  168.                         Disp_Char_8(1, 3, 'Y');
  169.                         Disp_Char_8(2, 4, Time_SetStr[2][2]);
  170.                         Disp_Char_8(2, 5, Time_SetStr[2][3]);
  171.                         break;
  172.                     case 4:
  173.                         Disp_Char_8(1, 1, 'H');
  174.                         Disp_Char_8(1, 2, 'O');
  175.                         Disp_Char_8(1, 3, 'U');
  176.                         Disp_Char_8(1, 4, 'R');
  177.                         Disp_Char_8(2, 4, Time_SetStr[3][2]);
  178.                         Disp_Char_8(2, 5, Time_SetStr[3][3]);
  179.                         break;
  180.                     case 5:
  181.                         Disp_Char_8(1, 1, 'M');
  182.                         Disp_Char_8(1, 2, 'I');
  183.                         Disp_Char_8(1, 3, 'N');
  184.                         Disp_Char_8(2, 4, Time_SetStr[4][2]);
  185.                         Disp_Char_8(2, 5, Time_SetStr[4][3]);
  186.                         break;
  187.                     case 6:
  188.                         Disp_Char_8(1, 1, 'S');
  189.                         Disp_Char_8(1, 2, 'E');
  190.                         Disp_Char_8(1, 3, 'C');
  191.                         Disp_Char_8(2, 4, Time_SetStr[5][2]);
  192.                         Disp_Char_8(2, 5, Time_SetStr[5][3]);
  193.                         break;
  194.                     default:
  195.                         break;
  196.                 }
  197.             }
  198.             break;
  199.         case DISP_ORDER_TEMP://Display Temperature
  200.             Disp_Char_16(1, Temp_Str[0]);
  201.             Disp_Char_16(2, Temp_Str[1]);
  202.             Disp_Char_16(3, Temp_Str[2]);
  203.             Disp_Icon_16(4, 0);
  204.             break;
  205.         case DISP_ORDER_TIME_TEMP://Display time and temperature in turn
  206.             if(Time_Temp_Idx == 0)
  207.             {
  208.                 Disp_Char_8(1, 1, Time_Str[0][0]);
  209.                 Disp_Char_8(1, 2, Time_Str[0][1]);
  210.                 Disp_Icon_8(1, 3, 0);
  211.                 Disp_Char_8(1, 4, Time_Str[0][3]);
  212.                 Disp_Char_8(1, 5, Time_Str[0][4]);
  213.                 Disp_Char_8(2, 1, Time_Str[1][0]);
  214.                 Disp_Char_8(2, 2, Time_Str[1][1]);
  215.                 Disp_Char_8(2, 3, Time_Str[1][2]);
  216.                 Disp_Char_8(2, 4, Time_Str[1][3]);
  217.                 Disp_Char_8(2, 5, Time_Str[1][4]);
  218.             }
  219.             else
  220.             {
  221.                 Disp_Char_16(1, Temp_Str[0]);
  222.                 Disp_Char_16(2, Temp_Str[1]);
  223.                 Disp_Char_16(3, Temp_Str[2]);
  224.                 Disp_Icon_16(4, 0);
  225.             }
  226.             break;
  227.         case DISP_ORDER_CHS://Display Chinese Character and string
  228.             Disp_Char_Chs_16(DISP_CHS_IDX);
  229.             break;
  230.         case DISP_ORDER_SPEC://Display Spectrum
  231.             //Refresh spectrum display here
  232.             break;
  233.         default:
  234.             break;
  235.     }
  236.     P5OUT &= ~BIT5;//XXX
  237. }

  238. // Timer A0 interrupt service routine
  239. // Used as other task timer, e.g. read DS3231
  240. #pragma vector=TIMERA0_VECTOR
  241. __interrupt void Timer_A (void)
  242. {
  243.     TACTL &= ~TAIFG;
  244.     TACCTL0 &= ~CCIFG;

  245.     P5OUT |= BIT5;//XXX
  246.     switch(FUNC_SWITCH)
  247.     {
  248.         case DISP_ORDER_EMOJI://Display Emoji
  249.             if(GLOBE_STATIC_RESET == 1)
  250.                 GLOBE_STATIC_RESET = 0;
  251.             break;
  252.         case DISP_ORDER_TIME://Display and adjust Time
  253.             if(GLOBE_STATIC_RESET == 1)
  254.                 GLOBE_STATIC_RESET = 0;
  255.             if(Time_Set == 0)
  256.                 DS3231_Read_Time_to_Str();
  257.             else
  258.                 DS3231_Time_to_Str();
  259.             break;
  260.         case DISP_ORDER_TEMP://Display Temperature
  261.             if(GLOBE_STATIC_RESET == 1)
  262.                 GLOBE_STATIC_RESET = 0;
  263.             Temp_Read = DS3231_Read_Temp();
  264.             DS3231_Temp_to_Str(Temp_Read);
  265.             break;
  266.         case DISP_ORDER_TIME_TEMP://Display time and temperature in turn
  267.             if(GLOBE_STATIC_RESET == 1)
  268.             {
  269.                 GLOBE_STATIC_RESET = 0;
  270.                 Time_Temp_Idx = 0;
  271.             }
  272.             if(Time_Temp_Idx == 0)
  273.             {
  274.                 DS3231_Read_Time_to_Str();
  275.                 Time_Temp_Cnt++;
  276.             }
  277.             else
  278.             {
  279.                 Temp_Read = DS3231_Read_Temp();
  280.                 DS3231_Temp_to_Str(Temp_Read);
  281.                 Time_Temp_Cnt++;
  282.             }
  283.             if(Time_Temp_Cnt > Time_Temp_Cnt_Max)
  284.             {
  285.                 Time_Temp_Cnt = 0;
  286.                 Time_Temp_Idx = 1 - Time_Temp_Idx;
  287.             }
  288.             break;
  289.         case DISP_ORDER_CHS://Display Chinese Character
  290.             break;
  291.         case DISP_ORDER_SPEC://Display Spectrum
  292.             if(GLOBE_STATIC_RESET == 1)
  293.                 GLOBE_STATIC_RESET = 0;
  294.             //Read VS10XX data here
  295.             break;
  296.         default:
  297.             break;
  298.     }
  299.     P5OUT &= ~BIT5;//XXX
  300. }

  301. // Port 2 interrupt service routine
  302. #pragma vector=PORT2_VECTOR
  303. __interrupt void Port_2(void)
  304. {
  305.     if(BUTTON_PORT_IFG & BUTTON_DOWN)
  306.     {
  307.         switch(FUNC_SWITCH)
  308.         {
  309.             case DISP_ORDER_EMOJI://Display Emoji
  310.                 DISP_EMOJI_NEXT = DISP_EMOJI_NOW + 1;
  311.                 if(DISP_EMOJI_NEXT > DISP_EMOJI_MAX)
  312.                     DISP_EMOJI_NEXT = 0;
  313.                 Disp_Emoji_Trans(DISP_EMOJI_NOW, DISP_EMOJI_NEXT, DISP_EMOJI_TRANS_DIR);
  314.                 DISP_EMOJI_NOW = DISP_EMOJI_NEXT;
  315.                 break;
  316.             case DISP_ORDER_TIME://Display and adjust Time
  317.                 if(Time_Set == 1)
  318.                 {
  319.                     switch(Time_Set_Idx)
  320.                     {
  321.                         case 1:
  322.                             Time_SetVal.time_year--;
  323.                             if(Time_SetVal.time_year < 2010)
  324.                                 Time_SetVal.time_year = 2099;
  325.                             break;
  326.                         case 2:
  327.                             Time_SetVal.time_mon--;
  328.                             if(Time_SetVal.time_mon < 1)
  329.                                 Time_SetVal.time_mon = 12;
  330.                             break;
  331.                         case 3:
  332.                             Time_SetVal.time_day--;
  333.                             if((Time_SetVal.time_mon == 1) || (Time_SetVal.time_mon == 3) || (Time_SetVal.time_mon == 5) || (Time_SetVal.time_mon == 7) || \
  334.                                     (Time_SetVal.time_mon == 8) || (Time_SetVal.time_mon == 10) || (Time_SetVal.time_mon == 12))
  335.                             {
  336.                                 if(Time_SetVal.time_day < 1)
  337.                                     Time_SetVal.time_day = 31;
  338.                             }
  339.                             else if((Time_SetVal.time_mon == 4) || (Time_SetVal.time_mon == 6) || (Time_SetVal.time_mon == 9) || (Time_SetVal.time_mon == 11))
  340.                             {
  341.                                 if(Time_SetVal.time_day < 1)
  342.                                     Time_SetVal.time_day = 30;
  343.                             }
  344.                             else if(DS3231_Check_Leapyear(Time_SetVal.time_year))
  345.                             {
  346.                                 if(Time_SetVal.time_day < 1)
  347.                                     Time_SetVal.time_day = 29;
  348.                             }
  349.                             else
  350.                             {
  351.                                 if(Time_SetVal.time_day < 1)
  352.                                     Time_SetVal.time_day = 28;
  353.                             }
  354.                             break;
  355.                         case 4:
  356.                             Time_SetVal.time_hour--;
  357.                             if(Time_SetVal.time_hour >= 0xfe)
  358.                                 Time_SetVal.time_hour = 23;
  359.                             break;
  360.                         case 5:
  361.                             Time_SetVal.time_min--;
  362.                             if(Time_SetVal.time_min >= 0xfe)
  363.                                 Time_SetVal.time_min = 59;
  364.                             break;
  365.                         case 6:
  366.                             Time_SetVal.time_sec--;
  367.                             if(Time_SetVal.time_sec >= 0xfe)
  368.                                 Time_SetVal.time_sec = 59;
  369.                             break;
  370.                         default:
  371.                             break;
  372.                     }
  373.                 }
  374.                 break;
  375.             case DISP_ORDER_TEMP://Display Temperature
  376.                 break;
  377.             case DISP_ORDER_TIME_TEMP://Display time and temperature in turn
  378.                 break;
  379.             case DISP_ORDER_CHS://Display Chinese Character
  380.                 DISP_CHS_IDX--;
  381.                 if(DISP_CHS_IDX < 1)
  382.                     DISP_CHS_IDX = DISP_CHS_IDX_MAX;
  383.                 break;
  384.             case DISP_ORDER_SPEC://Display Spectrum
  385.                 break;
  386.             default:
  387.                 break;
  388.         }
  389.     }
  390.     if(BUTTON_PORT_IFG & BUTTON_UP)
  391.     {
  392.         switch(FUNC_SWITCH)
  393.         {
  394.             case DISP_ORDER_EMOJI://Display Emoji
  395.                 DISP_EMOJI_NEXT = DISP_EMOJI_NOW - 1;
  396.                 if(DISP_EMOJI_NEXT == 0xff)
  397.                     DISP_EMOJI_NEXT = DISP_EMOJI_MAX;
  398.                 Disp_Emoji_Trans(DISP_EMOJI_NOW, DISP_EMOJI_NEXT, DISP_EMOJI_TRANS_DIR);
  399.                 DISP_EMOJI_NOW = DISP_EMOJI_NEXT;
  400.                 break;
  401.             case DISP_ORDER_TIME://Display and adjust Time
  402.                 if(Time_Set == 1)
  403.                 {
  404.                     switch(Time_Set_Idx)
  405.                     {
  406.                         case 1:
  407.                             Time_SetVal.time_year++;
  408.                             if(Time_SetVal.time_year > 2099)
  409.                                 Time_SetVal.time_year = 2010;
  410.                             break;
  411.                         case 2:
  412.                             Time_SetVal.time_mon++;
  413.                             if(Time_SetVal.time_mon > 12)
  414.                                 Time_SetVal.time_mon = 1;
  415.                             break;
  416.                         case 3:
  417.                             Time_SetVal.time_day++;
  418.                             if((Time_SetVal.time_mon == 1) || (Time_SetVal.time_mon == 3) || (Time_SetVal.time_mon == 5) || (Time_SetVal.time_mon == 7) || \
  419.                                     (Time_SetVal.time_mon == 8) || (Time_SetVal.time_mon == 10) || (Time_SetVal.time_mon == 12))
  420.                             {
  421.                                 if(Time_SetVal.time_day > 31)
  422.                                     Time_SetVal.time_day = 1;
  423.                             }
  424.                             else if((Time_SetVal.time_mon == 4) || (Time_SetVal.time_mon == 6) || (Time_SetVal.time_mon == 9) || (Time_SetVal.time_mon == 11))
  425.                             {
  426.                                 if(Time_SetVal.time_day > 30)
  427.                                     Time_SetVal.time_day = 1;
  428.                             }
  429.                             else if(DS3231_Check_Leapyear(Time_SetVal.time_year))
  430.                             {
  431.                                 if(Time_SetVal.time_day > 29)
  432.                                     Time_SetVal.time_day = 1;
  433.                             }
  434.                             else
  435.                             {
  436.                                 if(Time_SetVal.time_day > 28)
  437.                                     Time_SetVal.time_day = 1;
  438.                             }
  439.                             break;
  440.                         case 4:
  441.                             Time_SetVal.time_hour++;
  442.                             if(Time_SetVal.time_hour > 23)
  443.                                 Time_SetVal.time_hour = 0;
  444.                             break;
  445.                         case 5:
  446.                             Time_SetVal.time_min++;
  447.                             if(Time_SetVal.time_min > 59)
  448.                                 Time_SetVal.time_min = 0;
  449.                             break;
  450.                         case 6:
  451.                             Time_SetVal.time_sec++;
  452.                             if(Time_SetVal.time_sec > 59)
  453.                                 Time_SetVal.time_sec = 0;
  454.                             break;
  455.                         default:
  456.                             break;
  457.                     }
  458.                 }
  459.                 break;
  460.             case DISP_ORDER_TEMP://Display Temperature
  461.                 break;
  462.             case DISP_ORDER_TIME_TEMP://Display time and temperature in turn
  463.                 break;
  464.             case DISP_ORDER_CHS://Display Chinese Character
  465.                 DISP_CHS_IDX++;
  466.                 if(DISP_CHS_IDX > DISP_CHS_IDX_MAX)
  467.                     DISP_CHS_IDX = 1;
  468.                 break;
  469.             case DISP_ORDER_SPEC://Display Spectrum
  470.                 break;
  471.             default:
  472.                 break;
  473.         }
  474.     }
  475.     if(BUTTON_PORT_IFG & BUTTON_FUNC)
  476.     {
  477.         FUNC_SWITCH++;
  478.         GLOBE_STATIC_RESET = 1;
  479.         if(FUNC_SWITCH > FUNC_MAX)
  480.             FUNC_SWITCH = 1;
  481.         {
  482.             Time_Set = 0;
  483.             Time_Set_Idx = 0;//Press FUNC while adjusting time will discard time adjustment
  484.         }
  485.     }
  486.     if(BUTTON_PORT_IFG & BUTTON_SET)
  487.     {
  488.         switch(FUNC_SWITCH)
  489.         {
  490.             case DISP_ORDER_EMOJI://Display Emoji
  491.                 DISP_EMOJI_TRANS_DIR++;
  492.                 if(DISP_EMOJI_TRANS_DIR > DISP_EMOJI_TRANS_DIR_MAX)
  493.                     DISP_EMOJI_TRANS_DIR = 1;
  494.                 break;
  495.             case DISP_ORDER_TIME://Display and adjust Time
  496.                 if(Time_Set == 0)
  497.                 {
  498.                     Time_Set = 1;
  499.                     Time_SetVal.time_day = Time_Read.time_day;
  500.                     Time_SetVal.time_hour = Time_Read.time_hour;
  501.                     Time_SetVal.time_hour_am_pm = Time_Read.time_hour_am_pm;
  502.                     Time_SetVal.time_hour_format = Time_Read.time_hour_format;
  503.                     Time_SetVal.time_min = Time_Read.time_min;
  504.                     Time_SetVal.time_mon = Time_Read.time_mon;
  505.                     Time_SetVal.time_sec = Time_Read.time_sec;
  506.                     Time_SetVal.time_year = Time_Read.time_year;
  507.                 }
  508.                 else
  509.                 {
  510.                     Time_Set_Idx++;
  511.                     if(Time_Set_Idx > 6)
  512.                     {
  513.                         Time_Set = 0;
  514.                         Time_Set_Idx = 0;
  515.                         DS3231_Write_Time();//Save time adjustment here
  516.                         DS3231_Read_Time_to_Str();//Refresh Time_Read variable
  517.                     }
  518.                 }
  519.                 break;
  520.             case DISP_ORDER_TEMP://Display Temperature
  521.                 break;
  522.             case DISP_ORDER_TIME_TEMP://Display time and temperature in turn
  523.                 break;
  524.             case DISP_ORDER_CHS://Display Chinese Character
  525.                 break;
  526.             case DISP_ORDER_SPEC://Display Spectrum
  527.                 break;
  528.             default:
  529.                 break;
  530.         }
  531.     }
  532.     BUTTON_PORT_IFG = 0x00;
  533. }

复制代码

程序和原理图下载:
原理图、PCB_PDF档.zip (756.49 KB, 下载次数: 9)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表