微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 电子工程师杂谈 > ucos ii下液晶菜单的设计

ucos ii下液晶菜单的设计

时间:10-02 整理:3721RD 点击:

最近公司里的废弃电路板比较多就是拿回来自己折腾玩了,
以前大学的时候用51做过数字万年历,但是51那可怜的资源真是设计起来麻烦的要死,现在在ARM7
上搞,简直很随意了。
其实原理也很简单没啥技术含量,纯属娱乐,就当做对ucos ii的学习了。

  1. #include "Menu.h"
  2. //Common
  3. //extern const stStateInfo NormalClock;
  4. const stMenuList *pMenuListEntry = NULL;

  5. //Home

  6. const char clockStr[] = {
  7.         MENU_ZH_CODE_START, 43,
  8.         MENU_ZH_CODE_START,        44,
  9. };
  10. static const stHomeIcon clockIcon = {
  11.         BMP_ICON_ID_CLOCK,
  12.         {clockStr, sizeof(clockStr)},
  13.         &NormalClock,
  14.         0x00000000,
  15. };
  16. const char calendarStr[] = {
  17.         MENU_ZH_CODE_START, 0,
  18.         MENU_ZH_CODE_START, 45,
  19. };
  20. static const stHomeIcon calendarIcon = {
  21.         BMP_ICON_ID_CALENDAR,
  22.         {calendarStr, sizeof(calendarStr)},
  23.         &NormalClock,
  24.         0x00000000,
  25. };
  26. const char gameStr[] = {
  27.         MENU_ZH_CODE_START, 46,
  28.         MENU_ZH_CODE_START, 47,
  29. };
  30. static const stHomeIcon gameIcon = {
  31.         BMP_ICON_ID_GAME,
  32.         {gameStr, sizeof(gameStr)},
  33.         &NormalClock,
  34.         0x00000000,
  35. };
  36. const char settingStr[] = {
  37.         MENU_ZH_CODE_START, 48,
  38.         MENU_ZH_CODE_START, 49,
  39. };
  40. static const stHomeIcon settingIcon = {
  41.         BMP_ICON_ID_SETTING,
  42.         {settingStr, sizeof(settingStr)},
  43.         &Menu,
  44.         (INT32U)&MenuSetList,
  45. };
  46. const char systemStr[] = {
  47.         MENU_ZH_CODE_START, 50,
  48.         MENU_ZH_CODE_START, 51,
  49. };
  50. static const stHomeIcon systemIcon = {
  51.         BMP_ICON_ID_SYSTEM,
  52.         {systemStr, sizeof(systemStr)},
  53.         &NormalClock,
  54.         0x00000000,
  55. };

  56. const stHomeIcon *HomeIcon[] = {
  57.         &clockIcon,
  58.     &calendarIcon,
  59.         &gameIcon,
  60.         &settingIcon,
  61.         &systemIcon,
  62. };

  63. const INT8U HomeIconTotalNum = sizeof(HomeIcon) / sizeof(stHomeIcon *);
  64. //Set menu
  65. static INT8U menuSetInputData[2] = {1, 1};
  66. #define MENU_SET_ITEM_ID                        0u

  67. #define MENU_SET_TIME_ITEM_ID                MENU_SET_ITEM_ID + 0u
  68. static const char menuSetTimeStr[] = {
  69.         MENU_ZH_CODE_START, 43,
  70.         MENU_ZH_CODE_START, 56,
  71.         MENU_ZH_CODE_START, 48,
  72.         MENU_ZH_CODE_START, 49
  73. };
  74. const stMenuItem MenuSetTime = {
  75.         0u,
  76.         MENU_SET_TIME_ITEM_ID,
  77.         {menuSetTimeStr, sizeof(menuSetTimeStr)},
  78.         &NormalClock,
  79. };

  80. #define MENU_SET_DATE_ITEM_ID                MENU_SET_TIME_ITEM_ID + 1u
  81. static const char menuSetDateStr[] = {
  82.         MENU_ZH_CODE_START, 0,
  83.         MENU_ZH_CODE_START, 13,
  84.         MENU_ZH_CODE_START, 48,
  85.         MENU_ZH_CODE_START, 49
  86. };
  87. const stMenuItem MenuSetDate = {
  88.         0u,
  89.         MENU_SET_DATE_ITEM_ID,
  90.         {menuSetDateStr, sizeof(menuSetDateStr)},
  91.         &SetDate,
  92. };

  93. #define MENU_SYSTEM_SET_ITEM_ID                MENU_SET_DATE_ITEM_ID + 1u
  94. static const char menuSystemSetStr[] = {
  95.         MENU_ZH_CODE_START, 50,
  96.         MENU_ZH_CODE_START, 51,
  97.         MENU_ZH_CODE_START, 48,
  98.         MENU_ZH_CODE_START, 49
  99. };
  100. const stMenuItem MenuSystemSet = {
  101.         3u,
  102.         MENU_SYSTEM_SET_ITEM_ID,
  103.         {menuSystemSetStr, sizeof(menuSystemSetStr)},
  104.         &MenuSystemSetList,
  105. };

  106. const stMenuItem *menuSetListGroup[] = {
  107.         &MenuSetTime,
  108.         &MenuSetDate,
  109.         &MenuSystemSet,
  110. };
  111. const stMenuList MenuSetList = {
  112.         sizeof(menuSetListGroup) / sizeof(stMenuItem *),
  113.         menuSetInputData,
  114.         &settingIcon.str,
  115.         NULL,
  116.         NULL,
  117.         menuSetListGroup,
  118. };
  119. //System set menu
  120. static INT8U menuSystemSetInputData[2] = {1, 1};
  121. #define MENU_SET_SYSTEM_ID                0u
  122. #define MENU_BACK_LIGHT_TIME_ITEM_ID                MENU_SET_SYSTEM_ID + 0u
  123. static const char menuBackLightTimeStr[] = {
  124.         MENU_ZH_CODE_START, 57,
  125.         MENU_ZH_CODE_START, 58,
  126.         MENU_ZH_CODE_START, 43,
  127.         MENU_ZH_CODE_START, 56
  128. };
  129. const stMenuItem MenuBackLightTime = {
  130.         0u,
  131.         MENU_BACK_LIGHT_TIME_ITEM_ID,
  132.         {menuBackLightTimeStr, sizeof(menuBackLightTimeStr)},
  133.         &NormalClock,
  134. };

  135. #define MENU_MENU_OVERTIME_ITEM_ID                MENU_BACK_LIGHT_TIME_ITEM_ID + 0u
  136. static const char menuOvertimeStr[] = {
  137.         MENU_ZH_CODE_START, 59,
  138.         MENU_ZH_CODE_START, 60,
  139.         MENU_ZH_CODE_START, 61,
  140.         MENU_ZH_CODE_START, 43,
  141.         MENU_ZH_CODE_START, 43,
  142.         MENU_ZH_CODE_START, 56
  143. };
  144. const stMenuItem MenuOvertime = {
  145.         0u,
  146.         MENU_MENU_OVERTIME_ITEM_ID,
  147.         {menuOvertimeStr, sizeof(menuOvertimeStr)},
  148.         &NormalClock,
  149. };

  150. #define MENU_LCD_CONTRAST_ITEM_ID                MENU_MENU_OVERTIME_ITEM_ID + 0u
  151. static const char menuLcdContrastStr[] = {
  152.         'L',
  153.         'C',
  154.         'D',
  155.         MENU_ZH_CODE_START, 64,
  156.         MENU_ZH_CODE_START, 65,
  157.         MENU_ZH_CODE_START, 66
  158. };
  159. const stMenuItem MenuLcdContrast = {
  160.         0u,
  161.         MENU_LCD_CONTRAST_ITEM_ID,
  162.         {menuLcdContrastStr, sizeof(menuLcdContrastStr)},
  163.         &NormalClock,
  164. };

  165. const stMenuItem *menuSystemSetListGroup[] = {
  166.         &MenuBackLightTime,
  167.         &MenuOvertime,
  168.         &MenuLcdContrast,
  169. };
  170. const stMenuList MenuSystemSetList = {
  171.         sizeof(menuSystemSetListGroup) / sizeof(stMenuItem *),
  172.         menuSystemSetInputData,
  173.         &MenuSystemSet.itemName,
  174.         &MenuSystemSet,
  175.         &MenuSetList,
  176.         menuSystemSetListGroup,
  177. };





复制代码

  1. #ifndef MENU_H_
  2. #define MENU_H_
  3. #include "Platform.h"
  4. #include "ucos_ii.h"
  5. #include "State.h"
  6. #define MENU_ZH_CODE_START                        0xA1

  7. #define HOME_ICON_ID_TYPE        INT8U

  8. struct ST_MENU_ITEM;
  9. struct ST_MENU_ITEM_STR;
  10. struct ST_MENU_LIST;

  11. typedef struct ST_MENU_ITEM_STR{
  12.         const char *pstr;
  13.         INT8U len;
  14. }stMenuItemStr;

  15. typedef struct ST_MENU_LIST {
  16.         INT8U itemNum;
  17.         INT8U *pdata;
  18.         const stMenuItemStr *pname;
  19.         const struct ST_MENU_ITEM *pparentItem;
  20.         const struct ST_MENU_LIST *pparentItemList;
  21.         const struct ST_MENU_ITEM **pItem;
  22. }stMenuList;

  23. typedef struct ST_MENU_ITEM {
  24.         INT8U subItemNum;
  25.         INT8U thisItemID;
  26.         stMenuItemStr itemName;
  27.         const void *pData;
  28. }stMenuItem;

  29. typedef struct {
  30.         const HOME_ICON_ID_TYPE iconID;
  31.         const stMenuItemStr str;
  32.         const struct ST_STATE_INFO *pstate;
  33.         INT32U data;
  34. }stHomeIcon;

  35. extern const stMenuList MenuSetList;
  36. extern const stMenuList MenuSystemSetList;
  37. extern const stMenuList *pMenuListEntry;

  38. extern const stHomeIcon *HomeIcon[];
  39. extern const INT8U HomeIconTotalNum;
  40. #endif /* MENU_H_ */

复制代码

  1. #include "State.h"
  2. #include "CalendarCalculated.h"

  3. //NormalClock data
  4. void State_NormalClock(void *ptr);
  5. const stStateInfo NormalClock = {
  6.         0x00000000,
  7.         State_NormalClock,
  8.         NULL,
  9. };
  10. //Home data
  11. void State_Home(void *ptr);
  12. static INT8U homeInputData[2] = {1, 1};
  13. const stStateInfo Home = {
  14.         0x00000000,
  15.         State_Home,
  16.         homeInputData,
  17. };

  18. //Power off data
  19. void State_PowerOff(void *ptr);
  20. static INT32U lastStateAddr = 0;
  21. const stStateInfo PowerOff = {
  22.         0x00000000,
  23.         State_PowerOff,
  24.         &lastStateAddr,
  25. };
  26. //Menu data
  27. void State_Menu(void *ptr);
  28. const stStateInfo Menu = {
  29.         (INT32U)&pMenuListEntry,
  30.         State_Menu,
  31.         NULL,
  32. };
  33. //Set date
  34. void State_SetDate(void *ptr);
  35. const stStateInfo SetDate = {
  36.         (INT32U)&pMenuListEntry,
  37.         State_SetDate,
  38.         (void *)&MenuSetList,
  39. };
  40. //Common data
  41. const stStateInfo *pState = &NormalClock;
  42. static void (*pTimeAction)(void);
  43. OS_EVENT *pStateQ;
  44. static stStateMsg stateMsg[STATE_MSG_SIZE];
  45. void *StateMsg[STATE_MSG_SIZE];
  46. static void __defaultEventProcess(INT8U *pexitFlag, stMSG *pmsg, void *ptr);

  47. //NormalClock
  48. static void __lunarCalendarDisplay(void)
  49. {
  50.         INT8U x = 48;
  51.         switch (lunaCalendarData.month)
  52.         {
  53.                 case 1:
  54.                         LCD_PutZH16x16(x, 4, 17, 1);
  55.                         break;
  56.                 case 2:
  57.                         LCD_PutZH16x16(x, 4, 2, 1);
  58.                         break;
  59.                 case 3:
  60.                         LCD_PutZH16x16(x, 4, 3, 1);
  61.                         break;
  62.                 case 4:
  63.                         LCD_PutZH16x16(x, 4, 4, 1);
  64.                         break;
  65.                 case 5:
  66.                         LCD_PutZH16x16(x, 4, 5, 1);
  67.                         break;
  68.                 case 6:
  69.                         LCD_PutZH16x16(x, 4, 6, 1);
  70.                         break;
  71.                 case 7:
  72.                         LCD_PutZH16x16(x, 4, 7, 1);
  73.                         break;
  74.                 case 8:
  75.                         LCD_PutZH16x16(x, 4, 8, 1);
  76.                         break;
  77.                 case 9:
  78.                         LCD_PutZH16x16(x, 4, 9, 1);
  79.                         break;
  80.                 case 10:
  81.                         LCD_PutZH16x16(x, 4, 10, 1);
  82.                         break;
  83.                 case 11:
  84.                         LCD_PutZH16x16(x, 4, 10, 1);
  85.                         x += 16;
  86.                         LCD_PutZH16x16(x, 4, 1, 1);
  87.                         break;
  88.                 case 12:
  89.                         LCD_PutZH16x16(x, 4, 10, 1);
  90.                         x += 16;
  91.                         LCD_PutZH16x16(x, 4, 2, 1);
  92.                         break;
  93.                 default:
  94.                         break;
  95.         }
  96.         x += 16;
  97.         LCD_PutZH16x16(x, 4, 19, 1);
  98.         if(lunaCalendarData.day < 11)
  99.         {
  100.                 //初
  101.                 x += 16;
  102.                 LCD_PutZH16x16(x, 4, 18, 1);
  103.                 x += 16;
  104.                 LCD_PutZH16x16(x, 4, lunaCalendarData.day, 1);
  105.         }
  106.         else if(lunaCalendarData.day < 20)
  107.         {
  108.                 //十
  109.                 x += 16;
  110.                 LCD_PutZH16x16(x, 4, 10, 1);
  111.                 x += 16;
  112.                 LCD_PutZH16x16(x, 4, lunaCalendarData.day % 10, 1);
  113.         }
  114.         else if(lunaCalendarData.day < 30)
  115.         {
  116.                 //廿
  117.                 x += 16;
  118.                 LCD_PutZH16x16(x, 4, 11, 1);
  119.                 x += 16;
  120.                 if(lunaCalendarData.day % 10)
  121.                         LCD_PutZH16x16(x, 4, lunaCalendarData.day % 10, 1);
  122.                 else
  123.                         LCD_PutZH16x16(x, 4, 10, 1);
  124.         }
  125.         else
  126.         {
  127.                 //三十
  128.                 x += 16;
  129.                 LCD_PutZH16x16(x, 4, 3, 1);
  130.                 x += 16;
  131.                 LCD_PutZH16x16(x, 4, 10, 1);
  132.         }
  133.         x += 16;
  134.         if(x < 128)
  135.         {
  136.                 LCD_PutMiddleString(x, 4, "  ", 1);
  137.         }

  138.         x = 64;
  139.         LCD_PutZH16x16(x, 2, lunaCalendarData.tianGan + 20, 1);
  140.         x += 16;
  141.         LCD_PutZH16x16(x, 2, lunaCalendarData.diZhi + 30, 1);
  142. }

  143. static void __NormalClock_TimeAction(void)
  144. {
  145.         INT8U err, x = 0;
  146.         INT8U h = 0;
  147.         INT8U m = 0;
  148.         INT8U s = 0;
  149.         INT8U d = 0;
  150.         INT8U month = 0;
  151.         INT8U date = 0;
  152.         INT8U year = 0;

  153.         stStateMsg *pStateMsg;
  154.         while(1)
  155.         {
  156.                 pStateMsg = (stStateMsg *)OSQPend(pStateQ, 10, &err);
  157.                 switch(err)
  158.                 {
  159.                 case OS_ERR_NONE:
  160.                         switch(pStateMsg->cmd)
  161.                         {
  162.                         case NORMAL_CLOCK_TIMEUPDATE:
  163.                                 x = 0;
  164.                                 LCD_PutLargeNumber(x, 0, ((h >> 4) & 0x0f), 1);
  165.                                 x += 12;
  166.                                 LCD_PutLargeNumber(x, 0, (h & 0x0f), 1);
  167.                                 x += 12;
  168.                                 if(s % 2)
  169.                                         LCD_PutLargeNumber(x, 0, 10, 1);
  170.                                 else
  171.                                         LCD_PutLargeNumber(x, 0, 11, 1);
  172.                                 x += 12;
  173.                                 LCD_PutLargeNumber(x, 0, ((m >> 4) & 0x0f), 1);
  174.                                 x += 12;
  175.                                 LCD_PutLargeNumber(x, 0, (m & 0x0f), 1);

  176.                                 break;
  177.                         case NORMAL_CLOCK_DATEUPDATE:
  178.                                 x = 0;
  179.                                 LCD_PutSmallChar(x, 3, '2', 1);
  180.                                 x += 6;
  181.                                 LCD_PutSmallChar(x, 3, '0', 1);
  182.                                 x += 6;
  183.                                 LCD_PutSmallChar(x, 3, '0' + ((year >> 4) & 0x0f), 1);
  184.                                 x += 6;
  185.                                 LCD_PutSmallChar(x, 3, '0' + (year & 0x0f), 1);

  186.                                 x += 12;
  187.                                 LCD_PutSmallChar(x, 3, '0' + ((month >> 4) & 0x0f), 1);
  188.                                 x += 6;
  189.                                 LCD_PutSmallChar(x, 3, '0' + (month & 0x0f), 1);

  190.                                 x += 12;
  191.                                 LCD_PutSmallChar(x, 3, '0' + ((date >> 4) & 0x0f), 1);
  192.                                 x += 6;
  193.                                 LCD_PutSmallChar(x, 3, '0' + (date & 0x0f), 1);

  194.                                 if(d == 7)
  195.                                         LCD_PutZH16x16(96, 0, 0, 1);
  196.                                 else
  197.                                         LCD_PutZH16x16(96, 0, d, 1);

  198.                                 solaCalendarToLunarCalendar(
  199.                                                                                         ((year >> 4) & 0x0f) * 10 +
  200.                                                                                                 (year & 0x0f) + 2000,
  201.                                                                                         ((month >> 4) & 0x0f) * 10 +
  202.                                                                                                 (month & 0x0f),
  203.                                                                                         ((date >> 4) & 0x0f) * 10 +
  204.                                                                                                 (date & 0x0f)
  205.                                                                                         );
  206.                                 __lunarCalendarDisplay();

  207.                                 break;

  208.                         case NORMAL_CLOCK_INIT:
  209.                                 LCD_Clear(0);

  210.                                 LCD_PutSmallChar(24, 3, '/', 1);
  211.                                 LCD_PutSmallChar(42, 3, '/', 1);

  212.                                 LCD_PutZH16x16(64, 0, 12, 1);
  213.                                 LCD_PutZH16x16(80, 0, 13, 1);
  214.                                 LCD_PutZH16x16(96, 2, 20, 1);

  215.                                 LCD_PutBmp(48, 6, BMP_BUTTON_ID_HOME, 1);
  216.                                 LCD_PutBmp(48, 7, BMP_BUTTON_ID_LAMP, 1);

  217.                                 DS1337_Getc(RTC_HOUR, &h);
  218.                                 DS1337_Getc(RTC_MIN, &m);
  219.                                 DS1337_Getc(RTC_SEC, &s);

  220.                                 DS1337_Getc(RTC_MONTH, &month);
  221.                                 DS1337_Getc(RTC_DATE, &date);
  222.                                 DS1337_Getc(RTC_YEAR, &year);

  223.                                 DS1337_Getc(RTC_DAY, &d);

  224.                                 if((h < 6) || (h > 18))
  225.                                 {
  226.                                         LCD_PutBmp(0, 4, BMP_PIC_ID_NIGHT, 1);
  227.                                 }
  228.                                 else if((h >= 6) && (h < 10))
  229.                                 {
  230.                                         LCD_PutBmp(0, 4, BMP_PIC_ID_MORNING, 1);
  231.                                 }
  232.                                 else if((h >= 10) && (h < 14))
  233.                                 {
  234.                                         LCD_PutBmp(0, 4, BMP_PIC_ID_NOON, 1);
  235.                                 }
  236.                                 else
  237.                                 {
  238.                                         LCD_PutBmp(0, 4, BMP_PIC_ID_AFTERNOON, 1);
  239.                                 }
  240.                                 pStateMsg = &stateMsg[1];
  241.                                 pStateMsg->cmd = NORMAL_CLOCK_TIMEUPDATE;
  242.                                 OSQPost(pStateQ, (void *)pStateMsg);

  243.                                 pStateMsg = &stateMsg[2];
  244.                                 pStateMsg->cmd = NORMAL_CLOCK_DATEUPDATE;
  245.                                 OSQPost(pStateQ, (void *)pStateMsg);
  246.                                 break;
  247.                         case NORMAL_CLOCK_PICUPDATE:
  248.                                 LCD_PutBmp(0, 4, (INT8U)(INT32U)pStateMsg->pData, 1);
  249.                                 break;
  250.                         case STATE_EXIT:
  251.                                 return;
  252.                         default:
  253.                                 break;
  254.                         }
  255.                         break;
  256.                 case OS_ERR_TIMEOUT:
  257.                         {
  258.                                 INT8U tmpSec = s, tmpDate = date, tmpHour = h;
  259.                                 DS1337_Getc(RTC_HOUR,  &h);
  260.                                 DS1337_Getc(RTC_MIN,   &m);
  261.                                 DS1337_Getc(RTC_SEC,   &s);

  262.                                 DS1337_Getc(RTC_MONTH,  &month);
  263.                                 DS1337_Getc(RTC_DATE,   &date);
  264.                                 DS1337_Getc(RTC_YEAR,   &year);
  265.                                 if(s != tmpSec)
  266.                                 {
  267.                                         pStateMsg = &stateMsg[1];
  268.                                         pStateMsg->cmd = NORMAL_CLOCK_TIMEUPDATE;
  269.                                         OSQPost(pStateQ, (void *)pStateMsg);
  270.                                 }

  271.                                 if(date != tmpDate)
  272.                                 {
  273.                                         pStateMsg = &stateMsg[2];
  274.                                         pStateMsg->cmd = NORMAL_CLOCK_DATEUPDATE;
  275.                                         OSQPost(pStateQ, (void *)pStateMsg);
  276.                                 }

  277.                                 if((tmpHour != h) &&
  278.                                    ((h == 0x06) || (h == 0x10) || (h == 0x14) || (h == 0x18))
  279.                                    )
  280.                                 {
  281.                                         pStateMsg = &stateMsg[3];
  282.                                         pStateMsg->cmd = NORMAL_CLOCK_PICUPDATE;
  283.                                         switch(h)
  284.                                         {
  285.                                         case 0x06:
  286.                                                 pStateMsg->pData = (void *)BMP_PIC_ID_MORNING;
  287.                                                 break;
  288.                                         case 0x10:
  289.                                                 pStateMsg->pData = (void *)BMP_PIC_ID_NOON;
  290.                                                 break;
  291.                                         case 0x14:
  292.                                                 pStateMsg->pData = (void *)BMP_PIC_ID_AFTERNOON;
  293.                                                 break;
  294.                                         case 0x18:
  295.                                                 pStateMsg->pData = (void *)BMP_PIC_ID_NIGHT;
  296.                                                 break;
  297.                                         default:
  298.                                                 pStateMsg->pData = (void *)BMP_PIC_ID_MORNING;
  299.                                                 break;
  300.                                         }
  301.                                         OSQPost(pStateQ, (void *)pStateMsg);
  302.                                 }
  303.                         }
  304.                         break;
  305.                 default:
  306.                         OSTimeDly(10);
  307.                         break;
  308.                 }
  309.         }
  310. }

  311. static void __NormalClock_EventProcess(void *ptr)
  312. {
  313.         INT8U err, exitFlag = 1u;
  314.         stMSG *pmsg;
  315.         stStateMsg *pStateMsg = &stateMsg[0];
  316.         while(exitFlag)
  317.         {
  318.                 pmsg = (stMSG *)OSMboxPend(pMsgEvent, 0, &err);
  319.                 switch(pmsg->keyValue)
  320.                 {
  321.                 case KEY_VAL_LEFT:
  322.                         break;
  323.                 case KEY_VAL_RIGHT:
  324.                         break;
  325.                 case KEY_VAL_UP:
  326.                         pState = &Home;
  327.                         ((INT8U *)pState->pdata)[0] = 1;
  328.                         ((INT8U *)pState->pdata)[1] = 1;
  329.                         pStateMsg->cmd = STATE_EXIT;
  330.                         OSQPost(pStateQ, (void *)pStateMsg);
  331.                         return;
  332.                 case KEY_VAL_DOWN | KEY_VAL_LONG:
  333.                 case KEY_VAL_DOWN:
  334.                         FLASH_POWER? FLASH_POWER_OFF : FLASH_POWER_ON;
  335.                         break;
  336.                 default:
  337.                         __defaultEventProcess(&exitFlag, pmsg, ptr);
  338.                         break;
  339.                 }
  340.         }
  341. }

  342. void State_NormalClock(void *ptr)
  343. {
  344.         stStateMsg *pStateMsg = &stateMsg[0];
  345.         pTimeAction = __NormalClock_TimeAction;
  346.         pStateMsg->cmd = NORMAL_CLOCK_INIT;
  347.         OSQPost(pStateQ, (void *)pStateMsg);

  348.         __NormalClock_EventProcess(ptr);
  349. }
  350. //Home
  351. static void __Home_TimeAction(void)
  352. {
  353.         INT8U err, x = 0;
  354.         INT8U h = 0;
  355.         INT8U m = 0;
  356.         INT8U s = 0;
  357.         stStateMsg *pStateMsg;
  358.         INT8U iconIndex, dspIndex;
  359.         INT8U dspMaxIndex = HomeIconTotalNum > 4 ? 4 : HomeIconTotalNum;
  360.         while(1)
  361.         {
  362.                 pStateMsg = (stStateMsg *)OSQPend(pStateQ, 10, &err);
  363.                 switch(err)
  364.                 {
  365.                 case OS_ERR_NONE:
  366.                         switch(pStateMsg->cmd)
  367.                         {
  368.                         case HOME_INIT:
  369.                                 LCD_Clear(0);
  370.                                 LCD_PutBmp(0, 6, BMP_BUTTON_ID_ENTER, 1);
  371.                                 LCD_PutBmp(48, 6, BMP_BUTTON_ID_UP, 1);
  372.                                 LCD_PutBmp(48, 7, BMP_BUTTON_ID_DOWN, 1);
  373.                                 LCD_PutBmp(96, 6, BMP_BUTTON_ID_BACK, 1);

  374.                                 DS1337_Getc(RTC_HOUR,  &h);
  375.                                 DS1337_Getc(RTC_MIN,   &m);
  376.                                 DS1337_Getc(RTC_SEC,   &s);
  377.                                 dspIndex = ((INT8U *)pStateMsg->pData)[0];
  378.                                 iconIndex = ((INT8U *)pStateMsg->pData)[1];

  379.                                 pStateMsg = &stateMsg[1];
  380.                                 pStateMsg->cmd = HOME_ICONUPDATE;
  381.                                 pStateMsg->pData = (void *)&iconIndex;
  382.                                 OSQPost(pStateQ, (void *)pStateMsg);

  383.                                 pStateMsg = &stateMsg[2];
  384.                                 pStateMsg->cmd = HOME_TIMEUPDATE;
  385.                                 OSQPost(pStateQ, (void *)pStateMsg);

  386.                                 break;
  387.                         case HOME_ICONMOVELEFT:
  388.                                 iconIndex = (*(INT8U *)pStateMsg->pData);
  389.                                 if(iconIndex == HomeIconTotalNum)
  390.                                         dspIndex = dspMaxIndex;
  391.                                 else if(dspIndex > 1)
  392.                                         dspIndex--;
  393.                                 pStateMsg = &stateMsg[1];
  394.                                 pStateMsg->cmd = HOME_ICONUPDATE;
  395.                                 pStateMsg->pData = (void *)&iconIndex;
  396.                                 OSQPost(pStateQ, (void *)pStateMsg);
  397.                                 break;
  398.                         case HOME_ICONMOVERIGHT:
  399.                                 iconIndex = (*(INT8U *)pStateMsg->pData);
  400.                                 if(iconIndex == 1)
  401.                                         dspIndex = 1;
  402.                                 else if(dspIndex < dspMaxIndex)
  403.                                         dspIndex++;
  404.                        &nbs

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top