编写上位机软件和51通讯

she_xiang 2012-12-25 10:44:14
请教下各位高手,我想写一个上位机和51通讯的软件,用什么语言比较好?是C++,还是VB。我自己会C语言,C++也了解点。
...全文
479 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
keith_cheung 2013-01-03
  • 打赏
  • 举报
回复
就用 MFC 写类似人家串口助手之类,网上大把例子。 想必你也会抄的,呵呵。
woshi_ziyu 2012-12-31
  • 打赏
  • 举报
回复
引用 15 楼 she_xiang 的回复:
谢谢各位了,我C++了,
请及时结贴
she_xiang 2012-12-31
  • 打赏
  • 举报
回复
谢谢各位了,我C++了,
Simality 2012-12-30
  • 打赏
  • 举报
回复
我拿VB入门的,MFC后来用过。
特高压坏男孩 2012-12-30
  • 打赏
  • 举报
回复
用MFC和VB比较简单,好入门
aydf1 2012-12-27
  • 打赏
  • 举报
回复
那就用C++呗。。做个简单的上位机,简单实现串口通信,网口通讯。
mleige 2012-12-27
  • 打赏
  • 举报
回复
VB几个控件就行了,挺简单。
天冰天降 2012-12-27
  • 打赏
  • 举报
回复
看楼主自述,还是VB
yisiyou 2012-12-27
  • 打赏
  • 举报
回复
用MFC,我用过
lr2131 2012-12-27
  • 打赏
  • 举报
回复
哪种方式都可以的时候,那你就选你自己最熟悉的方法嘛,这么简单的问题。要感觉用C/C++不知道怎么下手,我之前有个帖子里面有代码,另外你也可以上网下个串口调试助手什么的,以备测试你自己的代码,好用就行。 http://bbs.csdn.net/topics/390308547
痴才 2012-12-27
  • 打赏
  • 举报
回复
老大 给点分吧! 你会C的话。。怎么做都行, 但我劝你用C#。。 串口通信 C#上手 比较快 方便! C++ 也行 我给你贴上点C++的代码。。 做个创建个对话框应用程序。 我给你贴些 代码 有可能 用上。。。 void CSerialPortDlg::OnBnClickedButtonConnect() { // TODO: 在此添加控件通知处理程序代码 DWORD IDThread; OpenCom(_T("COM2"),9600,8,1,0); hdcomThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)ReadData, AfxGetMainWnd()->m_hWnd,0, &IDThread);//创建线程接收数据 } void CSerialPortDlg::OnBnClickedButtonSend() { // TODO: 在此添加控件通知处理程序代码 DWORD Rlength; char sendbuf[512]=""; //memset(sendbuf UpdateData(true); for(int i=0;i<SendData.GetLength();i++) { sendbuf[i]=SendData[i]; } WriteFile(hdcom,sendbuf,(char)SendData.GetLength(),&Rlength,&ComOver); ComError=GetLastError(); } BOOL CSerialPortDlg::OpenCom(LPCTSTR Port, int BaudRate, int DataBits, int StopBits, int Parity) { DCB dcb; COMMTIMEOUTS CommTimeOuts; hdcom=CreateFile(Port,GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); //打开串口 if(hdcom==INVALID_HANDLE_VALUE) { AfxMessageBox(_T("!串口不存在或已被占用")); return FALSE; } else { GetCommState(hdcom,&dcb); dcb.BaudRate=BaudRate; dcb.ByteSize=DataBits; dcb.StopBits=StopBits; dcb.Parity=Parity; SetCommState(hdcom,&dcb); SetupComm(hdcom,2048,2048); SetCommMask(hdcom,EV_RXCHAR|EV_TXEMPTY); GetCommTimeouts(hdcom, &CommTimeOuts); CommTimeOuts.ReadIntervalTimeout=10; SetCommTimeouts(hdcom, &CommTimeOuts); return true; } } DWORD WINAPI ReadData(HWND hWnd)//主窗口句柄 { /*CSerialPortDlg *pMy=(CSerialPortDlg *)hWnd; pMy->ComError; pMy->ComStat; pMy->ReadFlag; pMy->ComOver; pMy->ComEvent;*/ char str[512]=""; DWORD wCount; //读取的字节数 DWORD wCount01; memset(&ComOver,0,sizeof(OVERLAPPED)); ComOver.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); while(1) { Sleep(2); ComEvent=0; WaitCommEvent(hdcom,&ComEvent,&ComOver); if((ComEvent&EV_RXCHAR)==EV_RXCHAR)//缓冲区中有数据到达 { ClearCommError(hdcom,&ComError,&ComStat); wCount=ComStat.cbInQue;////输入缓冲区有多少数据? if(wCount>0) { ReadFlag=ReadFile(hdcom,&str,8,&wCount01,&ComOver); str[wCount01]='\0'; if(!ReadFlag) { if(GetLastError()==ERROR_IO_PENDING) { while(!GetOverlappedResult(hdcom,&ComOver,&wCount01,TRUE )) { ComError=GetLastError(); if(ComError==ERROR_IO_PENDING)continue; //缓冲区数据没有读完,继续 } } } } ::PostMessage(hWnd,COM_RECVDATA,(unsigned int)str,wCount);//发送自定义消息给主线程,通知有数据到 ComEvent=0; } if(hdcom == INVALID_HANDLE_VALUE) break; } return TRUE; } //接受 LRESULT CSerialPortDlg::DataRecv(WPARAM wParam, LPARAM lParam) { CString recvStr((char *)wParam); RecvData += recvStr; UpdateData(false); return true; }
该用户很帅 2012-12-25
  • 打赏
  • 举报
回复
delphi simple
zhaozilan_ly 2012-12-25
  • 打赏
  • 举报
回复
那就用C++呗。。做个简单的上位机,简单实现串口通信,网口通讯。
woshi_ziyu 2012-12-25
  • 打赏
  • 举报
回复
使用自己最熟悉的方式
O丸子爹O 2012-12-25
  • 打赏
  • 举报
回复
还是用MFC吧,但是那里面的串口空间不那么好用。 关于串口通讯可以参阅龚建伟的书。 此书值得推荐。
caojue28 2012-12-25
  • 打赏
  • 举报
回复
VB里的串口控件也相当好用
mailzss 2012-12-25
  • 打赏
  • 举报
回复
MFC,里面有个串口控件,很容易的,网上一大把。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧