亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scope.cpp

?? msp430心電儀上位機的心電圖顯示程序。為了顯示EKG
?? CPP
字號:
/* A simple oscilloscope program, reading sample data from a serial
   port.
   
   This program was developed under Cygwin on Windows XP, and Linux.
   It requires the FLTK 1.1.4 toolkit and the pthreads library,
   available from www.cygwin.com. */

#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#include <pthread.h>

#include <FL/Fl.H>
#include <FL/fl_ask.H>
#include <FL/Fl_Overlay_Window.H>
#include <FL/Fl_Light_Button.H>
#include <FL/Fl_Slider.H>
#include <FL/Fl_Adjuster.H>
#include "../Cartesian.H"
#include <FL/fl_draw.H>

#include "serial.h"

pthread_t display_thread;
pthread_t serial_thread;

#define CAPTURE_SIZE    8192

double capture[CAPTURE_SIZE];
double plot[4096];
double plot2[4];

int last_used_sample = 0;
int next_capture_sample = 0;

Ca_X_Axis *time_axis;
Ca_Y_Axis *amp_axis;
Fl_Slider *trig_level;
Fl_Slider *x_scale;
Fl_Light_Button *rolling_mode;

Ca_Canvas *canvas;

int trigger_level = 2048;
int x_scaling = 1;
int triggered_mode = 1;

void display_update(void *)
{
    static Ca_Line *L_L = 0;
    static Ca_Line *P_P = 0;
    int i;
    int j;
    int trig_point;
    int contents;
    int start;
    int end;
    double sample;
    double last;

    plot2[0] = 0;    plot2[1] = trigger_level;
    plot2[2] = 512;    plot2[3] = trigger_level;
    if (P_P)
        delete P_P;
	P_P = new Ca_Line(2, plot2, 0, 0, FL_RED, CA_NO_POINT);

    trig_point = -1;
    contents = (next_capture_sample - last_used_sample + CAPTURE_SIZE) & (CAPTURE_SIZE - 1);

    if (triggered_mode)
    {
        /* Triggered display mode, triggering at the 20% point */
        if (contents >= 512)
        {
            /* Look for a trigger point */
            start = (last_used_sample + 100) & (CAPTURE_SIZE - 1);
            end = (next_capture_sample - 512 + 100) & (CAPTURE_SIZE - 1);
            last = capture[(start - 1) & (CAPTURE_SIZE - 1)];
            for (i = start;  i != end;  i++)            {
                sample = capture[i];
                if (last < trigger_level  &&  sample >= trigger_level)
                {
                    trig_point = i;
                    break;
                }
                last = sample;
            }
            /* If no trigger for a long time, free run the capturing */
            if (trig_point < 0  &&  contents > CAPTURE_SIZE - 2000)
                trig_point = next_capture_sample - 512 + 100;
        }        if (trig_point >= 0)
        {
            /* Move the trigger point back a bit, so we display some pre-trigger data */
            j = trig_point - 100;
            if (j < 0)
                j += CAPTURE_SIZE;
            for (i = 0;  i < 512;  i++)            {
                plot[2*i] = i;                plot[2*i + 1] = capture[j++];
                if (j >= CAPTURE_SIZE)
                    j = 0;
            }
            last_used_sample = j;            amp_axis->current();

            if (L_L)
                delete L_L;
            L_L = new Ca_Line(512, plot, 0, 0, FL_BLUE, CA_NO_POINT);
        }
    }
    else
    {
        /* Rolling display mode */
        start = (next_capture_sample - 512) & (CAPTURE_SIZE - 1);
        end = next_capture_sample;
        j = start;
        for (i = 0;  i < 512;  i++)        {
            plot[2*i] = i;            plot[2*i + 1] = capture[j++];
            if (j >= CAPTURE_SIZE)
                j = 0;
        }
        last_used_sample = j;        amp_axis->current();
    
        if (L_L)
            delete L_L;
        L_L = new Ca_Line(512, plot, 0, 0, FL_BLUE, CA_NO_POINT);
    }
    Fl::add_timeout(0.1, display_update);
};

void trig_level_callback(Fl_Widget *, void *)
{
    trigger_level = (int) (4096.0 - trig_level->value()*4096.0);
}

void x_scale_callback(Fl_Widget *, void *)
{
    x_scaling = (int) (x_scale->value()*200.0) + 1;
}

void rolling_callback(Fl_Widget *, void *)
{
    triggered_mode = !rolling_mode->value();
}

void *display_task(void *data)
{
    Fl_Double_Window *w = new Fl_Double_Window(560, 380, "Oscilloscope");
	Fl_Group *c = new Fl_Group(0, 35, 580, 345 );

    c->box(FL_DOWN_BOX);
    c->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE);

    canvas = new Ca_Canvas(90, 75, 400, 225, "");
    canvas->box(FL_PLASTIC_DOWN_BOX);
    canvas->color(7);
    canvas->align(FL_ALIGN_TOP);
    Fl_Group::current()->resizable(canvas);
    canvas->border(15);

    time_axis = new Ca_X_Axis(95, 305, 395, 30, "Time");
    time_axis->align(FL_ALIGN_BOTTOM);
    time_axis->minimum(0.0);
    time_axis->maximum(512.0);
    time_axis->label_format("%g");
    time_axis->minor_grid_color(fl_gray_ramp(20));
    time_axis->major_grid_color(fl_gray_ramp(15));
    time_axis->label_grid_color(fl_gray_ramp(10));
    time_axis->grid_visible(CA_MINOR_GRID | CA_MAJOR_GRID | CA_LABEL_GRID);
    time_axis->major_step(50);
    time_axis->label_step(50);
	time_axis->axis_color(FL_BLACK);
	time_axis->axis_align(CA_BOTTOM | CA_LINE);

    amp_axis = new Ca_Y_Axis(10, 70, 78, 235, "Amp");
    amp_axis->align(FL_ALIGN_TOP);
    amp_axis->minor_grid_color(fl_gray_ramp(20));
    amp_axis->major_grid_color(fl_gray_ramp(15));
    amp_axis->label_grid_color(fl_gray_ramp(10));
	amp_axis->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE);
	amp_axis->minor_grid_style(FL_DOT);
	amp_axis->minimum(0);
    amp_axis->maximum(4096);
    amp_axis->current();

	trig_level = new Fl_Slider(500, 75, 15, 225, "Trig");
	trig_level->callback(&trig_level_callback);
    trig_level->box(FL_PLASTIC_DOWN_BOX);
    trig_level->value(0.5);

	x_scale = new Fl_Slider(170, 335, 225, 15, "X-scale");
	x_scale->callback(&x_scale_callback);
    x_scale->type(1);
    x_scale->box(FL_PLASTIC_DOWN_BOX);
    x_scale->value(0.0);

	rolling_mode = new Fl_Light_Button(450, 335, 75, 25, "Rolling");
	rolling_mode->callback(&rolling_callback);
    rolling_mode->box(FL_PLASTIC_UP_BOX);

    c->end();

    Fl_Group::current()->resizable(c);
    w->end();
    w->show();

    Fl::add_timeout(0, display_update);
	Fl::run();
	return NULL;
};

void *serial_task(void *data)
{
#if 1
    /* Real operation with a serial port */
    int port;
    uint8_t inbuf[1024];
    int i;
    int len;
    FILE *log;
    char *portname;    static int skip = 0;

    log = fopen("log", "w");
    portname = (char *) data;    if ((port = serial_open(portname, 115200, 0, 8)) < 0)
    {        fl_alert("Failed to open serial port - %d.", port);

        exit(2);
    }
    for (;;)
    {
        len = serial_read(port, (char *) inbuf, sizeof(inbuf), 1000);
        if (len > 0)
        {
            for (i = 0;  i < len;  i++)
            {
                //fprintf(log, "%7d %f\n", inbuf[i], inbuf[i]*16.0);
                skip++;
                if (skip >= x_scaling)
                {
                    capture[next_capture_sample++] = inbuf[i]*16.0;
                    if (next_capture_sample >= CAPTURE_SIZE)
                        next_capture_sample = 0;
                    skip = 0;
                }
            }
        }
    }
#else
    /* Test operation, generating a waveform for display */
    static float phase = 0.0;
    static float phase_step = 0.030;
    static float phase_step_step = 0.00000;

    int i;
    int x;
    double sample;

    x = 0;
    for (;;)
    {
        Sleep(1);
        for (i = 0;  i < 10;  i++)
        {
            phase += phase_step;
            phase_step += phase_step_step;
            if (phase_step > 0.1)
                phase_step_step = -0.00001;
            else if (phase_step < -0.1)
                phase_step_step = 0.00001;
            sample = sin(phase)*2000.0;
            sample += 2048.0;
            capture[next_capture_sample++] = sample;
            next_capture_sample &= (CAPTURE_SIZE - 1);
        }
    }
#endif

    return NULL;
}

int main(int argc, char **argv) 
{
    pthread_attr_t attr;
    char *port;    port = "com1";    if (argc > 1)        port = argv[1];
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    if (pthread_create(&display_thread, &attr, serial_task, port) < 0)
    {
        fl_alert("Failed to start display thread.");
        exit(2);
    }
    display_task(NULL);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍偷拍欧美精品| 国产精品视频在线看| 91免费看视频| 91免费看视频| 欧美自拍偷拍午夜视频| 91高清在线观看| 欧美性三三影院| 4438x成人网最大色成网站| 69成人精品免费视频| 欧美精品在线一区二区| 91精品国产综合久久婷婷香蕉| 欧美日韩精品一区二区三区蜜桃| 欧美视频中文字幕| 日韩欧美国产一二三区| 久久精品人人爽人人爽| 中文字幕在线播放不卡一区| 一区二区三区视频在线看| 性做久久久久久久免费看| 日本中文在线一区| 国产一区在线观看视频| youjizz国产精品| 欧美视频中文一区二区三区在线观看| 制服丝袜国产精品| 久久久久久电影| 亚洲精品高清视频在线观看| 日本91福利区| www.日韩大片| 欧美日韩成人综合天天影院 | 91麻豆精品国产91久久久久| 日韩欧美电影一二三| 久久精品网站免费观看| 亚洲综合999| 黄色日韩三级电影| 色婷婷综合五月| 精品久久久久久综合日本欧美| 日本一区二区成人| 同产精品九九九| a级精品国产片在线观看| 7777精品伊人久久久大香线蕉| 国产欧美日韩三级| 免费久久精品视频| 在线看日韩精品电影| www亚洲一区| 五月婷婷激情综合| aaa国产一区| 精品999在线播放| 五月激情综合色| 日本国产一区二区| 中文字幕国产一区二区| 免费不卡在线观看| 欧美专区在线观看一区| 日韩激情中文字幕| 在线免费观看不卡av| 欧美韩国日本综合| 精品一区二区在线视频| 欧美日韩不卡在线| 亚洲欧美日韩国产成人精品影院 | www.99精品| 久久影音资源网| 老司机免费视频一区二区| 色狠狠综合天天综合综合| 国产欧美一区二区精品秋霞影院 | 依依成人精品视频| 成人精品一区二区三区中文字幕| 欧美一区二区美女| 婷婷开心激情综合| 欧美色综合久久| 亚洲图片自拍偷拍| 色欧美乱欧美15图片| 亚洲人一二三区| 一本色道久久综合亚洲精品按摩| 中国色在线观看另类| 国产在线视频不卡二| 日韩精品一区二区三区蜜臀| 日韩高清在线观看| 日韩欧美国产综合| 久久99久久久久| 亚洲资源中文字幕| 日本久久一区二区三区| 亚洲伦在线观看| 欧美日韩在线直播| 午夜成人免费电影| 91精品国产一区二区三区蜜臀| 午夜日韩在线观看| 欧美一区2区视频在线观看| 日韩黄色一级片| 日韩精品一区二| 国产白丝网站精品污在线入口 | 成人av在线资源网| 亚洲丝袜另类动漫二区| 色婷婷久久久久swag精品| 亚洲一二三四在线观看| 欧美疯狂做受xxxx富婆| 美女网站在线免费欧美精品| 精品国产精品网麻豆系列| 成人午夜视频在线| 亚洲激情综合网| 91精品国产色综合久久久蜜香臀| 久久99精品国产.久久久久| 久久综合视频网| 9l国产精品久久久久麻豆| 一区二区三区在线免费| 日韩亚洲欧美成人一区| 国产福利一区二区三区视频在线 | 欧美性一区二区| 免费美女久久99| 国产精品色一区二区三区| 欧美日韩在线三级| 国产精品99久久久久久久vr| 最新高清无码专区| 欧美v国产在线一区二区三区| 国产99久久久国产精品| 亚洲国产精品天堂| 欧美精品一区二区三区四区 | 天天av天天翘天天综合网 | 欧美老肥妇做.爰bbww| 久久国产免费看| 亚洲视频一区在线观看| 欧美xxx久久| 欧美丝袜丝nylons| 成人伦理片在线| 免费国产亚洲视频| 亚洲一区视频在线观看视频| 久久久久久亚洲综合| 欧美精品在线观看播放| 波多野结衣在线一区| 美女视频免费一区| 无码av中文一区二区三区桃花岛| 国产精品欧美综合在线| www日韩大片| 日韩一区二区影院| 欧美日韩精品欧美日韩精品一综合| 国产一二三精品| 日韩精品1区2区3区| 亚洲一区在线观看免费 | 久久久三级国产网站| 7777精品伊人久久久大香线蕉完整版 | 日本视频中文字幕一区二区三区 | 日本韩国精品一区二区在线观看| 国产一区二区在线免费观看| 日韩有码一区二区三区| 亚洲成人你懂的| 亚洲综合色自拍一区| 亚洲美女屁股眼交| 日韩美女视频一区二区 | 亚洲成av人片在线观看无码| 综合电影一区二区三区 | 美腿丝袜亚洲三区| 日韩国产欧美在线观看| 亚洲第一综合色| 亚洲mv在线观看| 亚洲成av人影院| 日本亚洲一区二区| 久久疯狂做爰流白浆xx| 日本中文一区二区三区| 日韩经典一区二区| 久久电影网站中文字幕| 捆绑紧缚一区二区三区视频 | 欧美国产精品一区| 日本一区二区三区久久久久久久久不 | 91精品婷婷国产综合久久竹菊| 欧美色图激情小说| 3d动漫精品啪啪一区二区竹菊| 91精品综合久久久久久| 欧美成人福利视频| 国产午夜精品一区二区三区视频 | 欧美久久免费观看| 欧美美女视频在线观看| 日韩一级片在线播放| 精品黑人一区二区三区久久| 亚洲国产精品黑人久久久| 亚洲视频精选在线| 亚洲超丰满肉感bbw| 免费人成黄页网站在线一区二区| 老汉av免费一区二区三区 | 亚洲免费在线电影| 亚洲国产综合人成综合网站| 男女性色大片免费观看一区二区| 另类欧美日韩国产在线| av网站免费线看精品| 欧美影院一区二区三区| 日韩欧美卡一卡二| 中文字幕一区二区三| 日日夜夜精品视频免费| 国产成人在线观看| 欧美体内she精高潮| 国产午夜亚洲精品理论片色戒| 亚洲卡通欧美制服中文| 久久国产精品第一页| 色欧美乱欧美15图片| 精品国产一区二区三区av性色| 国产精品国产精品国产专区不蜜| 丝袜诱惑制服诱惑色一区在线观看| 国产在线精品免费| 欧美日韩国产影片| 国产精品国产三级国产| 国产一区二区三区免费看| 欧美丝袜丝交足nylons图片| 亚洲国产精品精华液2区45| 奇米一区二区三区av|