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

📄 check.cpp

📁 本人用VC6.0开发的单片机通过串口与PC机通信的上位机,通信协议在说明文档中已经写出,用户在单片机上编写串口函数时按照通信协议,便可以很方便通过此软件与PC机通信.
💻 CPP
字号:
// Check.cpp : implementation file
//

#include "stdafx.h"
#include "OxcygenTest.h"
#include "Check.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCheck dialog


CCheck::CCheck(CWnd* pParent /*=NULL*/)
	: CDialog(CCheck::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCheck)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CCheck::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCheck)
	DDX_Control(pDX, IDC_MSCOMM1, m_com_check);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCheck, CDialog)
	//{{AFX_MSG_MAP(CCheck)
	ON_BN_CLICKED(IDC_BUTTON_GZEROIN, OnButtonGzeroin)
	ON_BN_CLICKED(IDC_BUTTON_GZEROOUT, OnButtonGzeroout)
	ON_BN_CLICKED(IDC_BUTTON_GSPANIN, OnButtonGspanin)
	ON_BN_CLICKED(IDC_BUTTON_GSPANOUT, OnButtonGspanout)
	ON_BN_CLICKED(IDC_BUTTON_CZEROIN, OnButtonCzeroin)
	ON_BN_CLICKED(IDC_BUTTON_CZEROOUT, OnButtonCzeroout)
	ON_BN_CLICKED(IDC_BUTTON_CSPANIN, OnButtonCspanin)
	ON_BN_CLICKED(IDC_BUTTON_CSPANOUT, OnButtonCspanout)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCheck message handlers

char CCheck::ConvertHexChar(char ch)
{
   if((ch>='0')&&(ch<='9'))
		return ch-0x30;
	else if((ch>='A')&&(ch<='F'))
		return ch-'A'+10;
	else if((ch>='a')&&(ch<='f'))
		return ch-'a'+10;
	else return (-1);
}


int CCheck::String16Hex(CString str)
{
	int hexdata,lowhexdata;
	int hexdatalen=0;
	int len=str.GetLength();
	for(int i=0;i<len;) {
		char lstr,hstr=str[i];
		if(hstr==' ') {
			i++;
			continue;
		}
		i++;
		if(i>=len)
			break;
		lstr=str[i];
		hexdata=ConvertHexChar(hstr);
		lowhexdata=ConvertHexChar(lstr);
		if((hexdata==16)||(lowhexdata==16))
			break;
		else 
			hexdata=hexdata*16+lowhexdata;
		i++;
	}
	return hexdata;
}

int CCheck::String2Hex(CString str, CByteArray &senddata)
{
    int hexdata,lowhexdata;
	int hexdatalen=0;
	int len=str.GetLength();
	senddata.SetSize(len/2);
	for(int i=0;i<len;) {
		char lstr,hstr=str[i];
		if(hstr==' ') {
			i++;
			continue;
		}
		i++;
		if(i>=len)
			break;
		lstr=str[i];
		hexdata=ConvertHexChar(hstr);
		lowhexdata=ConvertHexChar(lstr);
		if((hexdata==16)||(lowhexdata==16))
			break;
		else 
			hexdata=hexdata*16+lowhexdata;
		i++;
		senddata[hexdatalen]=(char)hexdata;
		hexdatalen++;
	}
	senddata.SetSize(hexdatalen);
	return hexdatalen;
}

unsigned char CCheck::String2int(char high, char low) {
	unsigned char temp1, temp2, answer;
	if((high>='0')&&(high<='9'))
		temp1 = high-0x30;
	else if((high>='A')&&(high<='F'))
		temp1 = high-'A'+10;
	else if((high>='a')&&(high<='f'))
		temp1 = high-'a'+10;

	if((low>='0')&&(low<='9'))
		temp2 = low-0x30;
	else if((low>='A')&&(low<='F'))
		temp2 = low-'A'+10;
	else if((low>='a')&&(low<='f'))
		temp2 = low-'a'+10;

	answer = temp1 * 16 + temp2;
	return answer;
}

void CCheck::OnButtonGzeroin() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x15;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonGzeroout() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x16;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonGspanin() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x17;
	command &= 0x7f;//最高位取0
	CString str0;
	GetDlgItemText(IDC_EDIT_CHECK_HDAT,str0);
	if(str0.GetLength() == 0 || str0.GetLength() < 2) {//判断从机地址是否输入
		MessageBox("请输入高字节数据!");
		SetTimer(1,100,NULL);
		return;
	}
	hdata = String2int(str0[0], str0[1]);

	GetDlgItemText(IDC_EDIT_CHECK_LDAT,str0);
	if(str0.GetLength() == 0 || str0.GetLength() < 2) {//判断从机地址是否输入
		MessageBox("请输入低字节数据!");
		SetTimer(1,100,NULL);
		return;
	}
	ldata = String2int(str0[0], str0[1]);
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonGspanout() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x18;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonCzeroin() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x1B;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonCzeroout() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x1C;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonCspanin() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x1D;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void CCheck::OnButtonCspanout() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x1E;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

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

void CCheck::OnOnCommMscomm_Check() 
{
	// TODO: Add your control notification handler code here
	
}

BOOL CCheck::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//初始化串口
	char *pBuf;
	DWORD dwFileLen;
	extern CString bodrate;//波特率
	extern CString jiaoyan;//校验位
	extern CString databit;//数据位
	extern CString stopbit;//停止位
	extern short c1;//串口位 	
	int ii[6];
	CString n;  
	CString p[6];   
	int i;
	CFile file("comset.ini",CFile::modeRead);
	dwFileLen=file.GetLength();
	pBuf=new char[dwFileLen+1];  
	pBuf[dwFileLen]=0;
	file.Read(pBuf,dwFileLen);
	file.Close();
	n=pBuf;
	p[0]=n.Mid(0,1);   
	p[1]=n.Mid(1,1); 
	p[2]=n.Mid(2,1);   
	p[3]=n.Mid(3,1); 
	p[4]=n.Mid(4,1);  
	for(i = 0; i < 5; i++) {    
		ii[i]=atoi(p[i]);
	}
	switch(ii[0]) {     //串口号	
		case 0:  c1=1; break; 
		case 1:  c1=2; break;  
		case 2:  c1=3; break;  
		case 3:  c1=4; break;  
		case 4:  c1=5; break;  
		case 5:  c1=6; break; 
		case 6:  c1=7; break;  
		case 7:  c1=8; break; 
		case 8:  c1=9; break;  
		case 9:  c1=10; break; 
		default:  c1=1;  break;
	};
	switch(ii[1]) {     //波特率
	  	case 0: bodrate="19200"; break; 
		case 1: bodrate="14400"; break;  
		case 2: bodrate="9600"; break;  
		case 3: bodrate="4800"; break;  
		case 4: bodrate="2400"; break;  
		case 5: bodrate="1800"; break;  
		default:  bodrate="9600";  break;
	}; 
	switch(ii[2]) {      //校验位设置	   	 
		case 0:   jiaoyan="n";    break; 
		case 1:   jiaoyan="n";    break;  
		case 2:   jiaoyan="n";    break;  
		default:  jiaoyan="n";    break;
	}; 
	switch(ii[3]) {     //数据位设置	   	
		case 0: databit="9"; break; 
		case 1: databit="8"; break;  
		case 2: databit="7"; break;  
		case 3: databit="6"; break;  
		case 4: databit="5"; break;  
		case 5: databit="4"; break;  
		default:  databit="8";  break;
	};	   
	switch(ii[4]) {      //数据位设置	   	
		case 0: stopbit="1.5"; break; 
		case 1: stopbit="1"; break;   
		default: stopbit="1";  break;
	};
	delete [] pBuf;
	m_com_check.SetCommPort(c1);               //选择COM1
    m_com_check.SetInBufferSize(1024);         //设置输入缓冲区的大小,字节
	m_com_check.SetOutBufferSize(1024);         //接收区           
	m_com_check.SetInputMode(1);               //输入二进制数据
	m_com_check.SetSettings(bodrate+","+jiaoyan+","+databit+","+stopbit);   //串口参数设置
	m_com_check.SetRThreshold(1);            //为1表示有一个字符引发事件
	m_com_check.SetInputLen(0);
	m_com_check.SetPortOpen(true);//打开串口*/
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

⌨️ 快捷键说明

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