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

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

?? 溫度采集dlg.cpp

?? 基于18B20的溫度采集系統
?? CPP
字號:
// 溫度采集Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "Windows.h"
#include "溫度采集.h"
#include "溫度采集Dlg.h"
#include "Series.h"
#include "pen.h"
#include "valuelist.h"
#include "page.h"
#include "axes.h"
#include "axis.h"
#include "toollist.h"
#include "tools.h"
#include "annotationtool.h"
#include "export.h"
#include "scroll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	m_IntervalTime = 0;
	m_longHigh = 0;
	m_longLow = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyDlg)
	DDX_Control(pDX, IDC_COMBO_BAUD, m_ctrlBaud);
	DDX_Control(pDX, IDC_COMBO_EXACT, m_ctrlExact);
	DDX_Control(pDX, IDC_LIST_RESULT, m_ctrlListResult);
	DDX_Control(pDX, IDC_COMBO_COMPORT, m_ctrlComPort);
	DDX_Control(pDX, IDC_TCHART1, m_ctrlChart);
	DDX_Text(pDX, IDC_EDIT_interval, m_IntervalTime);
	DDV_MinMaxInt(pDX, m_IntervalTime, 1, 600);
	DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
	DDX_Control(pDX, IDC_TEEPREVIEWER1, m_ctrlPrintPreview);
	DDX_Text(pDX, IDC_EDIT_HIGH, m_longHigh);
	DDV_MinMaxLong(pDX, m_longHigh, -55, 125);
	DDX_Text(pDX, IDC_EDIT_LOW, m_longLow);
	DDV_MinMaxLong(pDX, m_longLow, -55, 125);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
	//{{AFX_MSG_MAP(CMyDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_BEGIN, OnButtonBegin)
	ON_CBN_SELCHANGE(IDC_COMBO_COMPORT, OnChangeComport)
	ON_WM_TIMER()
	ON_EN_CHANGE(IDC_EDIT_interval, OnChangeInterval)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
	ON_CBN_SELCHANGE(IDC_COMBO_BAUD, OnChangeComboBaud)
	ON_CBN_SELCHANGE(IDC_COMBO_EXACT, OnSelchangeExact)
	ON_EN_KILLFOCUS(IDC_EDIT_HIGH, OnKillfocusEditHigh)
	ON_EN_KILLFOCUS(IDC_EDIT_LOW, OnKillfocusEditLow)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	BeginTime = COleDateTime::GetCurrentTime();
    COleDateTime tempTime ;
    tempTime = BeginTime; 
	MinTemp	= 500;

	m_ctrlListResult.AddString("歡迎使用溫度采集軟件...");
	m_ctrlListResult.AddString("通信端口COM1   19200bps");
	m_ctrlListResult.AddString("采集間隔: 1S  采集精度:   ");
	m_ctrlListResult.AddString("高溫警告: 20   低溫警告: -5");
	m_longHigh = 25;	//初始化最高溫度警告值
	m_longLow  = -5;		//初始化最低溫度警告值
	
	m_ctrlChart.Series(0).SetTitle("溫度");
	m_ctrlChart.Series(1).SetTitle("高溫界限");
	m_ctrlChart.Series(2).SetTitle("低溫界限");
	m_ctrlChart.Series(3).SetTitle("零點");
	m_ctrlChart.Series(0).Clear();
	m_ctrlChart.Series(1).Clear();
	m_ctrlChart.Series(2).Clear();
	m_ctrlChart.Series(3).Clear();
	m_ctrlChart.GetAxis().GetLeft().SetMaximum(m_longHigh + 10);
	m_ctrlChart.GetAxis().GetLeft().SetMinimum(m_longLow - 10);
	//m_ctrlChart.GetAxis().GetBottom().SetAutomatic(FALSE);	//取消底部坐標軸的自動滾動
	//m_ctrlChart.GetPage().SetMaxPointsPerPage(10);		//設置最多顯示20個點

    BeginTime.SetTime(0,0,0);
    BeginTime.SetDate(tempTime.GetYear(),tempTime.GetMonth(),tempTime.GetDay());
    COleDateTimeSpan tmSpan = COleDateTimeSpan(0,0,1,0);

	gather_times = 0;
	m_IntervalTime = 1;
	SetTimer(1,1000,NULL);

	UpdateData(FALSE);
	m_ctrlExact.SetCurSel(0);	//分辨率設為12位AD,即0.0623度

	m_ctrlComPort.SetCurSel(0);	//設為COM1
	m_ctrlBaud.SetCurSel(2);	//設為19200bps
	
	m_ctrlComm.SetCommPort(1);			//選擇COM1
	m_ctrlComm.SetInputMode(1);			//輸入方式為二進制
	m_ctrlComm.SetInBufferSize(1024);	//設置輸入緩沖區大小
	m_ctrlComm.SetOutBufferSize(1024);	//設置輸出緩沖區大小

	m_ctrlComm.SetSettings("19200,n,8,1");//波特率為19200,無校驗,8個數據位,1個停止位
	//參數1表示每當串口接收緩沖區有多于或等于1個字符時
	//將引發一個接收數據的OnComm事件
	if (!m_ctrlComm.GetPortOpen())
		m_ctrlComm.SetPortOpen(TRUE);
	GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("停止采集");
	m_ctrlComm.SetRThreshold(2);
	m_ctrlComm.SetInputLen(0);	//設置當前接收區數據長度為0
	m_ctrlComm.GetInput();		//先預讀緩沖區以清除殘留數據
	exact = 0x12;		//12位精度
	CString str_temp;
	str_temp.Format("%c", exact);
	m_ctrlComm.SetOutput((COleVariant)str_temp);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

BEGIN_EVENTSINK_MAP(CMyDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CMyDlg)
	ON_EVENT(CMyDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CMyDlg::OnComm() 
{
	VARIANT variant_inp;
	COleSafeArray safearray_inp;
	LONG len,k;
	BYTE rxdata[1024];	//設置BYTE數組
	CString strtemp;
	CString tempraturedata;
	
	if (m_ctrlComm.GetCommEvent()==2)
	{	//事件值為2表示接收緩沖區內有字符
		variant_inp = m_ctrlComm.GetInput();	//讀緩沖區
		safearray_inp = variant_inp;	//VARIANT型變量轉換為ColeSafeArray型變量
		len = safearray_inp.GetOneDimSize();	//得到有效數據長度
		for (k=0; k<len; k++)
		{
			safearray_inp.GetElement(&k,rxdata+k);	//轉換為BYTE型數組
		}
		double temperature;

		if ((rxdata[1] & 0x80)==0x80)
		{
			temperature = (-1) * rxdata[0]*0.0625 + (rxdata[1]&0x0F)*16;
		}
		else	//12位AD轉換得到0.0625的分辨率
		{
			temperature = rxdata[0]*0.0625 + (rxdata[1]&0x0F)*16;
		}

		len = atoi(tempraturedata);
		CurTime = COleDateTime::GetCurrentTime();
		CString CsTime ;
		CsTime = CurTime.Format("%H:%M:%S");
		//m_ctrlChart.GetAxis().GetBottom().SetMaximum(gather_times);
		//m_ctrlChart.GetAxis().GetBottom().SetMinimum(gather_times-40);
		m_ctrlChart.Series(0).AddXY(gather_times,temperature,CsTime,gather_times);
		m_ctrlChart.Series(1).AddXY(gather_times,m_longHigh,"",gather_times);
		m_ctrlChart.Series(2).AddXY(gather_times,m_longLow,"",gather_times);
		m_ctrlChart.Series(3).AddXY(gather_times,0,"",gather_times);
				
		CString str_TempList;
		CsTime = CurTime.Format("%H時%M分%S秒");
		str_TempList.Format("%02d.   %s   %.4f℃", gather_times, CsTime, temperature);
		
		m_ctrlListResult.AddString(str_TempList);
		m_ctrlListResult.SetCurSel(m_ctrlListResult.GetCount()-1);
		
		gather_times++;
	}
}

void CMyDlg::OnButtonBegin() 
{
	if (m_ctrlComm.GetPortOpen())
	{
		m_ctrlComm.SetPortOpen(FALSE);
		GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("開始采集");
	}
	else
	{
		m_ctrlComm.SetPortOpen(TRUE);
		GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("停止采集");
	}
}

void CMyDlg::OnChangeComport() 
{
	if (m_ctrlComm.GetPortOpen())
	{
		m_ctrlComm.SetPortOpen(FALSE);	//串口已打開則關閉串口
		GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("開始采集");
	}

	switch(m_ctrlComPort.GetCurSel())
	{
		case 0:	m_ctrlComm.SetCommPort(1);
				break;
		case 1:	m_ctrlComm.SetCommPort(2);
				break;
		case 2: m_ctrlComm.SetCommPort(3);
				break;
		default:
				break;
	}
	if (!m_ctrlComm.GetPortOpen())		//串口未打開則打開串口
	{
		m_ctrlComm.SetPortOpen(TRUE);
		GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("停止采集");	
	}
}

void CMyDlg::OnTimer(UINT nIDEvent) 
{
	//定時時間到發送讀溫度指令
	if (m_ctrlComm.GetPortOpen())
	{
		CString command="1";
		m_ctrlComm.SetOutput((COleVariant)(command));
		CDialog::OnTimer(nIDEvent);
	}
}

void CMyDlg::OnChangeInterval() 
{
	UpdateData(TRUE);
	long time;
	CString temp;
	temp.Format("修改采集間隔: %d S", m_IntervalTime);
	m_ctrlListResult.AddString(temp);
	m_ctrlListResult.SetCurSel(m_ctrlListResult.GetCount()-1);
	time = m_IntervalTime*1000;
	SetTimer(1,time,NULL);
}

BOOL CMyDlg::DestroyWindow() 
{
	KillTimer(1);
	return CDialog::DestroyWindow();
}

void CMyDlg::OnSave() 
{
	//顯示文件保存對話框
	CurTime = COleDateTime::GetCurrentTime();
	CString CsTime ;
	CsTime = "溫度記錄__" + CurTime.Format("%m月%d日%H時%M分%S秒") + ".txt";
	CFileDialog dlg(FALSE, "txt", CsTime,OFN_HIDEREADONLY  | OFN_OVERWRITEPROMPT,"Text Files & Bmp Files (*.txt *.bmp)|");
	if ( dlg.DoModal()!=IDOK )
		return;
	//獲取文件的絕對路徑
	CString sFileName=dlg.GetPathName();
	CString bmppath = sFileName + "溫度記錄__" + CurTime.Format("%m月%d日%H時%M分%S秒") + ".bmp";
	m_ctrlChart.GetExport().SaveToBitmapFile(bmppath);
	CStdioFile out;
	//打開文件
	out.Open(sFileName, CFile::modeCreate | CFile::modeWrite);
	//保存文件
	int nCount = m_ctrlListResult.GetCount();
	CString str;
	for (int i=0; i<nCount; i++)
	{
		m_ctrlListResult.GetText(i,str);
		str += '\n';
		out.WriteString(str);
	}
	//關閉文件
	out.Close();
}

void CMyDlg::OnButtonClear() 
{
	m_ctrlChart.Series(0).Clear();
	m_ctrlChart.Series(1).Clear();
	m_ctrlChart.Series(2).Clear();
	gather_times = 0;
	m_ctrlListResult.ResetContent();
	UpdateData(FALSE);
}

/***************改變串口波特率****************/
void CMyDlg::OnChangeComboBaud() 
{	
	UpdateData(TRUE);
	CString BaudSet;

	if (m_ctrlComm.GetPortOpen())
	{
		m_ctrlComm.SetPortOpen(FALSE);
		GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("開始采集");
	}

	switch(m_ctrlBaud.GetCurSel())
	{
		case 0:	BaudSet = "4800,n,8,1";
				break;
		case 1:	BaudSet = "9600,n,8,1";
				break;
		case 2:	BaudSet = "19200,n,8,1";
				break;
		case 3:	BaudSet = "38400,n,8,1";
				break;
		default:
				break;
	}
	
	m_ctrlComm.SetSettings(BaudSet);
	if (!m_ctrlComm.GetPortOpen())
	{
		m_ctrlComm.SetPortOpen(TRUE);
		GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("停止采集");
	}
}

void CMyDlg::OnSelchangeExact() 
{
	CString str_temp;
	switch (m_ctrlExact.GetCurSel())
	{
	case 0:	exact = 0x12;
			str_temp.Format("%c", exact);
			m_ctrlComm.SetOutput((COleVariant)str_temp);
			m_ctrlListResult.AddString("修改采集分辨率為0.0625℃");
			break;
	case 1:	exact = 0x11;
			str_temp.Format("%c", exact);
			m_ctrlComm.SetOutput((COleVariant)str_temp);
			m_ctrlListResult.AddString("修改采集分辨率為0.125℃");
			break;
	case 2:	exact = 0x10;
			str_temp.Format("%c", exact);
			m_ctrlComm.SetOutput((COleVariant)str_temp);
			m_ctrlListResult.AddString("修改采集分辨率為0.25℃");
			break;
	case 3:	exact = 0x09;
			str_temp.Format("%c", exact);
			m_ctrlComm.SetOutput((COleVariant)str_temp);
			m_ctrlListResult.AddString("修改采集分辨率為0.5℃");
			break;
	default:
			break;
	}
}

void CMyDlg::OnKillfocusEditHigh() 
{
	UpdateData(TRUE);
	if ((m_longHigh>=-55) && (m_longHigh<=125))
	{
		m_ctrlChart.Series(1).Clear();
		m_ctrlChart.Series(1).AddXY(0,m_longHigh,"",gather_times);
		m_ctrlChart.Series(1).AddXY(0,m_longHigh,"",0);
		m_ctrlChart.Series(1).AddXY(gather_times,m_longHigh,"",gather_times);
	}	
}

void CMyDlg::OnKillfocusEditLow() 
{
	UpdateData(TRUE);
	if ((m_longLow>=-55) && (m_longLow<=125))
	{
		m_ctrlChart.Series(2).Clear();
		m_ctrlChart.Series(2).AddXY(0,m_longLow,"",gather_times);
		m_ctrlChart.Series(2).AddXY(0,m_longLow,"",0);
		m_ctrlChart.Series(2).AddXY(gather_times,m_longLow,"",gather_times);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线看国产一区| 精品国产乱码久久久久久蜜臀 | 制服丝袜成人动漫| 久久精品这里都是精品| 一区二区三区在线视频免费 | 色综合视频在线观看| 精品欧美乱码久久久久久1区2区| 亚洲欧洲日韩av| 国产伦精品一区二区三区免费迷| 欧美日韩视频一区二区| 亚洲欧洲韩国日本视频| 国产精品一区二区三区99| 91精品国产麻豆国产自产在线| 亚洲欧美日韩在线| 成人丝袜视频网| 精品国产一区二区国模嫣然| 日韩vs国产vs欧美| 欧美日韩精品系列| 亚洲1区2区3区视频| 欧美在线短视频| 夜夜嗨av一区二区三区| 色先锋aa成人| 一区二区三区免费网站| 成人午夜精品在线| 久久久精品欧美丰满| 激情伊人五月天久久综合| 91精品国产一区二区三区蜜臀| 亚洲午夜三级在线| 在线观看网站黄不卡| 亚洲免费观看高清完整版在线观看| 成人免费视频app| 欧美国产日韩一二三区| 成人精品在线视频观看| 国产精品第五页| 97精品电影院| 亚洲激情欧美激情| 欧美视频你懂的| 青娱乐精品视频| 精品国产凹凸成av人导航| 狠狠狠色丁香婷婷综合久久五月| 精品国产一区二区在线观看| 国产一区福利在线| 久久精品亚洲精品国产欧美kt∨| 国产一区二区主播在线| 国产精品国产三级国产aⅴ入口 | 亚洲一区二区三区三| 欧美日韩日本视频| 蜜臀va亚洲va欧美va天堂| 精品成人免费观看| 高清在线成人网| 亚洲精品一二三四区| 91精品国产综合久久精品app| 激情综合亚洲精品| 国产精品久久久久四虎| 欧美日韩在线三级| 激情综合五月天| 久久香蕉国产线看观看99| 成人av免费在线| 午夜精品福利视频网站| 久久久久久毛片| 91成人免费在线| 久久99精品久久久| 国产精品久久久久精k8| 91精品中文字幕一区二区三区| 国产中文一区二区三区| 亚洲另类春色国产| 精品国内片67194| 欧美区在线观看| 国产成人综合视频| 亚洲国产精品久久不卡毛片| 精品精品国产高清a毛片牛牛| 99国产精品99久久久久久| 日本成人在线看| 中文字幕在线不卡视频| 日韩一区二区三区视频| 91美女片黄在线观看| 久久精品国产亚洲高清剧情介绍| 专区另类欧美日韩| 26uuu精品一区二区| 欧美日韩视频专区在线播放| 成人免费高清在线| 国内精品不卡在线| 亚洲妇熟xx妇色黄| 亚洲视频在线观看一区| 久久亚洲一区二区三区明星换脸| 色哟哟一区二区三区| 国产不卡高清在线观看视频| 日韩av一二三| 亚洲永久免费视频| 中文字幕国产一区| 精品日韩在线一区| 欧美美女一区二区| 色综合天天综合狠狠| 国产成人在线视频网址| 久久99久久久欧美国产| 五月激情综合婷婷| 亚洲曰韩产成在线| 亚洲免费在线视频一区 二区| 久久精品一区四区| 2欧美一区二区三区在线观看视频| 91 com成人网| 欧美性生活久久| 欧美在线视频你懂得| 日本韩国欧美在线| 91免费观看在线| 91麻豆自制传媒国产之光| 成人av在线播放网站| 波多野结衣中文字幕一区二区三区| 韩国一区二区视频| 国产在线观看一区二区| 久久精品国产99国产| 捆绑紧缚一区二区三区视频| 国产一区二区三区最好精华液| 日韩国产高清在线| 九色|91porny| 国产九色精品成人porny| 风间由美一区二区av101| 粉嫩av亚洲一区二区图片| 成人永久看片免费视频天堂| 成人激情动漫在线观看| av高清久久久| 欧洲视频一区二区| 欧美一区二区三区视频在线观看| 3d动漫精品啪啪一区二区竹菊| 91精品国产欧美日韩| 日韩三级视频在线看| 久久久欧美精品sm网站| 国产精品剧情在线亚洲| 一区二区三区毛片| 免费精品视频在线| 国产成人免费在线| 色又黄又爽网站www久久| 欧美日本韩国一区二区三区视频| 678五月天丁香亚洲综合网| 久久综合色一综合色88| 国产精品欧美精品| 亚洲超丰满肉感bbw| 黄一区二区三区| 99久久精品99国产精品| 欧美视频一区在线| 久久新电视剧免费观看| 亚洲色图制服诱惑| 免费成人美女在线观看| 国产成人综合在线观看| 在线免费亚洲电影| 欧美成人一区二区三区在线观看 | 国产精品一二二区| 色综合欧美在线| 欧美成人高清电影在线| 中文字幕视频一区| 日本美女视频一区二区| 99热精品国产| 日韩免费观看高清完整版| 亚洲男同性视频| 久久99国产精品免费网站| 91尤物视频在线观看| 日韩欧美一区二区久久婷婷| 综合久久给合久久狠狠狠97色| 麻豆极品一区二区三区| 97精品久久久午夜一区二区三区| 91精品国产全国免费观看| 亚洲视频免费观看| 国产剧情av麻豆香蕉精品| 欧美日韩成人在线| 1000部国产精品成人观看| 精品亚洲成av人在线观看| 欧美性猛交xxxx黑人交| 国产精品毛片a∨一区二区三区| 日韩黄色一级片| 91浏览器在线视频| 国产欧美日韩不卡| 男人的天堂久久精品| 欧美日韩一区二区三区视频| 欧美国产激情二区三区| 国产一区二区三区久久久| 欧美日韩视频在线观看一区二区三区| 日本一区二区高清| 国模娜娜一区二区三区| 91麻豆精品国产91久久久久久久久 | 国产精品三级av| 美国十次了思思久久精品导航| 一本到三区不卡视频| 国产精品麻豆视频| 国产高清精品网站| 2020国产精品| 精品一二线国产| 日韩欧美国产精品| 蜜桃一区二区三区在线| 欧美一区二区三区四区高清| 亚洲国产成人porn| 欧美日韩精品欧美日韩精品一综合| 亚洲情趣在线观看| 色婷婷狠狠综合| 亚洲一级在线观看| 欧美日韩国产另类一区| 午夜精品久久久久久久久久| 欧美性大战久久| 天天综合色天天综合| 日韩一级片网址| 麻豆freexxxx性91精品|