OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9054|回复: 16

求助!关于emWin动态数值显示

[复制链接]

4

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-25
在线时间
23 小时
发表于 2018-3-25 13:40:49 | 显示全部楼层 |阅读模式
1金钱
请问emWin怎么在液晶屏上显示动态变化的数值?我想在emWin上显示RTC实时时钟,我用的是GUI_DispDecAt()函数显示数值,可是当数值变化时新数值会叠加在旧数值上显示。
我尝试在while(1)循环中加入GUI_Clear()清屏函数,可是效果是整个屏幕不断闪烁,不知道怎么设置相关参数,求赐教~

最佳答案

查看完整内容[请看2#楼]

下载F429或者F767开发板的emwin例程,里面的TEXT控件例程
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-3-25 13:40:50 | 显示全部楼层
下载F429或者F767开发板的emwin例程,里面的TEXT控件例程
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-25
在线时间
23 小时
 楼主| 发表于 2018-3-25 17:03:03 | 显示全部楼层
zuozhongkai 发表于 2018-3-25 16:38
下载F429或者F767开发板的emwin例程,里面的TEXT控件例程

请问老师,我的板子是Mini板,其他板子的例程也能适用吗?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-3-25 17:20:25 | 显示全部楼层
Lanny 发表于 2018-3-25 17:03
请问老师,我的板子是Mini板,其他板子的例程也能适用吗?

可以,emwin相关的代码都是通用的
开往春天的手扶拖拉机
回复

使用道具 举报

12

主题

54

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
1070
注册时间
2015-10-21
在线时间
128 小时
发表于 2020-7-15 10:27:34 | 显示全部楼层
请问楼主的问题是怎么解决的呢?
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-22 16:42:08 | 显示全部楼层
我想在同一个窗口dialog,同时显示dht11的温湿度值和RTC时钟值。我现在只定义了一个窗口定时器,现在温湿度值显示正常了,可是只要把RTC值一加,程序就死机了,不知道是什么原因,困扰了好几天,也解决不了,不知道是什么原因?
有知道的大神麻烦解答一下, 谢谢,谢谢!
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-10-22 16:52:41 | 显示全部楼层
jinniuxing 发表于 2020-10-22 16:42
我想在同一个窗口dialog,同时显示dht11的温湿度值和RTC时钟值。我现在只定义了一个窗口定时器,现在温湿度 ...

Show me your code!
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 08:35:26 | 显示全部楼层
/*********************************************************************
*                                                                    *
*                SEGGER Microcontroller GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
*                                                                    *
**********************************************************************
*                                                                    *
* C-file generated by:                                               *
*                                                                    *
*        GUI_Builder for emWin version 5.44                          *
*        Compiled Nov 10 2017, 08:53:57                              *
*        (c) 2017 Segger Microcontroller GmbH & Co. KG               *
*                                                                    *
**********************************************************************
*                                                                    *
*        Internet: www.segger.com  Support: support@segger.com       *
*                                                                    *
**********************************************************************
*/

// USER START (Optionally insert additional includes)
// USER END

#include "DIALOG.h"

#include "led.h"
#include "lcd.h"
#include "usart.h"
#include "touch.h"                         //2020-9-22
#include "dht11.h"                         //2020-10-8
#include "rtc.h"

#include "stdio.h"
#include "string.h"                        //2020-10-13  sprintf((char *)dtbuf,"Longitude:%.5f %1c   ",tp/=100000,gpsx.ewhemi);        //òyèë°ÑêyÖμ×a»ˉÎa×Ö·û′®
/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_TEXT_0 (GUI_ID_USER + 0x03)
#define ID_EDIT_0 (GUI_ID_USER + 0x04)
#define ID_TEXT_1 (GUI_ID_USER + 0x05)
#define ID_TEXT_2 (GUI_ID_USER + 0x06)
#define ID_EDIT_1 (GUI_ID_USER + 0x07)
#define ID_TEXT_3 (GUI_ID_USER + 0x08)
#define ID_TEXT_4 (GUI_ID_USER + 0x09)                //èÕÆú
#define ID_TEXT_5 (GUI_ID_USER + 0x0a)                //ê±¼ä

// USER START (Optionally insert additional defines)
// USER END

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

// USER START (Optionally insert additional static data)
// USER END

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 2, 0, 320, 240, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Menu1", ID_BUTTON_0, 31, 188, 80, 20, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Menu2", ID_BUTTON_1, 196, 188, 80, 20, 0, 0x0, 0 },
  
  { TEXT_CreateIndirect, "TEMP:", ID_TEXT_0, 109, 71, 38, 20, 0, 0x0, 0 },
  { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 146, 71, 44, 20, 0, 0x64, 0 },
  { TEXT_CreateIndirect, "'C", ID_TEXT_1, 194, 71, 31, 20, 0, 0x0, 0 },
  
  { TEXT_CreateIndirect, "HUMI:", ID_TEXT_2, 109, 103, 37, 20, 0, 0x0, 0 },
  { EDIT_CreateIndirect, "Edit", ID_EDIT_1, 146, 102, 44, 20, 0, 0x64, 0 },
  { TEXT_CreateIndirect, "%RH", ID_TEXT_3, 194, 104, 32, 21, 0, 0x0, 0 },
  //{ TEXT_CreateIndirect, "data", ID_TEXT_4, 116, 169, 80, 20, 0, 0x64, 0 },
  //{ TEXT_CreateIndirect, "time", ID_TEXT_5, 122, 187, 80, 20, 0, 0x64, 0 },
  { TEXT_CreateIndirect, "data", ID_TEXT_4, 109, 143, 80, 20, 0, 0x64, 0 },
  { TEXT_CreateIndirect, "time", ID_TEXT_5, 113, 167, 80, 20, 0, 0x64, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/

// USER START (Optionally insert additional static code)
// USER END

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int     NCode;
  int     Id;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId) {
                                                                                case WM_INIT_DIALOG:                                          //3õê¼»ˉÏûÏ¢
    //
    // Initialization of 'Edit'
    //
                                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
    //EDIT_SetText(hItem, "22");
    //EDIT_SetText(hItem, temperature);
           //
    // Initialization of 'Edit'
    //
                                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
    //EDIT_SetText(hItem, "65");
    //EDIT_SetText(hItem,humidity );
          //
    // Initialization of '%RH'
    //
                                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);//guibuilder ÖDóD¸33õÖμμĿؼt£¬»áÕaàïÔúÖDÖ′DD
                                                                                                TEXT_SetFont(hItem, GUI_FONT_24B_ASCII);
    // USER START (Optionally insert additional code for further widget initialization)
    // USER END                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
                                                TEXT_SetText(hItem, "2020/10/17");
                                                TEXT_SetFont(hItem, GUI_FONT_16B_ASCII);
                                                
                                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
                                                TEXT_SetFont(hItem, GUI_FONT_16B_ASCII);
                                                TEXT_SetText(hItem, "15:10:10");
                                                                                               
                                                                                        break;
                                                                                        case WM_NOTIFY_PARENT:
                                                                                                        Id    = WM_GetId(pMsg->hWinSrc);
                                                                                                        NCode = pMsg->Data.v;
                                                                                                        switch(Id) {
                                                                                                                                                case ID_BUTTON_0: // Notifications sent by 'Menu1'
                                                                                                                                                                switch(NCode) {
                                                                                                                                                                                                                        case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
                                                                                                                                                                                                                        break;
                                                                                                                                                                                                                        case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                                                                                                                                                                                                                                        LED2=!LED2;                            //2020-9-22 led2è¡·′
                                                                                                                                                                                                                                        GUI_EndDialog(pMsg->hWin, 0);          //2020-9-18 ½áêø±¾¶Ô»°¿ò
                                                                                                                                                                                                                                        Createmenu1();                         //2020-9-18 ′′½¨òaÏÔê¾μĶԻ°¿ò,¼′¾íêÇ1رÕá˱¾2ã¶Ô»°¿ò£¬ÏÔê¾DÂμĶԻ°¿ò£¬½ø¶øêμÏÖáËÇD»»½çÃæ1                  
        
        // USER END
                                                                                                                                                                                                                        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
                                                                                                                                                                                                        }
                                                                                                                                                        break;
                                                                                                                                                        case ID_BUTTON_1: // Notifications sent by 'Menu2'
                                                                                                                                                                        switch(NCode) {
                                                                                                                                                                                                                                case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
                                                                                                                                                                                                                                break;
                                                                                                                                                                                                                                case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                                                                                                                                                                                                                                                LED2=!LED2;                            //2020-9-22 led2è¡·′
         
                                                                                                                                                                                                                                                GUI_EndDialog(pMsg->hWin, 0);          //2020-9-18 ½áêø±¾¶Ô»°¿ò
                                                                                                                                                                                                                                                Createmenu2();                         //2020-9-18 ′′½¨òaÏÔê¾μĶԻ°¿ò,¼′¾íêÇ1رÕá˱¾2ã¶Ô»°¿ò£¬ÏÔê¾DÂμĶԻ°¿ò£¬½ø¶øêμÏÖáËÇD»»μ½½çÃæ2
         
        
        // USER END
                                                                                                                                                                                                                                break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
                                                                                                                                                                                                                        }
                                                                                                                                                                break;
                                                                                                                                                                case ID_EDIT_0: // Notifications sent by 'Edit'
                                                                                                                                                                                switch(NCode) {
                                                                                                                                                                                                                                        case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
                                                                                                                                                                                                                                        break;
                                                                                                                                                                                                                                        case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        
        
        // USER END
                                                                                                                                                                                                                                        break;
                                                                                                                                                                                                                                        case WM_NOTIFICATION_VALUE_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
                                                                                                                                                                                                                                        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
                                                                                                                                                                                                                                }
                                                                                                                                                                        break;
                                                                                                                                                                        case ID_EDIT_1: // Notifications sent by 'Edit'
                                                                                                                                                                                        switch(NCode) {
                                                                                                                                                                                                                                                case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
                                                                                                                                                                                                                                                break;
                                                                                                                                                                                                                                                case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
         
         // USER END
                                                                                                                                                                                                                                                break;
                                                                                                                                                                                                                                                case WM_NOTIFICATION_VALUE_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
                                                                                                                                                                                                                                                break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
                                                                                                                                                                                                                                        }
                                                                                                                                                                        break;
    // USER START (Optionally insert additional code for further Ids)
    // USER END
                                                                                                                                        }
                                                                                        break;
  // USER START (Optionally insert additional message handling)
  // USER END
                                                                                        case WM_TIMER:                                            //2020-10-13  ′°¿ú¶¨ê±Æ÷ÏûÏ¢  
                                                                                                                //      GET_Data_DHT11();                                      //2020-10-13 »ñè¡êμê±êyÖμ
                                                                                                                DISPLAY_DATA_DHT11(pMsg);                                  //2020-10-13 ¸üDÂêyÖμ
                                                                                                    //DISPLAY_RTC(pMsg);                            //2020-10-13 ¸üDÂêyÖμ
                                                                                                      
                                                                                                                WM_RestartTimer(pMsg->Data.v, 100);           //2020-10-13 ÖØÆô′°¿ú¶¨ê±Æ÷
                                                                                        break;                                                 
                                                                                        default:
                                                                                                        WM_DefaultProc(pMsg);
                                                                                        break;
                                                                        }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateFramewin
*/
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
       
  WM_CreateTimer(WM_GetClientWindow(hWin), 0, 100, 0);            //2020-10-13 ¶¨ê±Æ÷»ñè¡′°¿úμľä±ú,100ms
       
  return hWin;
}

// USER START (Optionally insert additional public code)

/*********************************************************************
*
*       _cbDialog
*/
void DISPLAY_DATA_DHT11(WM_MESSAGE *pMsg)
{
        char temperature_s[10];              
        char humidity_s[10];
        WM_HWIN hItem;
        WM_HWIN hWin = pMsg->hWin;
       
    /*****                                ÎÂ¶è                                *******/
    sprintf(temperature_s, "%d", temperature);                                                                      //2020-10-13 ζèêy¾Y×a»ˉ3é×Ö·û′®
    hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
    EDIT_SetText(hItem, temperature_s);
    EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    EDIT_SetFont(hItem, GUI_FONT_32_ASCII);

    /*****                                êa¶è                                *******/
    sprintf(humidity_s, "%d",humidity);                                                                             //2020-10-13 êa¶èêy¾Y×a»ˉ3é×Ö·û′®
    hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
    EDIT_SetText(hItem, humidity_s);
    EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    EDIT_SetFont(hItem, GUI_FONT_32_ASCII);
}

/**************************************************************************************************************************************************
ÏÔê¾RTCèÕÆúóëê±¼ä
***************************************************************************************************************************************************/
void DISPLAY_RTC(WM_MESSAGE *pMsg)
{
    char date_s[6];//èÕÆú
        char time_s[6];//ê±¼ä
          WM_HWIN hItem;
        WM_HWIN hWin = pMsg->hWin;
       
    sprintf(date_s,"%02d:%02d:%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);          //ÄêÔÂèÕ
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
        TEXT_SetText(hItem, date_s);
        TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
        //printf("Date: %02d-%02d-%02d\r\n",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
       
       
        sprintf(time_s,"%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);    //ê±·ÖÃë
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
        TEXT_SetText(hItem, time_s);
        TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
        //printf("Time: %02d-%02d-%02d\r\n",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
       
}       

void DISPLAY_RTC1(void)//ÏÔê¾RTCèÕÆúóëê±¼ä
{
   char date_s[6];//èÕÆú
   char time_s[6];//ê±¼ä
//   sprintf((char*)tbuf,"Time:%02d:%02d:%02d",hour,min,sec);
//   GUI_DispStringAt(tbuf,30,200);
//   sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",year,month,date);  

     sprintf(time_s,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
     GUI_DispStringAt(time_s,30,200);
     sprintf(date_s,"Date:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);  
     GUI_DispStringAt(date_s,50,200);

}
///********************************  emwinÖ÷oˉêy **************************************************************************************************/
void MainTask(void)
{
  GUI_SetBkColor(GUI_BLUE);
  GUI_Clear();
  
  GUI_CURSOR_Show();

  GUI_SetColor(GUI_WHITE);
  GUI_SetFont(GUI_FONT_32B_1);
  
  GUI_DispString("Hello World!\r\nNO RTOS");
        printf("\r\n ********** emwin start *********** \r\n");
        delay_ms(1000);
        //GUI_SetOrientation(0);                                                                                        //2020-9-6 éèÖÃÎaoáÆá ¸Ä2»1yà′
        CreateFramewin();
       

  while(1)
  {
    //LED2_TOGGLE;
                //printf("\r\n ********** EmWin run *********** \r\n");
          //printf("\r\n ********** TP_Read_XY2() err! return 0 *********** \r\n");                                     //2020-9-26
          //printf("x=%d,y=%d \r\n",*x,*y);                                                                             //2020-9-26
        DHT11_Read_Data(&temperature,&humidity);                                                                                //¶áè¡ÎÂêa¶èÖμ
        printf("temperature=%d C',humidity=%d %RH\r\n",temperature,humidity);                                       //2020-9-26
//        printf("\r\n ********** TP_Read_XY2() ok! return 1 *********** \r\n");                                      //2020-9-13
//        printf("x=%d,y=%d \r\n",tp_dev.x[0],tp_dev.y[0]);                                                             //2020-9-26
         // LCD_ShowNum(30+40,150,temperature,2,16);                                                                            //test 2020-10-12          
    //LCD_ShowNum(30+40,170,humidity,2,16);                                                                                        //  
        RTC_GetTimes(RTC_Format_BIN);                                                                                   //2020-10-17 »ñè¡rtcê±¼ä×Ö½úDí       
        //RTC_GetTimes(RTC_Format_BCD); //test
//        printf("Date: %02d-%02d-%02d\r\n",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
//        printf("Time: %02d-%02d-%02d\r\n",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
        printf("Date: %d/%d/%d\r\n",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
        printf("Time: %d:%d:%d\r\n",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
    //TEXT_SetText(WM_GetDialogItem(hWin,ID_EDIT_0),temperature);
        LED1=!LED1;
        DISPLAY_RTC1();
    GUI_Delay(1000);
               
  }
}

// USER END

/*************************** End of file ****************************/
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 08:35:59 | 显示全部楼层

谢谢,大侠
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 09:02:48 | 显示全部楼层
  1. /*********************************************************************
  2. *                                                                    *
  3. *                SEGGER Microcontroller GmbH & Co. KG                *
  4. *        Solutions for real time microcontroller applications        *
  5. *                                                                    *
  6. **********************************************************************
  7. *                                                                    *
  8. * C-file generated by:                                               *
  9. *                                                                    *
  10. *        GUI_Builder for emWin version 5.44                          *
  11. *        Compiled Nov 10 2017, 08:53:57                              *
  12. *        (c) 2017 Segger Microcontroller GmbH & Co. KG               *
  13. *                                                                    *
  14. **********************************************************************
  15. *                                                                    *
  16. *        Internet: [url]www.segger.com[/url]  Support: [email]support@segger.com[/email]       *
  17. *                                                                    *
  18. **********************************************************************
  19. */

  20. // USER START (Optionally insert additional includes)
  21. // USER END

  22. #include "DIALOG.h"

  23. #include "led.h"
  24. #include "lcd.h"
  25. #include "usart.h"
  26. #include "touch.h"                         //2020-9-22
  27. #include "dht11.h"                         //2020-10-8
  28. #include "rtc.h"

  29. #include "stdio.h"
  30. #include "string.h"                        //2020-10-13  sprintf((char *)dtbuf,"Longitude:%.5f %1c   ",tp/=100000,gpsx.ewhemi);        //òyèë°ÑêyÖμ×a»ˉÎa×Ö·û′®
  31. /*********************************************************************
  32. *
  33. *       Defines
  34. *
  35. **********************************************************************
  36. */
  37. #define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
  38. #define ID_BUTTON_0 (GUI_ID_USER + 0x01)
  39. #define ID_BUTTON_1 (GUI_ID_USER + 0x02)
  40. #define ID_TEXT_0 (GUI_ID_USER + 0x03)
  41. #define ID_EDIT_0 (GUI_ID_USER + 0x04)
  42. #define ID_TEXT_1 (GUI_ID_USER + 0x05)
  43. #define ID_TEXT_2 (GUI_ID_USER + 0x06)
  44. #define ID_EDIT_1 (GUI_ID_USER + 0x07)
  45. #define ID_TEXT_3 (GUI_ID_USER + 0x08)
  46. #define ID_TEXT_4 (GUI_ID_USER + 0x09)                //èÕÆú
  47. #define ID_TEXT_5 (GUI_ID_USER + 0x0a)                //ê±¼ä

  48. // USER START (Optionally insert additional defines)
  49. // USER END

  50. /*********************************************************************
  51. *
  52. *       Static data
  53. *
  54. **********************************************************************
  55. */

  56. // USER START (Optionally insert additional static data)
  57. // USER END

  58. /*********************************************************************
  59. *
  60. *       _aDialogCreate
  61. */
  62. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  63.   { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 2, 0, 320, 240, 0, 0x0, 0 },
  64.   { BUTTON_CreateIndirect, "Menu1", ID_BUTTON_0, 31, 188, 80, 20, 0, 0x0, 0 },
  65.   { BUTTON_CreateIndirect, "Menu2", ID_BUTTON_1, 196, 188, 80, 20, 0, 0x0, 0 },
  66.   
  67.   { TEXT_CreateIndirect, "TEMP:", ID_TEXT_0, 109, 71, 38, 20, 0, 0x0, 0 },
  68.   { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 146, 71, 44, 20, 0, 0x64, 0 },
  69.   { TEXT_CreateIndirect, "'C", ID_TEXT_1, 194, 71, 31, 20, 0, 0x0, 0 },
  70.   
  71.   { TEXT_CreateIndirect, "HUMI:", ID_TEXT_2, 109, 103, 37, 20, 0, 0x0, 0 },
  72.   { EDIT_CreateIndirect, "Edit", ID_EDIT_1, 146, 102, 44, 20, 0, 0x64, 0 },
  73.   { TEXT_CreateIndirect, "%RH", ID_TEXT_3, 194, 104, 32, 21, 0, 0x0, 0 },
  74.   //{ TEXT_CreateIndirect, "data", ID_TEXT_4, 116, 169, 80, 20, 0, 0x64, 0 },
  75.   //{ TEXT_CreateIndirect, "time", ID_TEXT_5, 122, 187, 80, 20, 0, 0x64, 0 },
  76.   { TEXT_CreateIndirect, "data", ID_TEXT_4, 109, 143, 80, 20, 0, 0x64, 0 },
  77.   { TEXT_CreateIndirect, "time", ID_TEXT_5, 113, 167, 80, 20, 0, 0x64, 0 },
  78.   // USER START (Optionally insert additional widgets)
  79.   // USER END
  80. };

  81. /*********************************************************************
  82. *
  83. *       Static code
  84. *
  85. **********************************************************************
  86. */

  87. // USER START (Optionally insert additional static code)
  88. // USER END

  89. /*********************************************************************
  90. *
  91. *       _cbDialog
  92. */
  93. static void _cbDialog(WM_MESSAGE * pMsg) {
  94.   WM_HWIN hItem;
  95.   int     NCode;
  96.   int     Id;
  97.   // USER START (Optionally insert additional variables)
  98.   // USER END

  99.   switch (pMsg->MsgId) {
  100.                                                                                 case WM_INIT_DIALOG:                                          //3õê¼»ˉÏûÏ¢
  101.     //
  102.     // Initialization of 'Edit'
  103.     //
  104.                                                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
  105.     //EDIT_SetText(hItem, "22");
  106.     //EDIT_SetText(hItem, temperature);
  107.            //
  108.     // Initialization of 'Edit'
  109.     //
  110.                                                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
  111.     //EDIT_SetText(hItem, "65");
  112.     //EDIT_SetText(hItem,humidity );
  113.           //
  114.     // Initialization of '%RH'
  115.     //
  116.                                                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);//guibuilder ÖDóD¸33õÖμμĿؼt£¬»áÕaàïÔúÖDÖ′DD
  117.                                                                                                 TEXT_SetFont(hItem, GUI_FONT_24B_ASCII);
  118.     // USER START (Optionally insert additional code for further widget initialization)
  119.     // USER END                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
  120.                                                 TEXT_SetText(hItem, "2020/10/17");
  121.                                                 TEXT_SetFont(hItem, GUI_FONT_16B_ASCII);
  122.                                                 
  123.                                                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
  124.                                                 TEXT_SetFont(hItem, GUI_FONT_16B_ASCII);
  125.                                                 TEXT_SetText(hItem, "15:10:10");
  126.                                                                                                
  127.                                                                                         break;
  128.                                                                                         case WM_NOTIFY_PARENT:
  129.                                                                                                         Id    = WM_GetId(pMsg->hWinSrc);
  130.                                                                                                         NCode = pMsg->Data.v;
  131.                                                                                                         switch(Id) {
  132.                                                                                                                                                 case ID_BUTTON_0: // Notifications sent by 'Menu1'
  133.                                                                                                                                                                 switch(NCode) {
  134.                                                                                                                                                                                                                         case WM_NOTIFICATION_CLICKED:
  135.         // USER START (Optionally insert code for reacting on notification message)
  136.         // USER END
  137.                                                                                                                                                                                                                         break;
  138.                                                                                                                                                                                                                         case WM_NOTIFICATION_RELEASED:
  139.         // USER START (Optionally insert code for reacting on notification message)
  140.                                                                                                                                                                                                                                         LED2=!LED2;                            //2020-9-22 led2è¡·′
  141.                                                                                                                                                                                                                                         GUI_EndDialog(pMsg->hWin, 0);          //2020-9-18 ½áêø±¾¶Ô»°¿ò
  142.                                                                                                                                                                                                                                         Createmenu1();                         //2020-9-18 ′′½¨òaÏÔê¾μĶԻ°¿ò,¼′¾íêÇ1رÕá˱¾2ã¶Ô»°¿ò£¬ÏÔê¾DÂμĶԻ°¿ò£¬½ø¶øêμÏÖáËÇD»»½çÃæ1                  
  143.         
  144.         // USER END
  145.                                                                                                                                                                                                                         break;
  146.       // USER START (Optionally insert additional code for further notification handling)
  147.       // USER END
  148.                                                                                                                                                                                                         }
  149.                                                                                                                                                         break;
  150.                                                                                                                                                         case ID_BUTTON_1: // Notifications sent by 'Menu2'
  151.                                                                                                                                                                         switch(NCode) {
  152.                                                                                                                                                                                                                                 case WM_NOTIFICATION_CLICKED:
  153.         // USER START (Optionally insert code for reacting on notification message)
  154.         // USER END
  155.                                                                                                                                                                                                                                 break;
  156.                                                                                                                                                                                                                                 case WM_NOTIFICATION_RELEASED:
  157.         // USER START (Optionally insert code for reacting on notification message)
  158.                                                                                                                                                                                                                                                 LED2=!LED2;                            //2020-9-22 led2è¡·′
  159.          
  160.                                                                                                                                                                                                                                                 GUI_EndDialog(pMsg->hWin, 0);          //2020-9-18 ½áêø±¾¶Ô»°¿ò
  161.                                                                                                                                                                                                                                                 Createmenu2();                         //2020-9-18 ′′½¨òaÏÔê¾μĶԻ°¿ò,¼′¾íêÇ1رÕá˱¾2ã¶Ô»°¿ò£¬ÏÔê¾DÂμĶԻ°¿ò£¬½ø¶øêμÏÖáËÇD»»μ½½çÃæ2
  162.          
  163.         
  164.         // USER END
  165.                                                                                                                                                                                                                                 break;
  166.       // USER START (Optionally insert additional code for further notification handling)
  167.       // USER END
  168.                                                                                                                                                                                                                         }
  169.                                                                                                                                                                 break;
  170.                                                                                                                                                                 case ID_EDIT_0: // Notifications sent by 'Edit'
  171.                                                                                                                                                                                 switch(NCode) {
  172.                                                                                                                                                                                                                                         case WM_NOTIFICATION_CLICKED:
  173.         // USER START (Optionally insert code for reacting on notification message)
  174.         // USER END
  175.                                                                                                                                                                                                                                         break;
  176.                                                                                                                                                                                                                                         case WM_NOTIFICATION_RELEASED:
  177.         // USER START (Optionally insert code for reacting on notification message)
  178.         
  179.         
  180.         // USER END
  181.                                                                                                                                                                                                                                         break;
  182.                                                                                                                                                                                                                                         case WM_NOTIFICATION_VALUE_CHANGED:
  183.         // USER START (Optionally insert code for reacting on notification message)
  184.         // USER END
  185.                                                                                                                                                                                                                                         break;
  186.       // USER START (Optionally insert additional code for further notification handling)
  187.       // USER END
  188.                                                                                                                                                                                                                                 }
  189.                                                                                                                                                                         break;
  190.                                                                                                                                                                         case ID_EDIT_1: // Notifications sent by 'Edit'
  191.                                                                                                                                                                                         switch(NCode) {
  192.                                                                                                                                                                                                                                                 case WM_NOTIFICATION_CLICKED:
  193.         // USER START (Optionally insert code for reacting on notification message)
  194.         // USER END
  195.                                                                                                                                                                                                                                                 break;
  196.                                                                                                                                                                                                                                                 case WM_NOTIFICATION_RELEASED:
  197.         // USER START (Optionally insert code for reacting on notification message)
  198.          
  199.          // USER END
  200.                                                                                                                                                                                                                                                 break;
  201.                                                                                                                                                                                                                                                 case WM_NOTIFICATION_VALUE_CHANGED:
  202.         // USER START (Optionally insert code for reacting on notification message)
  203.         // USER END
  204.                                                                                                                                                                                                                                                 break;
  205.       // USER START (Optionally insert additional code for further notification handling)
  206.       // USER END
  207.                                                                                                                                                                                                                                         }
  208.                                                                                                                                                                         break;
  209.     // USER START (Optionally insert additional code for further Ids)
  210.     // USER END
  211.                                                                                                                                         }
  212.                                                                                         break;
  213.   // USER START (Optionally insert additional message handling)
  214.   // USER END
  215.                                                                                         case WM_TIMER:                                            //2020-10-13  ′°¿ú¶¨ê±Æ÷ÏûÏ¢  
  216.                                                                                                                 //      GET_Data_DHT11();                                      //2020-10-13 »ñè¡êμê±êyÖμ
  217.                                                                                                                 DISPLAY_DATA_DHT11(pMsg);                                  //2020-10-13 ¸üDÂêyÖμ
  218.                                                                                                     //DISPLAY_RTC(pMsg);                            //2020-10-13 ¸üDÂêyÖμ
  219.                                                                                                       
  220.                                                                                                                 WM_RestartTimer(pMsg->Data.v, 100);           //2020-10-13 ÖØÆô′°¿ú¶¨ê±Æ÷
  221.                                                                                         break;                                                 
  222.                                                                                         default:
  223.                                                                                                         WM_DefaultProc(pMsg);
  224.                                                                                         break;
  225.                                                                         }
  226. }

  227. /*********************************************************************
  228. *
  229. *       Public code
  230. *
  231. **********************************************************************
  232. */
  233. /*********************************************************************
  234. *
  235. *       CreateFramewin
  236. */
  237. WM_HWIN CreateFramewin(void);
  238. WM_HWIN CreateFramewin(void) {
  239.   WM_HWIN hWin;

  240.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  241.        
  242.   WM_CreateTimer(WM_GetClientWindow(hWin), 0, 100, 0);            //2020-10-13 ¶¨ê±Æ÷»ñè¡′°¿úμľä±ú,100ms
  243.        
  244.   return hWin;
  245. }

  246. // USER START (Optionally insert additional public code)

  247. /*********************************************************************
  248. *
  249. *       _cbDialog
  250. */
  251. void DISPLAY_DATA_DHT11(WM_MESSAGE *pMsg)
  252. {
  253.         char temperature_s[10];              
  254.         char humidity_s[10];
  255.         WM_HWIN hItem;
  256.         WM_HWIN hWin = pMsg->hWin;
  257.        
  258.     /*****                                ÎÂ¶è                                *******/
  259.     sprintf(temperature_s, "%d", temperature);                                                                      //2020-10-13 ζèêy¾Y×a»ˉ3é×Ö·û′®
  260.     hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
  261.     EDIT_SetText(hItem, temperature_s);
  262.     EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  263.     EDIT_SetFont(hItem, GUI_FONT_32_ASCII);

  264.     /*****                                êa¶è                                *******/
  265.     sprintf(humidity_s, "%d",humidity);                                                                             //2020-10-13 êa¶èêy¾Y×a»ˉ3é×Ö·û′®
  266.     hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
  267.     EDIT_SetText(hItem, humidity_s);
  268.     EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  269.     EDIT_SetFont(hItem, GUI_FONT_32_ASCII);
  270. }

  271. /**************************************************************************************************************************************************
  272. ÏÔê¾RTCèÕÆúóëê±¼ä
  273. ***************************************************************************************************************************************************/
  274. void DISPLAY_RTC(WM_MESSAGE *pMsg)
  275. {
  276.     char date_s[6];//èÕÆú
  277.         char time_s[6];//ê±¼ä
  278.           WM_HWIN hItem;
  279.         WM_HWIN hWin = pMsg->hWin;
  280.        
  281.     sprintf(date_s,"%02d:%02d:%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);          //ÄêÔÂèÕ
  282.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
  283.         TEXT_SetText(hItem, date_s);
  284.         TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  285.     TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
  286.         //printf("Date: %02d-%02d-%02d\r\n",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
  287.        
  288.        
  289.         sprintf(time_s,"%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);    //ê±·ÖÃë
  290.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
  291.         TEXT_SetText(hItem, time_s);
  292.         TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  293.     TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
  294.         //printf("Time: %02d-%02d-%02d\r\n",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
  295.        
  296. }       

  297. void DISPLAY_RTC1(void)//ÏÔê¾RTCèÕÆúóëê±¼ä
  298. {
  299.    char date_s[6];//èÕÆú
  300.    char time_s[6];//ê±¼ä
  301. //   sprintf((char*)tbuf,"Time:%02d:%02d:%02d",hour,min,sec);
  302. //   GUI_DispStringAt(tbuf,30,200);
  303. //   sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",year,month,date);  

  304.      sprintf(time_s,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
  305.      GUI_DispStringAt(time_s,30,200);
  306.      sprintf(date_s,"Date:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);  
  307.      GUI_DispStringAt(date_s,50,200);

  308. }
  309. ///********************************  emwinÖ÷oˉêy **************************************************************************************************/
  310. void MainTask(void)
  311. {
  312.   GUI_SetBkColor(GUI_BLUE);
  313.   GUI_Clear();
  314.   
  315.   GUI_CURSOR_Show();

  316.   GUI_SetColor(GUI_WHITE);
  317.   GUI_SetFont(GUI_FONT_32B_1);
  318.   
  319.   GUI_DispString("Hello World!\r\nNO RTOS");
  320.         printf("\r\n ********** emwin start *********** \r\n");
  321.         delay_ms(1000);
  322.         //GUI_SetOrientation(0);                                                                                        //2020-9-6 éèÖÃÎaoáÆá ¸Ä2»1yà′
  323.         CreateFramewin();
  324.        

  325.   while(1)
  326.   {
  327.     //LED2_TOGGLE;
  328.                 //printf("\r\n ********** EmWin run *********** \r\n");
  329.           //printf("\r\n ********** TP_Read_XY2() err! return 0 *********** \r\n");                                     //2020-9-26
  330.           //printf("x=%d,y=%d \r\n",*x,*y);                                                                             //2020-9-26
  331.         DHT11_Read_Data(&temperature,&humidity);                                                                                //¶áè¡ÎÂêa¶èÖμ
  332.         printf("temperature=%d C',humidity=%d %RH\r\n",temperature,humidity);                                       //2020-9-26
  333. //        printf("\r\n ********** TP_Read_XY2() ok! return 1 *********** \r\n");                                      //2020-9-13
  334. //        printf("x=%d,y=%d \r\n",tp_dev.x[0],tp_dev.y[0]);                                                             //2020-9-26
  335.          // LCD_ShowNum(30+40,150,temperature,2,16);                                                                            //test 2020-10-12          
  336.     //LCD_ShowNum(30+40,170,humidity,2,16);                                                                                        //  
  337.         RTC_GetTimes(RTC_Format_BIN);                                                                                   //2020-10-17 »ñè¡rtcê±¼ä×Ö½úDí       
  338.         //RTC_GetTimes(RTC_Format_BCD); //test
  339. //        printf("Date: %02d-%02d-%02d\r\n",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
  340. //        printf("Time: %02d-%02d-%02d\r\n",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
  341.         printf("Date: %d/%d/%d\r\n",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
  342.         printf("Time: %d:%d:%d\r\n",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
  343.     //TEXT_SetText(WM_GetDialogItem(hWin,ID_EDIT_0),temperature);
  344.         LED1=!LED1;
  345.         DISPLAY_RTC1();
  346.     GUI_Delay(1000);
  347.                
  348.   }
  349. }

  350. // USER END

  351. /*************************** End of file ****************************/
复制代码
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 09:10:18 | 显示全部楼层
emwin显示死机.png
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 09:11:28 | 显示全部楼层
TFTLCD_emwin_touch.rar (26.35 MB, 下载次数: 150)
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-10-23 09:22:17 | 显示全部楼层
本帖最后由 ufbycd 于 2020-10-23 09:24 编辑

date_s跟time_s长度6字节太小了,日期跟时间的格式化字符串长度远大于6,溢出缓存了!把缓存搞大。
sprintf(date_s,"%02d:%02d:%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
另外不要用sprintf,这个API不安全,用snprintf安全点。
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 09:35:15 | 显示全部楼层
ufbycd 发表于 2020-10-23 09:22
date_s跟time_s长度6字节太小了,日期跟时间的格式化字符串长度远大于6,溢出缓存了!把缓存搞大。
spri ...

哦,谢谢大侠回复,我调整后,再试一试
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3312
金钱
3312
注册时间
2015-4-19
在线时间
364 小时
发表于 2020-10-23 19:12:08 | 显示全部楼层
ufbycd 发表于 2020-10-23 09:22
date_s跟time_s长度6字节太小了,日期跟时间的格式化字符串长度远大于6,溢出缓存了!把缓存搞大。
spri ...

       正如大侠所说,改成data_s[30]和time_s[30],现在已经成功显示了RTC日期与时间,困扰差不多有10天左右,怎么都想不到是这里的问题。非常感谢!
       emwin运行起来以后,直接显示的函数DISPLAY_RTC1()不起作用;在 case WM_TIMER: 下调用DISPLAY_DATA_DHT11(pMsg)可以正常显示,但调用DISPLAY_RTC1()仍旧不起作用。
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2021-10-18
在线时间
0 小时
发表于 2021-10-18 11:44:31 | 显示全部楼层
jinniuxing 发表于 2020-10-23 19:12
正如大侠所说,改成data_s[30]和time_s[30],现在已经成功显示了RTC日期与时间,困扰差不多有10天 ...

请问 这个最后解决了吗?是怎么解决的
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-8-12
在线时间
23 小时
发表于 2022-4-20 19:53:34 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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