硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2117|回复: 2
收起左侧

[emWin] 什么鬼,电脑模拟可以,下载到板子上就不行了

[复制链接]

45

主题

45

回帖

45

积分

初级会员

积分
45
发表于 2017-9-21 09:20:32 | 显示全部楼层 |阅读模式
如题,下载到板子上出现几个问题
  1. #include "DIALOG.h"
  2. #include "DIALOG.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "CALENDAR.h"
  6. #include "DIALOG.h"
  7. #include "MESSAGEBOX.h"
  8. #include "EMWINGUI.h"
  9. #define ID_WINDOW_0    (GUI_ID_USER + 0x00)
  10. #define ID_TEXT_0    (GUI_ID_USER + 0x0B)
  11. #define ID_TEXT_1    (GUI_ID_USER + 0x0C)
  12. #define ID_SPINBOX_0    (GUI_ID_USER + 0x0D)
  13. #define ID_BUTTON_0    (GUI_ID_USER + 0x0E)
  14. #define ID_GRAPH_0    (GUI_ID_USER + 0x0F)
  15. #define ID_SPINBOX_1    (GUI_ID_USER + 0x10)
  16. #define ID_BUTTON_1    (GUI_ID_USER + 0x11)
  17. #define ID_BUTTON_2    (GUI_ID_USER + 0x12)
  18. #define ID_BUTTON_3    (GUI_ID_USER + 0x0A)
  19. static int temperature=20;     //温度
  20. static int humidity =20;     //湿度
  21. static int Atemperature = 5;     //温度
  22. static int Ahumidity = 10;     //湿度
  23. unsigned char w_year = 123;
  24. unsigned char w_month = 234;
  25. unsigned char w_date = 345;
  26. unsigned char chour = 456;
  27. unsigned char min = 567;
  28. unsigned char sec = 678; //年月日时分秒
  29. unsigned char week = 3; //星期
  30. #define  FONT_GEAR24 GUI_FONT_24B_ASCII//字体
  31. #define FONT_GEAR16  GUI_FONT_13_ASCII
  32. #define FONT_GEAR12  &GUI_Font10_1
  33. /*********************************************************************/
  34. #define BORDER_BOTTOM_A         160    //距离下边框刻度的尺寸160
  35. #define BORDER_LEFT_A           15  //距离左边框的尺寸15
  36. static GRAPH_SCALE_Handle hScaleV;       //垂直刻度句柄
  37. static GRAPH_SCALE_Handle hScaleH;       //水平刻度句柄
  38. #define SCALE_FACTOR 10
  39. unsigned i;
  40. char bufa[2];
  41. enum SENSOR_TYPE{ DHT11, DS18B20 };        //DHT11传感器,DS18B20传感器,芯片内部温度检测
  42. static enum SENSOR_TYPE sensor_type ;//默认为内部温度传感器
  43. static GUI_COLOR _aColor[] = { GUI_RED, GUI_GREEN, GUI_LIGHTBLUE }; // Array of colors for the GRAPH_DATA objects
  44. static I16 _aValue[3];
  45. static GRAPH_DATA_Handle  _ahData[3]; // Array of handles for the GRAPH_DATA objects
  46. static WM_HWIN _Font = 0;
  47. int t = 0;
  48. /*********************************************************************/
  49. // USER START (Optionally insert additional static data)
  50. // USER END
  51. /*********************************************************************
  52. *
  53. *       _aDialogCreate
  54. */
  55. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  56.     { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
  57.     { TEXT_CreateIndirect, "Text", ID_TEXT_0, 0, 20, 116, 80, 0, 0x64, 0 },
  58.     { TEXT_CreateIndirect, "Text", ID_TEXT_1, 0, 0, 317, 20, 0, 0x0, 0 },
  59.     { SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_0, 226, 35, 91, 44, 0, 0x0, 0 },
  60.     { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 234, 83, 80, 20, 0, 0x0, 0 },
  61.     { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 0, 105, 320, 135, 0, 0x0, 0 },
  62.     { SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_1, 123, 35, 91, 44, 0, 0x0, 0 },
  63.     { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 130, 83, 80, 20, 0, 0x0, 0 },
  64.     { BUTTON_CreateIndirect, " DHT11", ID_BUTTON_2, 240, 108, 64, 20, 0, 0x0, 0 },
  65.     { BUTTON_CreateIndirect, "Button", ID_BUTTON_3, 0, 0, 53, 20, 0, 0x0, 0 },
  66.     // USER START (Optionally insert additional widgets)
  67.     // USER END
  68. };
  69. /*********************************************************************/
  70. static void _AddValues(void) {
  71.     switch (sensor_type)
  72.     {
  73.         
  74.     case DHT11:
  75.         _aValue[1] = humidity;
  76.         _aValue[0] = temperature;
  77.         GRAPH_DATA_YT_AddValue(_ahData[0], _aValue[0] *1.5);//数据对象的句柄, /增加到数据对象的值
  78.         GRAPH_DATA_YT_AddValue(_ahData[1], _aValue[1] * 1.5);//数据对象的句柄, /增加到数据对象的值
  79.         break;
  80.     case DS18B20:
  81.         _aValue[1] = Ahumidity;
  82.         _aValue[0] = Atemperature;
  83.         GRAPH_DATA_YT_AddValue(_ahData[0], _aValue[0] * 1.5);//数据对象的句柄, /增加到数据对象的值
  84.         GRAPH_DATA_YT_AddValue(_ahData[1], _aValue[1] * 1.5);//数据对象的句柄, /增加到数据对象的值
  85.         break;
  86.     default:
  87.         break;
  88.     }
  89. }
  90. /**********************************************************************/
  91. static void Caculate_RTC(WM_MESSAGE * pMsg)
  92. {
  93.     WM_HWIN hWin = pMsg->hWin;
  94.     /*显示年月日 */
  95.     sprintf(bufa, "%2d年%2d月%2d日 %2d:%2d:%2d  ", w_year, w_month, w_date,chour, min, sec);
  96.     TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_1), bufa);
  97. switch (sensor_type){
  98.     case DHT11:
  99.     if ((temperature >= 0) && (temperature <= 10)) //1度到10度黄色防冻
  100.     {
  101.         sprintf(bufa, "%2d°C \n %2d %RH", temperature, humidity);
  102.         TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_YELLOW);
  103.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  104.     }
  105.     if ((temperature >= 11) && (temperature <= 20))  //10度到20度绿注意保暖
  106.     {
  107.         sprintf(bufa, "%2d°C\n %2d %RH", temperature, humidity);
  108.         TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_CYAN);
  109.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  110.     }
  111.     if ((temperature >= 21) && (_aValue[1] <= 25))//21度到25度红温暖
  112.     {
  113.         sprintf(bufa, "%2d°C\n %2d %RH", temperature, humidity);
  114.         TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_GREEN);
  115.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  116.     }
  117.     if ((temperature >= 26) && (temperature <= 35))//21度到25度红炎热
  118.     {
  119.         sprintf(bufa, "%2d°C\n %2d %RH", temperature, humidity);
  120.         TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_MAGENTA);
  121.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  122.     }
  123.     if ((temperature >= 36) && (temperature <= 50))//21度到25度红酷热
  124.     {
  125.         sprintf(bufa, "%2d°C\n %2d %RH", temperature, humidity);
  126.         TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_RED);
  127.         TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  128.     }
  129.     break;
  130.     case  DS18B20:
  131.         if ((Atemperature >= 0) && (Atemperature <= 10)) //1度到10度黄色防冻
  132.         {
  133.             sprintf(bufa, "%2d°C \n %2d %RH", Atemperature, Ahumidity);
  134.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_YELLOW);
  135.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  136.         }
  137.         if ((Atemperature >= 11) && (Atemperature <= 20))  //10度到20度绿注意保暖
  138.         {
  139.             sprintf(bufa, "%2d°C\n %2d %RH", Atemperature, Ahumidity);
  140.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_CYAN);
  141.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  142.         }
  143.         if ((Atemperature >= 21) && (Atemperature <= 25))//21度到25度红温暖
  144.         {
  145.             sprintf(bufa, "%2d°C\n %2d %RH", Atemperature, Ahumidity);
  146.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_GREEN);
  147.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  148.         }
  149.         if ((Atemperature >= 26) && (Atemperature <= 35))//21度到25度红炎热
  150.         {
  151.             sprintf(bufa, "%2d°C\n %2d %RH", Atemperature, Ahumidity);
  152.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_MAGENTA);
  153.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  154.         }
  155.         if ((Atemperature >= 36) && (Atemperature <= 50))//21度到25度红酷热
  156.         {
  157.             sprintf(bufa, "%2d°C\n %2d %RH", Atemperature, Ahumidity);
  158.             TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_RED);
  159.             TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
  160.         }
  161.         break;
  162.             default:
  163.                 break;
  164.             }
  165. }
  166. /*********************************************************************/
  167. static void _cbDialog(WM_MESSAGE * pMsg) {
  168.     WM_HWIN hItem;
  169.     int     NCode;
  170.     int     Id;
  171.     switch (pMsg->MsgId) {
  172.     case WM_PAINT:
  173.         GUI_SetBkColor(GUI_WHITE);
  174.         GUI_SetColor(GUI_BLACK);
  175.         GUI_SetFont(FONT_GEAR12);
  176.         GUI_SetTextAlign(GUI_TA_HCENTER | GUI_TA_VCENTER);
  177.         GUI_Clear();
  178.         GUI_SetColor(GUI_BLUE);
  179.         GUI_DispStringAt("DS18B20", 170, 24);
  180.         GUI_DispStringAt("DS18B20", 250, 24);
  181.         break;
  182.     case WM_TIMER:
  183.         /* 显示时间和日期 */
  184.         Caculate_RTC(pMsg);
  185.         /* 重启定时器 */
  186.         WM_RestartTimer(pMsg->Data.v, 1000);
  187.         break;
  188.     case WM_INIT_DIALOG:
  189.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
  190.         TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  191.         TEXT_SetFont(hItem, &GUI_Font20F_ASCII);
  192.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
  193.         TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  194.         hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);
  195.         SPINBOX_SetFont(hItem, FONT_GEAR24);
  196.         SPINBOX_SetRange(hItem,10, 40);
  197.         SPINBOX_SetButtonSize(hItem, 27);
  198.         SPINBOX_SetValue(hItem, temperature);
  199.         SPINBOX_SetEdge(hItem, SPINBOX_EDGE_CENTER);
  200.         hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
  201.         SPINBOX_SetFont(hItem, FONT_GEAR24);
  202.         SPINBOX_SetRange(hItem, 0, 99);
  203.         SPINBOX_SetValue(hItem, temperature);
  204.         SPINBOX_SetButtonSize(hItem, 27);
  205.         SPINBOX_SetEdge(hItem, SPINBOX_EDGE_CENTER);
  206.    
  207.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  208.         BUTTON_SetText(hItem, "0");
  209.         hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
  210.         GRAPH_SetBorder(hItem, 15, 0, 0, 15);
  211.         /* ****** 测试******************************************/
  212.         /* 创建三个数据对象_ahData[i] */
  213.         for (i = 0; i < GUI_COUNTOF(_aColor); i++) {
  214.             _aValue[i] = rand() % 180;
  215.             /* 创建成功的话,返回数据句柄 */
  216.             /* 显示的曲线颜色,可以显示的最大数据个数,数据指针,要添加的数据个数 */
  217.             _ahData[i] = GRAPH_DATA_YT_Create(_aColor[i], 300, 0, 0);
  218.             //被添加的数据数量
  219.             /* 为绘图控件添加数据对象 */
  220.             GRAPH_AttachData(hItem, _ahData[i]);
  221.             GRAPH_DATA_YT_SetOffY(_ahData[i], 0);//数据的垂直偏移。
  222.             GRAPH_DATA_YT_SetAlign(_ahData[i], GRAPH_ALIGN_LEFT);//数据的对齐方式。
  223.         }
  224.         /* ****** 测试******************************************/
  225.         /* 设置图形控件属性 */
  226.         //GRAPH_SetUserDraw(hItem, _UserDraw);//设置用户回调函数
  227.         GRAPH_SetGridDistX(hItem, 25);        //设置水平网格间距
  228.         GRAPH_SetGridDistY(hItem, 15);        //设置垂直网格间距
  229.         GRAPH_SetGridVis(hItem, 1);            //设置网格可见
  230.         hScaleV = GRAPH_SCALE_Create(BORDER_LEFT_A, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 15); //绘制垂直刻度
  231.         GRAPH_SCALE_SetTextColor(hScaleV, GUI_YELLOW); //设置刻度的文本颜色
  232.         GRAPH_SCALE_SetFactor(hScaleV, 0.6666);//设置用于计算从像素转换到所需单位的计算因子0.333
  233.         GRAPH_AttachScale(hItem, hScaleV);   //将刻度对象附加到图形小工具
  234.     /*    GRAPH_SetVSizeY(hItem, 150);*/
  235.         hScaleH = GRAPH_SCALE_Create(BORDER_BOTTOM_A, GUI_TA_LEFT, GRAPH_SCALE_CF_HORIZONTAL, 25);
  236.         GRAPH_SCALE_SetFactor(hScaleH, 0.2);//设置用于计算从像素转换到所需单位的计算因子
  237.         GRAPH_SCALE_SetTextColor(hScaleH, GUI_DARKGREEN);
  238.         GRAPH_AttachScale(hItem, hScaleH);   //将刻度对象附加到图形小工具
  239.         GRAPH_SCALE_SetPos(hScaleH, 125);//显示位置
  240.         
  241.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
  242.         BUTTON_SetText(hItem, "1");
  243.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
  244.    
  245.         break;
  246.     case WM_NOTIFY_PARENT:
  247.         Id = WM_GetId(pMsg->hWinSrc);
  248.         NCode = pMsg->Data.v;
  249.         switch (NCode) {
  250.         case WM_NOTIFICATION_RELEASED:
  251.             switch (Id) {
  252.             case ID_BUTTON_0:
  253.                 temperature = SPINBOX_GetValue(WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0));
  254.                 break;
  255.             case ID_BUTTON_1:
  256.                 chour = SPINBOX_GetValue(WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1));
  257.                 break;
  258.             case ID_BUTTON_3:
  259.                 humidity = SPINBOX_GetValue(WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1));
  260.                 break;
  261.             case ID_BUTTON_2:
  262.                         if (_Font) { //未按
  263.                             t = 0;
  264.                             BUTTON_SetText(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2), "DHT11");
  265.                             GRAPH_DATA_YT_Clear(_ahData[0]);
  266.                             GRAPH_DATA_YT_Clear(_ahData[1]);
  267.                             sensor_type = DHT11;
  268.                         }
  269.                         else {//按下
  270.                             t = 0;
  271.                             BUTTON_SetText(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2), "DS18B20");
  272.                             GRAPH_DATA_YT_Clear(_ahData[0]);
  273.                             GRAPH_DATA_YT_Clear(_ahData[1]);
  274.                             sensor_type = DS18B20;
  275.                         
  276.                         }
  277.                         _Font ^= 1;
  278.                         break;
  279.             }break;
  280.     }
  281.     break;
  282.     default:
  283.         WM_DefaultProc(pMsg);
  284.         break;
  285.     }
  286. }
  287. /*********************************************************************
  288. *
  289. *       Public code
  290. *
  291. **********************************************************************
  292. */
  293. /*********************************************************************
  294. *
  295. *       CreateWindow
  296. */
  297. void MainTask(void)
  298. {
  299.    
  300.     GUI_Init();
  301.     WM_HWIN hWin;
  302.     hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  303.     WM_CreateTimer(WM_GetClientWindow(hWin), /* 接受信息的窗口的句柄 */
  304.         0,                  /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
  305.         20,                           /* 周期,此周期过后指定窗口应收到消息*/
  306.         0);                             /* 留待将来使用,应为0 */
  307.     while (1) {
  308.         //if (t % 10 == 0)//每100ms读取一次
  309.         //{
  310.         //    DHT11_Read_Data(&temperature, &humidity);        //读取温湿度值            
  311.         //}
  312.         _AddValues();
  313.         if (t % 300 == 0)
  314.         {
  315.             GRAPH_DATA_YT_Clear(_ahData[0]);
  316.             GRAPH_DATA_YT_Clear(_ahData[1]);
  317.             t = 0;
  318.         }
  319.         t++;
  320.         GUI_Delay(100);
  321.     }
  322. }
复制代码

1:定时消息里窗口无效化,窗口会闪烁
2:按键无效
1.PNG 2.PNG 3.PNG
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-9-22 01:47:47 | 显示全部楼层
闪烁问题的话,在函数GUI_Init后使能窗口使用存储设备:WM_SetCreateFlags(WM_CF_MEMDEV);

另外我在我的板子上面测试了下波形,没有反应,应该是你的程序里面逻辑关系还有问题,你检查下看。
QQ截图20170922014406.png
回复

使用道具 举报

45

主题

45

回帖

45

积分

初级会员

积分
45
 楼主| 发表于 2017-9-22 09:08:26 | 显示全部楼层

回 eric2013 的帖子

eric2013:闪烁问题的话,在函数GUI_Init后使能窗口使用存储设备:WM_SetCreateFlags(WM_CF_MEMDEV);

另外我在我的板子上面测试了下波形,没有反应,应该是你的程序里面逻辑关系还有问题,你检查下看。

 (2017-09-22 01:47) 
昨晚测试了  关掉WM_TIMER定时器就有波形了,这不知道怎么,查看过以前的程序,有了WM_TIMER定时器也是有波形的
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 22:05 , Processed in 0.294900 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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