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

📄 dataframe.cpp

📁 CAN通讯的测试软件,数据可发送及接收,并能设置时间
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DataFrame.cpp : implementation file
//

#include "stdafx.h"
#include "VcDemo.h"
#include "DataFrame.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDataFrame dialog
CDataFrame::CDataFrame(CWnd* pParent /*=NULL*/)
	: CDialog(CDataFrame::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDataFrame)
	m_intLoopNum = 0;
	m_intFrameNum = 0;
	m_intDataNum = 0;
	m_strFrame = _T("");
	m_strID0 = _T("");
	m_strID1 = _T("");
	m_Data2 = _T("");
	m_Data3 = _T("");
	m_Data4 = _T("");
	m_Data5 = _T("");
	m_Data6 = _T("");
	m_Data7 = _T("");
	m_Data1 = _T("");
	m_Data0 = _T("");
	m_index = 0;
	m_strID2 = _T("");
	m_strID3 = _T("");
	//}}AFX_DATA_INIT
	m_setPacketNum = 0x0;
    // 设置工作模式 
	m_workMode = 0x0;
}


void CDataFrame::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDataFrame)
	DDX_Control(pDX, IDC_CmbFrame, m_cmbFrame);
	DDX_Text(pDX, IDC_EdtLoopNum, m_intLoopNum);
	DDV_MinMaxInt(pDX, m_intLoopNum, 1, 10);
	DDX_Text(pDX, IDC_EdtFrameNum, m_intFrameNum);
	DDV_MinMaxInt(pDX, m_intFrameNum, 1, 10);
	DDX_Text(pDX, IDC_EdtDataNum, m_intDataNum);
	DDV_MinMaxInt(pDX, m_intDataNum, 0, 8);
	DDX_CBString(pDX, IDC_CmbFrame, m_strFrame);
	DDX_Text(pDX, IDC_EdtID0, m_strID0);
	DDV_MaxChars(pDX, m_strID0, 2);
	DDX_Text(pDX, IDC_EdtID1, m_strID1);
	DDV_MaxChars(pDX, m_strID1, 2);
	DDX_Text(pDX, IDC_EdtData2, m_Data2);
	DDV_MaxChars(pDX, m_Data2, 2);
	DDX_Text(pDX, IDC_EdtData3, m_Data3);
	DDV_MaxChars(pDX, m_Data3, 2);
	DDX_Text(pDX, IDC_EdtData4, m_Data4);
	DDV_MaxChars(pDX, m_Data4, 2);
	DDX_Text(pDX, IDC_EdtData5, m_Data5);
	DDV_MaxChars(pDX, m_Data5, 2);
	DDX_Text(pDX, IDC_EdtData6, m_Data6);
	DDV_MaxChars(pDX, m_Data6, 2);
	DDX_Text(pDX, IDC_EdtData7, m_Data7);
	DDV_MaxChars(pDX, m_Data7, 2);
	DDX_Text(pDX, IDC_EdtData1, m_Data1);
	DDV_MaxChars(pDX, m_Data1, 2);
	DDX_Text(pDX, IDC_EdtData0, m_Data0);
	DDV_MaxChars(pDX, m_Data0, 2);
	DDX_Text(pDX, IDC_EdtIndex, m_index);
	DDX_Text(pDX, IDC_EdtID2, m_strID2);
	DDX_Text(pDX, IDC_EdtID3, m_strID3);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDataFrame, CDialog)
	//{{AFX_MSG_MAP(CDataFrame)
	ON_BN_CLICKED(IDC_BtnDown, OnBtnDown)
	ON_BN_CLICKED(IDC_BtnUp, OnBtnUp)
	ON_CBN_SELCHANGE(IDC_CmbFrame, OnSelchangeCmbFrame)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// MultiplyXY
unsigned long MultiplyXY(unsigned long xx, unsigned int yy)
{
     unsigned int    loopX;
     unsigned long   retValue = 0;
 
     retValue = xx;
     if(yy <= 0)
	 {
		 return 1;
	 }
	 if(yy == 1)
	 {
		 return retValue;
	 }

	 for(loopX = 0; loopX < yy - 1; loopX++)
	 {
	      retValue *= xx;
	 }
	 return retValue;
}

// Function defined by ourself
// 实现字符串到十六进制数据的转换	
unsigned long  StringToHex(CString xx)
{
     unsigned long   hexX,hexY; 
	 unsigned char   ascNum;
	 unsigned int    len;
	 unsigned int    loopNum;

	 len = xx.GetLength();
	 hexX = 0;
     hexY =  0;

     for(loopNum = 0; loopNum < len; loopNum++)
	 {
		 ascNum = xx.GetAt(loopNum);
		 if((ascNum >= 0x30) && (ascNum <= 0x39))
		 {
			hexX = (ascNum - 0x30) * MultiplyXY(16,(len - loopNum - 1));
			hexY += hexX;
		 }
		 else if((ascNum >= 0x41) && (ascNum <= 0x46))
		 {
            hexX = (10 + ascNum - 0x41) * MultiplyXY(16,(len - loopNum - 1));
			hexY += hexX;
		 }
		 else if((ascNum >= 0x61) && (ascNum <= 0x66))
		 {
            hexX = (10 + ascNum - 0x61) * MultiplyXY(16,(len - loopNum - 1));
			hexY += hexX;
		 }
     }
	 return hexY;
}

// 实现数据到字符串的转换
CString CDataFrame::HexToString(unsigned long xx)
{
	CString yy;
	yy.Format("%s%x", yy, xx); 
	return yy;
}

// 实现数据到字符串的转换
CString CDataFrame::HexToString2(unsigned char xx)
{
	CString yy;
	yy.Format("%s%x", yy, xx);
	
	if(yy.GetLength() < 2)
	{
		if(yy.GetLength() == 1)
		{
			yy.Insert(0,"0"); 
		}
	}
	return yy;
}

// 实现数据到字符串的转换
CString CDataFrame::HexToString4(unsigned long xx)
{
	CString yy;
	yy.Format("%s%x", yy, xx);
	
	if(yy.GetLength() < 8)
	{
		if(yy.GetLength() == 1)
		{
			yy.Insert(0,"0000000"); 
		}
		else if(yy.GetLength() == 2)
		{
			yy.Insert(0,"000000"); 
		}
		else if(yy.GetLength() == 3)
		{
			yy.Insert(0,"00000"); 
		}
        else if(yy.GetLength() == 4)
		{
			yy.Insert(0,"0000"); 
		}
		else if(yy.GetLength() == 5)
		{
			yy.Insert(0,"000"); 
		}
		else if(yy.GetLength() == 6)
		{
			yy.Insert(0,"00"); 
		}
		if(yy.GetLength() == 7)
		{
			yy.Insert(0,"0"); 
		}
	}
	return yy;
}


/////////////////////////////////////////////////////////////////////////////
// CDataFrame message handlers
BOOL CDataFrame::OnInitDialog() 
{
	CDialog::OnInitDialog();
    CString ID;

	// TODO: Add your specialized creation code here
	// 数据索引
	m_index = 1;

    CEdit* pLY;
	if(m_workMode)
	{
		// Extend Frame
		// show low two ACR
		pLY = (CEdit*)GetDlgItem(IDC_EdtID0);
		pLY->ShowWindow(SW_SHOW);
		pLY = (CEdit*)GetDlgItem(IDC_EdtID1);
		pLY->ShowWindow(SW_SHOW);
	}
	else
	{
		// Standard Frame
		// hide low two ACR
		pLY = (CEdit*)GetDlgItem(IDC_EdtID0);
		pLY->ShowWindow(SW_HIDE);
		pLY = (CEdit*)GetDlgItem(IDC_EdtID1);
		pLY->ShowWindow(SW_HIDE);
	}

	// 从已经保存的数据结构中取数
	if(m_setPacketNum > 0)
	{
		// DATA frame	
        if(ptrPacket[m_index - 1].rtr <= 0)
		{
			m_cmbFrame.SetCurSel(0);
		}
		else
		{
			m_cmbFrame.SetCurSel(1); 
		}
	
		// ID(从十六进制转换为字符串)
		if(m_workMode)
        {
			ID = HexToString4(ptrPacket[m_index-1].CAN_ID *  MultiplyXY(2,3));  
        }
		else
		{
			ID = HexToString4(ptrPacket[m_index-1].CAN_ID *  MultiplyXY(2,5));  
		}
		m_strID3 = ID.Mid(0,2); 
		m_strID2 = ID.Mid(2,2);
		m_strID1 = ID.Mid(4,2);
		m_strID0 = ID.Mid(6,2); 

		// DATA length
		if(ptrPacket[m_index].length >8)
		{
            ptrPacket[m_index].length = 0x08;
		}
		m_intDataNum = ptrPacket[m_index].length;

		// DATA
        m_Data0 = HexToString2(ptrPacket[m_index-1].data[0]);
        m_Data1 = HexToString2(ptrPacket[m_index-1].data[1]); 
		m_Data2 = HexToString2(ptrPacket[m_index-1].data[2]);
		m_Data3 = HexToString2(ptrPacket[m_index-1].data[3]);
		m_Data4 = HexToString2(ptrPacket[m_index-1].data[4]);
		m_Data5 = HexToString2(ptrPacket[m_index-1].data[5]);
		m_Data6 = HexToString2(ptrPacket[m_index-1].data[6]);
		m_Data7 = HexToString2(ptrPacket[m_index-1].data[7]);
	}
	else
	// 设置新的默认值    
	{
		// 显示正在设置的帧的索引
		m_index = 1;		
		m_intLoopNum = 1;
		m_intFrameNum = 1;
		m_intDataNum = 8;

		// Frame Type
		CComboBox* pLX;
		pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
		pLX->Clear(); 
		pLX->InsertString(-1,"数据帧");	
		pLX->InsertString(-1, "远程帧");
		m_strFrame = "数据帧";

  		m_strID0 = "00";
		m_strID1 = "00";
		m_strID2 = "00";
		m_strID3 = "00";
    
		m_Data0 = "00";
		m_Data1 = "00";	
		m_Data2 = "00";
		m_Data3 = "00";
		m_Data4 = "00";
		m_Data5 = "00";
		m_Data6 = "00";
		m_Data7 = "00";
	}
	UpdateData(FALSE);	    

⌨️ 快捷键说明

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