⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selectbattdlg.cpp

📁 一个通过USB->UART读取C8051F060的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SelectBattDlg.cpp : implementation file
//

#include "stdafx.h"
#include "BattTest.h"
#include "SelectBattDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSelectBattDlg dialog


CSelectBattDlg::CSelectBattDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSelectBattDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSelectBattDlg)
	//}}AFX_DATA_INIT
}

void CSelectBattDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSelectBattDlg)
	DDX_Control(pDX, IDC_EMPTYFLASH_BTN, m_btnEmpty);
	DDX_Control(pDX, IDC_CONN_BTN, m_btnConn);
	DDX_Control(pDX, IDC_HASREADTIME_EDIT, m_wndHasRdTime);
	DDX_Control(pDX, IDC_BATTPATH_EDIT, m_wndBattPath);
	DDX_Control(pDX, IDC_BATTTYPE_EDIT, m_wndBattType);
	DDX_Control(pDX, IDC_READTIME_EDIT, m_wndRdTime);
	DDX_Control(pDX, IDC_CLOSE_BTN, m_btnClose);
	DDX_Control(pDX, IDC_READTIME_SPIN, m_Spin);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSelectBattDlg, CDialog)
	//{{AFX_MSG_MAP(CSelectBattDlg)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CLOSE_BTN, OnClose)
	ON_WM_PAINT()
	ON_MESSAGE(WM_THREADSYNCDATA, OnRecvMsg)
	ON_WM_CTLCOLOR()
	ON_NOTIFY(UDN_DELTAPOS, IDC_READTIME_SPIN, OnDeltaposSpin)
	ON_EN_CHANGE(IDC_BATTTYPE_EDIT, OnChangeBatttype)
	ON_BN_CLICKED(IDC_CONN_BTN, OnConn)
	ON_BN_CLICKED(IDC_EMPTYFLASH_BTN, OnEmptyFlash)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_CHGPATH_BTN, OnChgPath)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSelectBattDlg message handlers
static  BOOL  g_bInitPort = FALSE;
BOOL CSelectBattDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_brushBk1.CreateSolidBrush(RGB(150, 150, 155));
	m_wndRdTime.SetRange(1, 600);
	m_wndRdTime.SetWindowText("180");

	this->SetRdTime(0.0f);

	m_Spin.SetBase(1);
	m_Spin.SetRange(1, 10000);			//布数
	m_Spin.SetBuddy(&m_wndRdTime);
	
	//
	char pstrPath[APPPATHLEN];
	::pltCurrentPath(pstrPath, APPPATHLEN);
	::memcpy(pstrPath, g_strBattPath + LPCTSTR("\\ABC.dat"), 256);
	m_wndBattType.SetWindowText("ABC");

	m_wndBattPath.SetWindowText(pstrPath);
	m_wndBattType.SetFocus();
	
	///////////////////////////////////////////////////////////////////////////
	//初始化通信口
	g_bInitPort = g_objCalSerialComm.ConfigPort(3, 500000);
	if (!g_bInitPort)
	{
			 CButton *pBtn = (CButton *)GetDlgItem(IDC_CONN_BTN);
			 pBtn->EnableWindow(FALSE);
			 
			 pBtn = (CButton *)GetDlgItem(IDC_EMPTYFLASH_BTN);
			 pBtn->EnableWindow(FALSE);

			 //
			 ::AfxMessageBox("初始化USB口失败,无法读取数据!");
			 return FALSE;
	}	
	this->AddOwner(this, this);
	g_objCalSerialComm.AcceptConsumer(this);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSelectBattDlg::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();
	}
}

HBRUSH CSelectBattDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
		HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
		
		//pDC->SetBkMode(TRANSPARENT);
//		switch(nCtlColor) 
//		{
//		case CTLCOLOR_BTN:
//		case CTLCOLOR_STATIC:
//				break;
//		case CTLCOLOR_DLG:
			if (pWnd->GetSafeHwnd() == m_btnClose.GetSafeHwnd())
			{
					pDC->SetTextColor(RGB(0, 0, 0));
					hbr  = (HBRUSH)m_brushBk1.GetSafeHandle();
			}
//			break;
//		}
		
		return hbr;
}

void CSelectBattDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	//
	m_brushBk1.DeleteObject();
}

void CSelectBattDlg::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult) 
{
		NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;

		char   szBuff[16];
		//根据当前位置设定编辑值
		CString  rString;
		m_wndRdTime.GetWindowText(rString);
		int CurrentVal = ::atoi((LPCTSTR)rString);
		
		::sprintf(szBuff, "%d", CurrentVal+(pNMUpDown->iPos*1)*pNMUpDown->iDelta);
		m_wndRdTime.SetWindowText(szBuff);

		*pResult = 0;
}











/////////////////////////////////////////////////////////////////////////////////
//显示电池型号所对应的文件名
void CSelectBattDlg::OnChangeBatttype() 
{
		CString   strType;
		m_wndBattType.GetWindowText(strType);
		
		::memcpy(&g_pstrPath[0], g_strBattPath+("\\"+strType+".dat"), 256);
        
		TRACE1("文件名 = %s.\n", g_pstrPath);
		m_wndBattPath.SetWindowText(g_pstrPath);
}

//设定已读取得时间
void CSelectBattDlg::SetRdTime(float fRdTime)
{
		CString   strFmt;
		strFmt.Format("%.2f", fRdTime);
		m_wndHasRdTime.SetWindowText(strFmt);
}

int    CSelectBattDlg::GetRdTime()
{
		CString   rString;		
		//
		m_wndRdTime.GetWindowText(rString);
		return ::atoi(rString);
}





///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//计算出本次的字节数
int    CalcSampCapacity(char szRecvBuff[]/*SOC内的顺序*/, int nNumBytes)
{
		union  sTrf
		{
				char szTmp[4];
				int  nVal;
		}_pp;
		
		if (nNumBytes != 8)	
			return -1;
	
		_pp.szTmp[0] = szRecvBuff[4];
		_pp.szTmp[1] = szRecvBuff[5];
		_pp.szTmp[2] = 0x0;
		_pp.szTmp[3] = 0x0;
		return _pp.nVal;
}

//上报采集字节数
void  RequestSampBytes(CalSpeed_ArgCmdToCom *pCalSpeed_ArgCmdToCom)
{		
		ASSERT(pCalSpeed_ArgCmdToCom);
		//0-清零
		ZeroMemory(pCalSpeed_ArgCmdToCom, sizeof(CalSpeed_ArgCmdToCom));

		//==1.向MCU发送命令部分===
		pCalSpeed_ArgCmdToCom->szCmdBuff[0] = 0x55;
		pCalSpeed_ArgCmdToCom->szCmdBuff[1] = 0x55;
		pCalSpeed_ArgCmdToCom->szCmdBuff[2] = 0xCC;
		pCalSpeed_ArgCmdToCom->szCmdBuff[3] = 0xCC;
		pCalSpeed_ArgCmdToCom->nActualLen   = 12;		
}

//清空Flash闪存
void  EraseFlashBytes(CalSpeed_ArgCmdToCom *pCalSpeed_ArgCmdToCom)
{		
		ASSERT(pCalSpeed_ArgCmdToCom);
		//0-清零
		ZeroMemory(pCalSpeed_ArgCmdToCom, sizeof(CalSpeed_ArgCmdToCom));

		//==1.向MCU发送命令部分===
		pCalSpeed_ArgCmdToCom->szCmdBuff[0] = 0x66;
		pCalSpeed_ArgCmdToCom->szCmdBuff[1] = 0x66;
		pCalSpeed_ArgCmdToCom->szCmdBuff[2] = 0x66;
		pCalSpeed_ArgCmdToCom->szCmdBuff[3] = 0x66;
		pCalSpeed_ArgCmdToCom->nActualLen   = 12;	
}

void  SwapByte(byte  *p1, byte *p2)
{
		byte  sSwap = *p1;
		*p1 =  *p2;
		*p2 =  sSwap;	 
}

//////////////////////////////////////////////////////////////////////////////
//开始上传多少字节数
//格式为:55 55 55 55 00 00 00 00 00 00 00 00
//                  |-批数*512-| |-起始地址-|
//批数:0x xx xx 00, 地址:0x xx xx 00
void  TsfSendData(CalSpeed_ArgCmdToCom *pCalSpeed_ArgCmdToCom, long nBytesNum)
{
		int  nActualSize = (nBytesNum+4)*256*2;
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -