c++ 实现单片机跟电脑通讯
添加5个button控件,2个editbox控件,2个static textI 更改ID:DC_STATIC1,IDC_STATIC2
1个combobox,
void CMyDlg::OnButton1()
{
m_ReceiveData="";
m_Gettext.SetWindowText("");
}
void CMyDlg::OnButton4()
{
int i;
CByteArray array;
CString str;
m_Sendtext.GetWindowText (str);
str=str+"\r";
Count=strlen(str);
strcpy(TxData,str);
array.RemoveAll();
array.SetSize(Count);
for(i=0;i<Count;i++)
array.SetAt(i, TxData[i]);
m_comm.SetOutput(COleVariant(array));//发送数据
;
}
void CMyDlg::OnButton3()
{
m_Sendtext.SetWindowText("");
}
void CMyDlg::Enter(CString str)
{
int iLineNum=m_Gettext.GetLineCount();
CString s;
if(iLineNum<=200)
{
m_Gettext.SetSel(-1, -1);
m_Gettext.ReplaceSel(str+" ");
}
else
{
m_Gettext.SetSel(0, -1);
m_Gettext.Clear();
}
}
void CMyDlg::OnEditchangeCombo1()
{
}
void CMyDlg::OnSelendokCombo1()
{
CString str;
m_comm.SetCommPort(m_commport.GetCurSel()+1);
IDcom=m_commport.GetCurSel();
str.Format("%d", IDcom);
}
void CMyDlg::OnButton5()
{
if(IDcom==-1)
m_commport.SetCurSel (0);//0-8
if(m_comm.GetPortOpen())
{ m_comm.SetPortOpen(FALSE);
m_button5.SetWindowText("打开串口");
m_button4.EnableWindow(FALSE);
m_commport.EnableWindow (TRUE);
}
else
{ m_comm.SetPortOpen(TRUE);//打开串口
m_button5.SetWindowText("关闭串口");
m_button4.EnableWindow(TRUE);
m_commport.EnableWindow (FALSE);
IDcom=m_commport.GetCurSel();
}
void CMyDlg::OnCancel()//关闭对话框时提示:确定要退出系统
{
if(MessageBox("你确定要退出系统吗?","提示",MB_YESNO)==IDYES)
{
CDialog::OnCancel();
}
}
void CMyDlg::initcomm()
{
// m_comm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
if(m_comm.GetPortOpen()) //如果串口是打开的,则行关闭串口
m_comm.SetPortOpen(FALSE);
// m_comm.SetCommPort(1); //选择COM2
m_comm.SetInBufferSize(1024); //接收缓冲区
m_comm.SetOutBufferSize(1024);//发送缓冲区
m_comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_comm.SetInputMode(1);//以二进制方式读写数据
m_comm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_comm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
m_commport.AddString("COM1");m_commport.SetCurSel(0);
m_commport.AddString("COM2");m_commport.SetCurSel(1);
m_commport.AddString("COM3");m_commport.SetCurSel(2);
m_commport.AddString("COM4");m_commport.SetCurSel(3);
m_commport.AddString("COM5");m_commport.SetCurSel(4);
m_commport.AddString("COM6");m_commport.SetCurSel(5);
m_commport.SetWindowText("串口");
IDcom=-1;
// m_comm.GetInput(); //先预读缓冲区以xx残留数据
}
void CMyDlg::oncomm()
{
VARIANT m_Input1;
int num;
COleSafeArray m_Input2;
long length,i;
BYTE data[1024];
CString str;
if(m_comm.GetCommEvent()==2)//接收缓冲区内有字符
{
m_Input1=m_comm.GetInput();//读取缓冲区内的数据
// m_get=m_comm.GetInput();
m_Input2=m_Input1;//将VARIANT型变量转换为COleSafeArray型变量
length=m_Input2.GetOneDimSize();//确定数据长度
for(i=0;i<length;i++)
m_Input2.GetElement(&i,data+i);//将数据转换为BYTE型数组
for(i=0;i<length;i++)//将数组转换为CString型变量
{
char a=*(char*)(data+i);
str.Format("%c",a);
m_ReceiveData+=str;
num=strlen(m_ReceiveData);
if(num>500)
m_ReceiveData="";
m_Gettext.SetWindowText (m_ReceiveData);
}
}
UpdateData(FALSE);//更新编辑框内容
}
void CMyDlg::OnSelendokCombo1()
{
CString str;
m_comm.SetCommPort(m_commport.GetCurSel()+1);
IDcom=m_commport.GetCurSel();
str.Format("%d", IDcom);
}