首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

CChart 圖表教學第九課:即時數據顯示綜合實作

     編輯:關於C語言

實戰演練:模擬儀器即時溫度監控

綜合前八課知識,本課實作完整的即時數據顯示系統。模擬場景:儀器每 200ms 輸出兩組溫度——環境溫度(恆定)與加熱溫度(週期性變化)。

專案建立與資源準備

依第八課方法建立 Lesson09,新增選單資源:

  • 開始(S) — ID_REALTIME_START
  • 停止(T) — ID_REALTIME_STOP

選單資源

核心變數宣告

static CChart chart;
static unsigned int nCount;  // 數據計數器
static bool bRun;            // 定時器狀態
static int nTimer;           // 定時器 ID

初始化設定

case WM_CREATE:
    chart.SetType(kTypeXY);
    chart.SetUseLegend(true);
    chart.SetAxisTitle(_T("時間(分)"), 1);
    chart.SetAxisTitle(_T("溫度(度)"), 0);
    chart.SetTitle(_T("烘箱溫度變化圖"));
    nCount = 0; bRun = false; nTimer = 0;
    srand((unsigned)time(NULL));
    break;

定時器產生模擬數據

case WM_TIMER:
    if (bRun) {
        double Pi = 3.1415926536;
        double x = nCount / 10.0;
        double y1 = 20.0 * sin(2.0 * Pi / 400.0 * nCount) + 40.0 + (2.0 * rand() / RAND_MAX - 1.0);
        double y2 = 20.0 + (2.0 * rand() / RAND_MAX - 1.0) / 2.0;
        nCount++;

        if (nCount == 1) {
            double pX[1] = {x}, pY[1] = {y1};
            chart.AddCurve(pX, pY, 1);
            pY[0] = y2;
            chart.AddCurve(pX, pY, 1);
            chart.SetDataTitle(_T("加熱溫度"), 0);
            chart.SetDataTitle(_T("環境溫度"), 1);
            break;
        }
        chart.AddPoint2D(x, y1, 0);
        chart.AddPoint2D(x, y2, 1);
        RECT rt; GetClientRect(hWnd, &rt);
        InvalidateRect(hWnd, &rt, TRUE);
    }
    break;

選單控制定時器

case ID_REALTIME_START:
    nTimer = SetTimer(hWnd, 1, 200, 0);
    bRun = true;
    break;
case ID_REALTIME_STOP:
    if (nTimer > 0) { KillTimer(hWnd, nTimer); nTimer = 0; }
    bRun = false;
    break;

防閃爍與執行結果

case WM_ERASEBKGND: return 0;

編譯執行,點選「開始」即見即時曲線:

即時曲線

本課整合定時器、隨機數模擬、動態加點等技術,為儀表監控類應用奠定基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved