|
楼主 |
发表于 2017-9-11 10:09:46
|
显示全部楼层
回 eric2013 的帖子
- #include "DIALOG.h"
- #include "EMWINGUI.h"
- /*********************************************************************
- *
- * Defines
- *
- **********************************************************************
- */
- #define ID_WINDOW_0 (GUI_ID_USER + 0x00)
- #define ID_GRAPH_0 (GUI_ID_USER + 0x02)
- #define ID_BUTTON_0 (GUI_ID_USER + 0x03)
- #define ID_BUTTON_1 (GUI_ID_USER + 0x04)
- #define ID_BUTTON_2 (GUI_ID_USER + 0x05)
- #define ID_TEXT_0 (GUI_ID_USER + 0x06)
- #define ID_TEXT_1 (GUI_ID_USER + 0x07)
- #define ID_TEXT_3 (GUI_ID_USER + 0x08)
- // USER START (Optionally insert additional defines)
- int t =0;
- int temperature=30; //温度
- int humidity=15; //湿度
- int Atemperature = 5; //温度
- int Ahumidity = 10; //湿度
- #define BORDER_BOTTOM_A 160 //距离下边框刻度的尺寸160
- #define BORDER_LEFT_A 15 //距离左边框的尺寸15
- #define PROGBAR_DEFAULT_FONT &GUI_Font13_ASCII //进度条内部显示文本所使用的字体
- static GRAPH_SCALE_Handle hScaleV; //垂直刻度句柄
- static GRAPH_SCALE_Handle hScaleH; //水平刻度句柄
- #define SCALE_FACTOR 10
- unsigned i;
- char bufa[2];
- static int _Stop;
- enum SENSOR_TYPE{ DHT11, DS18B20 }; //DHT11传感器,DS18B20传感器,芯片内部温度检测
- static enum SENSOR_TYPE sensor_type ; //默认为内部温度传感器
- /*************************************************i*******************
- *
- * Static data
- *
- **********************************************************************
- */
- static void Caculate_DFHII(WM_MESSAGE * pMsg)
- {
- WM_HWIN hWin = pMsg->hWin;
- //TEXT_SetFont(hWin, FONT_GEAR12);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_3), "1234");
- switch (sensor_type)
- {
- case DHT11:
- if ((temperature >= 0) && (temperature <= 10)) //1度到10度黄色防冻
- {
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_YELLOW);
- sprintf(bufa, "%2d℃注意防冻", temperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((temperature >= 11) && (temperature <= 20)) //10度到20度绿注意保暖
- {
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_CYAN);
- sprintf(bufa, "%2d℃注意保暖", temperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((temperature >= 21) && (temperature <= 25))//21度到25度红温暖
- {
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_GREEN);
- sprintf(bufa, "%02d℃", temperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((temperature >= 26) && (temperature <= 35))//21度到25度红炎热
- {
- TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_MAGENTA);
- sprintf(bufa, "%02d℃天气炎热", temperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((temperature >= 36) && (temperature <= 50))//21度到25度红酷热
- {
- TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_RED);
- sprintf(bufa, "%02d℃天气酷热", temperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((humidity >= 20) && (humidity <= 39)) //1度到16度黄色
- GRAPH_SetVSizeY(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0), 0);
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_1), GUI_YELLOW);
- if ((humidity >= 40) && (humidity <= 60)) //29度到32度绿
- GRAPH_SetVSizeY(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0), 0);
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_1), GUI_GREEN);
- if ((humidity >= 61) && (humidity <= 100))//29度到32度红
- {
- GRAPH_SetVSizeY(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0), 300);
- TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_1), GUI_RED);
- }
- sprintf(bufa, "%02d %RH", humidity);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_1), bufa);
- break;
- case DS18B20:
- if ((Atemperature >= 0) && (Atemperature <= 10)) //1度到10度黄色防冻
- {
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_YELLOW);
- sprintf(bufa, "%2d℃注意防冻", Atemperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((Atemperature >= 11) && (Atemperature <= 20)) //10度到20度绿注意保暖
- {
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_CYAN);
- sprintf(bufa, "%2d℃注意保暖", Atemperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((Atemperature >= 21) && (Atemperature <= 25))//21度到25度红温暖
- {
- TEXT_SetTextColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_GREEN);
- sprintf(bufa, "%02d℃", Atemperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((Atemperature >= 26) && (Atemperature <= 35))//21度到25度红炎热
- {
- TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_MAGENTA);
- sprintf(bufa, "%02d℃天气炎热", Atemperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- if ((Atemperature >= 36) && (Atemperature <= 50))//21度到25度红酷热
- {
- TEXT_SetBkColor(WM_GetDialogItem(hWin, ID_TEXT_0), GUI_RED);
- sprintf(bufa, "%02d℃天气酷热", Atemperature);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_0), bufa);
- }
- sprintf(bufa, "%02d %RH", Ahumidity);
- TEXT_SetText(WM_GetDialogItem(hWin, ID_TEXT_1), bufa);
-
- break;
- default:
- break;
- }
- }
- /*********************************************************************
- *
- * _aDialogCreate
- */
- static const GUI_WIDGET_CREATE_INFO _aDialoggraph[] = {
- { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
- { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 0, 0, 320, 240, 0, 0x0, 0 },
- { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 23, 217, 80, 20, 0, 0x0, 0 },
- { BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 125, 217, 80, 20, 0, 0x0, 0 },
- { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 220, 217, 80, 20, 0, 0x0, 0 },
- };
- /*****************测试******************************/
- static GUI_COLOR _aColor[] = { GUI_RED, GUI_GREEN, GUI_LIGHTBLUE }; // Array of colors for the GRAPH_DATA objects
- static I16 _aValue[3];
- static GRAPH_DATA_Handle _ahData[3]; // Array of handles for the GRAPH_DATA objects
- static void _AddValues(void) {
- switch (sensor_type)
- {
- case DS18B20:
- //if (ID_BUTTON_0 == 0)
- //{
- GUI_Delay(80);
- _aValue[1] = Ahumidity;
- _aValue[0] = Atemperature;
- GRAPH_DATA_YT_AddValue(_ahData[0], _aValue[0] * 3);//数据对象的句柄, /增加到数据对象的值
- GRAPH_DATA_YT_AddValue(_ahData[1], _aValue[1] * 3);//数据对象的句柄, /增加到数据对象的值
- /* }*/
- break;
- case DHT11:
- GUI_Delay(160);
- _aValue[1] = humidity;
- _aValue[0] = temperature;
- GRAPH_DATA_YT_AddValue(_ahData[0], _aValue[0] * 3);//数据对象的句柄, /增加到数据对象的值
- GRAPH_DATA_YT_AddValue(_ahData[1], _aValue[1] * 3);//数据对象的句柄, /增加到数据对象的值
- break;
- default:
- break;
- }
-
- }
- /*********************************************************************
- *
- * Static code
- *
- **********************************************************************
- */
- static void _UserDraw(WM_HWIN hWin, int Stage) {
- if (Stage == GRAPH_DRAW_LAST) {
- GUI_SetFont(&GUI_Font13_ASCII);
- switch (sensor_type)
- {
- case DS18B20:
- GUI_DispStringAt("DS18B20", 270, 10);
- break;
- case DHT11:
- GUI_DispStringAt("DHT11", 270, 10);
- break;
- default:
- break;
- }
- }
- }
- /*********************************************************************
- *
- * _cbDialog
- */
- static void _cbgraph(WM_MESSAGE * pMsg) {
- WM_HWIN hItem;
- WM_HWIN hItema;
- int NCode;
- int Id;
- switch (pMsg->MsgId) {
- case WM_TIMER:
- /* 显示时间和日期 */
- Caculate_DFHII(pMsg);
- /* 重启定时器 */
- WM_RestartTimer(pMsg->Data.v, 1000);
- break;
- case WM_INIT_DIALOG:
- hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
- GRAPH_SetBorder(hItem, 20, 10, 0, 35);
- /* ****** 测试******************************************/
- /* 创建三个数据对象_ahData[i] */
- for (i = 0; i < GUI_COUNTOF(_aColor); i++) {
- _aValue[i] = rand() % 180;
- /* 创建成功的话,返回数据句柄 */
- /* 显示的曲线颜色,可以显示的最大数据个数,数据指针,要添加的数据个数 */
- _ahData[i] = GRAPH_DATA_YT_Create(_aColor[i], 300, 0, 0);
- //被添加的数据数量
- /* 为绘图控件添加数据对象 */
- GRAPH_AttachData(hItem, _ahData[i]);
- GRAPH_DATA_YT_SetOffY(_ahData[i], 0);//数据的垂直偏移。
- GRAPH_DATA_YT_SetAlign(_ahData[i], GRAPH_ALIGN_LEFT);//数据的对齐方式。
- }
- /* ****** 测试******************************************/
- /* 设置图形控件属性 */
- GRAPH_SetUserDraw(hItem, _UserDraw);//设置用户回调函数
- GRAPH_SetGridDistX(hItem, 25); //设置水平网格间距
- GRAPH_SetGridDistY(hItem, 15); //设置垂直网格间距
- GRAPH_SetGridVis(hItem, 1); //设置网格可见
-
- hScaleV = GRAPH_SCALE_Create(BORDER_LEFT_A, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL,15); //绘制垂直刻度
- GRAPH_SCALE_SetTextColor(hScaleV, GUI_YELLOW); //设置刻度的文本颜色
- GRAPH_SCALE_SetFactor(hScaleV, 0.333);//设置用于计算从像素转换到所需单位的计算因子
- GRAPH_AttachScale(hItem, hScaleV); //将刻度对象附加到图形小工具
- hScaleH = GRAPH_SCALE_Create(BORDER_BOTTOM_A, GUI_TA_LEFT, GRAPH_SCALE_CF_HORIZONTAL,25);
- GRAPH_SCALE_SetFactor(hScaleH, 0.2);//设置用于计算从像素转换到所需单位的计算因子
- GRAPH_SCALE_SetTextColor(hScaleH, GUI_DARKGREEN);
- GRAPH_AttachScale(hItem, hScaleH); //将刻度对象附加到图形小工具
- GRAPH_SCALE_SetPos(hScaleH,208);//显示位置
- //BUTTON_SetFont(hItem, FONT_GEAR12);
- hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
- BUTTON_SetText(hItem, "返回");
- //
- // Initialization of 'Button'
- //
- hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
- BUTTON_SetText(hItem, "DS18B20");
- //
- // Initialization of 'Button'
- //
- hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
- BUTTON_SetText(hItem, "DFH11");
- //hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
- //TEXT_SetTextAlign(hItem, TEXT_CF_LEFT);
- break;
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch (Id) {
- case ID_BUTTON_0: // 返回
- switch (NCode) {
- case WM_NOTIFICATION_CLICKED:
- break;
- case WM_NOTIFICATION_RELEASED:
-
- break;
- }
- break;
- case ID_BUTTON_1: // Notifications sent by 'Button'
- switch (NCode) {
- case WM_NOTIFICATION_RELEASED:
- t = 0;
- GRAPH_DATA_YT_Clear(_ahData[1]);
- GRAPH_DATA_YT_Clear(_ahData[0]);
- sensor_type = DS18B20;
- break;
- }
- break;
- case ID_BUTTON_2: // Notifications sent by 'Button'
- switch (NCode) {
- case WM_NOTIFICATION_RELEASED:
- t = 0;
- GRAPH_DATA_YT_Clear(_ahData[1]);
- GRAPH_DATA_YT_Clear(_ahData[0]);
- sensor_type = DHT11;
- break;
- }
- break;
- }
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
- /*************************** End of file ****************************/
- void MainTask(void) {
- GUI_Init();
- WM_HWIN hDlg;
- WM_HWIN hGraph;
- WM_HWIN htextb;
- hDlg = GUI_CreateDialogBox(_aDialoggraph, GUI_COUNTOF(_aDialoggraph), _cbgraph, WM_HBKWIN, 0, 0);
- htextb = TEXT_CreateEx(26, 12, 44, 20, hDlg, WM_CF_SHOW, TEXT_CF_LEFT, ID_TEXT_0, 0);
- TEXT_SetFont(htextb, PROGBAR_DEFAULT_FONT);
- htextb = TEXT_CreateEx(26, 34, 44, 20, hDlg, WM_CF_SHOW, TEXT_CF_LEFT, ID_TEXT_1, 0);
- TEXT_SetFont(htextb, PROGBAR_DEFAULT_FONT);
- htextb = TEXT_CreateEx(240, 0, 80, 11, hDlg, WM_CF_SHOW, TEXT_CF_LEFT, ID_TEXT_3, 0);
- TEXT_SetTextAlign(htextb, TEXT_CF_RIGHT);
- WM_CreateTimer(hDlg, /* 接受信息的窗口的句柄 */
- 0, /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
- 100, /* 周期,此周期过后指定窗口应收到消息*/
- 0); /* 留待将来使用,应为0 */
- while (1) {
- //if (t % 10 == 0)//每100ms读取一次
- //{
- // DHT11_Read_Data(&temperature, &humidity); //读取温湿度值
- //}
- _AddValues();
- if (t % 300 == 0)
- {
- GRAPH_DATA_YT_Clear(_ahData[0]);
- GRAPH_DATA_YT_Clear(_ahData[1]);
- t = 0;
- }
- t++;
-
- GUI_Delay(100);
- }
- }
复制代码 eric2013:
把模拟器的仿真代码贴出来,仅你写的程序部分即可,方便我测试下。
emWin电脑仿真程序可以运行,但下载到板子上就不行了?
1,如图,当t % 300 == 0时对GRAPH :图形小工具清除 GRAPH_DATA_YT 对象的所有数据项
电脑仿真可以,但下载到板子上,它就直接循环了?
2,用stlink仿真 调试能查看t的数值变化吗?
|
|