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

📄 tdramdlg.cpp

📁 通过串口监测TDRAM是否正常工作的程序。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		break;
	default:
		AfxMessageBox("本程序只支持8、7、6三种长度的数据位!");
		break;
	}
	CString str;
	str.Format("%d,%c,%d,%d",m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
	m_ctrlComm.SetSettings(str);
	m_strComStatus.Format("%s Opened,%d,%c,%d,%d",m_strPort,m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
    pComStatus->SetWindowText(m_strComStatus);
	}
}

void CTDRAMDlg::OnSelchangeComboStopbits() 
{
	// TODO: Add your control notification handler code here
	CEdit *pComStatus=(CEdit*)GetDlgItem(IDC_EDIT_STATUS);
	if(!m_bFlagCom)
	{
		AfxMessageBox("端口已关闭!");
	    pComStatus->SetWindowText("COM Port Closed");
	}
	else
	{
	switch(m_ctrlStopBits.GetCurSel())
	{
	case 0:
		m_nStopBits=1;
		break;
	case 1:
		m_nStopBits=2;
		break;
	default:
		AfxMessageBox("本程序只支持1、2两种长度的停止位!");
		break;
	}
	CString str;
	str.Format("%d,%c,%d,%d",m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
	m_ctrlComm.SetSettings(str);
	m_strComStatus.Format("%s Opened,%d,%c,%d,%d",m_strPort,m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
    pComStatus->SetWindowText(m_strComStatus);
	}
}

BEGIN_EVENTSINK_MAP(CTDRAMDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CTDRAMDlg)
	ON_EVENT(CTDRAMDlg, IDC_MSCOMM, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CTDRAMDlg::OnComm() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
	COleSafeArray safearray_inp;
	LONG len,k;
	BYTE rxdata[1024];   //设置数组
	CString strtemp;
    CEdit *pRXData=(CEdit*)GetDlgItem(IDC_EDIT_RXDATA);
	m_nCommEvent=m_ctrlComm.GetCommEvent();
    if(m_nCommEvent==2)   //接收缓冲区有字符  
	{
		variant_inp=m_ctrlComm.GetInput();   //读缓冲区
		safearray_inp=variant_inp;
		len=safearray_inp.GetOneDimSize();
		for(k=0;k<len;k++)
			safearray_inp.GetElement(&k,rxdata+k);   //将VARIANT型变量转换为BYTE型数组
		for(k=0;k<len;k++)   //将数组转换为CString型变量,并送入接收对话框
		{
			BYTE bt=*(char*)(rxdata+k);
			strtemp.Format("%02X ",bt);
			m_strRXData+=strtemp;
		}
		pRXData->SetWindowText(m_strRXData);
	}
//	else if(m_ctrlComm.GetCommEvent()==1009)   //奇偶校验错误
//		AfxMessageBox("数据有误,请重传!");
//	else
//		AfxMessageBox("程序出错,请关闭程序!");
}

void CTDRAMDlg::OnButtonClosecom() 
{
	// TODO: Add your control notification handler code here
	CWinApp *pApp=AfxGetApp();
	HICON hIcon;
	CEdit *pComStatus=(CEdit*)GetDlgItem(IDC_EDIT_STATUS);
	if(m_bFlagCom)
	{
		GetDlgItem(IDC_BUTTON_CLOSECOM)->SetWindowText(_T("打开串口"));
		hIcon=pApp->LoadIcon(IDI_ICON_COMOFF);
        m_ctrlDisplay.SetIcon(hIcon);
		m_ctrlComm.SetPortOpen(FALSE);
	    pComStatus->SetWindowText("COM Port Closed");
		m_bFlagCom=FALSE;
	}
	else
	{
		GetDlgItem(IDC_BUTTON_CLOSECOM)->SetWindowText(_T("关闭串口"));
		hIcon=pApp->LoadIcon(IDI_ICON_COMON);
        m_ctrlDisplay.SetIcon(hIcon);
	    m_ctrlComm.SetPortOpen(TRUE);
        m_strComStatus.Format("%s Opened,%d,%c,%d,%d",m_strPort,m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
        pComStatus->SetWindowText(m_strComStatus);
		m_bFlagCom=TRUE;
	}
}






void CTDRAMDlg::OnButtonCleartx() 
{
	// TODO: Add your control notification handler code here
	m_ctrlComm.SetOutBufferCount(0);  //清空发送缓冲区
    CEdit *pTXData=(CEdit*)GetDlgItem(IDC_EDIT_TXDATA);
	m_strTXData.Empty();              //清空发送框
	pTXData->SetWindowText(m_strTXData);
}

void CTDRAMDlg::OnButtonClearrx() 
{
	// TODO: Add your control notification handler code here
	m_ctrlComm.SetInBufferCount(0);  //清空发送缓冲区
    CEdit *pRXData=(CEdit*)GetDlgItem(IDC_EDIT_RXDATA);
	m_strRXData.Empty();              //清空发送框
	pRXData->SetWindowText(m_strRXData);
}

void CTDRAMDlg::OnButtonSend() 
{
	// TODO: Add your control notification handler code here
	m_ctrlComm.SetOutBufferCount(0);  //清空发送缓冲区
    m_ctrlComm.SetInBufferCount(0);   //清空接收缓冲区

	CByteArray hexdata;
	int len=String2Hex(m_strTXData,hexdata);
	m_ctrlComm.SetOutput(COleVariant(hexdata));  //发送信号

	//////////////////////////////////////////////
//	m_strRXData=m_strTXData;
//    CEdit *pRXData=(CEdit*)GetDlgItem(IDC_EDIT_RXDATA);
//	pRXData->SetWindowText(m_strRXData);
}

//这是一个将字符转换为相应的十六进制值的函数
//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1
char CTDRAMDlg::Char2Hex(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 CTDRAMDlg::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=Char2Hex(hstr);
		lowhexdata=Char2Hex(lstr);
		if((hexdata==16)||(lowhexdata==16))
			break;
		else 
			hexdata=hexdata*16+lowhexdata;
		i++;
		senddata[hexdatalen]=(char)hexdata;
		hexdatalen++;
	}

	senddata.SetSize(hexdatalen);
	return hexdatalen;
}


/*void CTDRAMDlg::OnChangeEditTxdata() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
    CEdit *pTXData=(CEdit*)GetDlgItem(IDC_EDIT_TXDATA);
	pTXData->GetWindowText(m_strTXData);
	int len = m_strTXData.GetLength();
	if(m_nTXData < 0)
		m_nTXData = 0;
	if(m_nTXData > 6000)
		m_nTXData = 6000;
	m_nSData = m_nTXData/24;
	
    binData.SetSize(1);
	binData[0]=(char)m_nSData;
	UpdateData(FALSE);
	
}*/







void CTDRAMDlg::OnStop() 
{
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("10");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
		m_nStart = 0;
	}
}




void CTDRAMDlg::OnChangeTxdata() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CEdit *pTXData=(CEdit*)GetDlgItem(IDC_TXDATA);
	pTXData->GetWindowText(m_strTXData);
	int nTXData;
	BYTE nHexData;
	nTXData = atoi(LPCTSTR(m_strTXData));
	if(nTXData < 0)
		nTXData = 0;
	if(nTXData > 6000)
		nTXData = 6000;
	nHexData = nTXData/24;
	binData.SetSize(1);
	binData[0]=(char)m_nSData;
}

void CTDRAMDlg::OnBegin() 
{
	int len;
	CByteArray hexdata;
	if(m_nStart == 0)
	{
		m_nStart = 1;
		m_ctrlComm.SetOutput(COleVariant(binData));  //发送信号
			if(m_Speed == 0)
		{
			m_strCommand = _T("50");
		}
		else
		{
			m_strCommand = _T("60");
		}
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
		if(m_Control == 0)
		{
			m_strCommand = _T("70");
		}
		else
		{
			m_strCommand = _T("80");
		}
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
		if(m_CW == 0)
		{
			m_strCommand = _T("30");
		}
		else
		{
			m_strCommand = _T("40");
		}
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}
}

void CTDRAMDlg::OnOK() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnOK();
}

void CTDRAMDlg::OnCw() 
{
	// TODO: Add your control notification handler code here
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("30");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}

}

void CTDRAMDlg::OnCcw() 
{
	// TODO: Add your control notification handler code here
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("40");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}

}

void CTDRAMDlg::OnFast() 
{
	// TODO: Add your control notification handler code here
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("50");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}

}

void CTDRAMDlg::OnSlow() 
{
	// TODO: Add your control notification handler code here
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("60");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}

}

void CTDRAMDlg::OnInterior() 
{
	// TODO: Add your control notification handler code here
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("70");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}

}

void CTDRAMDlg::OnExterior() 
{
	// TODO: Add your control notification handler code here
	int len;
	CByteArray hexdata;
	if(m_nStart == 1)
	{
		m_strCommand = _T("80");
		len=String2Hex(m_strCommand,hexdata);
		m_ctrlComm.SetOutput(COleVariant(hexdata)); 
	}
}

⌨️ 快捷键说明

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