求一个读取串口数据的C程序

时间:2022-11-25 07:58:08
小弟因为毕业设计 需要写一个读取串口数据的程序 只学过简单的C语言 希望大虾能帮我一下 最好能简单的写下每一步的意思 谢谢了

18 个解决方案

#1


建议使用一个开发功能强悍的IDE

这样你就省去了很多麻烦,问题简化为直接使用api了

#2


可是我都不听说过你所说的哪个 IDE  API  都是什么东西都不知道 我毕业设计很急  现在急需这样一个程序 如果可以告诉我每一步都是什么意思 那我不懂的程序也行  只要能把老师应付过去就好 谢谢大哥们了

#3


大哥们 帮帮我 一个程序 快急死了

#4


像你这种情况, 毫无疑问是用控件最方便了. 
Visual Basic + MSCOMM控件, 是最最简单的串口通信方法.

#5


以下是C++下面读取串口数据的片断,
主要是ReadFile.

DWORD CCommand::ReadData(char *buffer, DWORD dwBytesRead)
{
if( !m_bOpened || m_hComDev == NULL ) return 0;

BOOL bReadStatus=0;
DWORD dwErrorFlags,dwBytesReaded=0;
COMSTAT ComStat;
CString recStr;
int k=0;
//buffer[0] ='\0';
ClearCommError( m_hComDev, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return 0;

dwBytesRead = min(dwBytesRead,(DWORD)ComStat.cbInQue);

bReadStatus = ReadFile( m_hComDev, buffer, dwBytesRead, &dwBytesReaded,NULL);//&m_OverlappedRead
if( !bReadStatus )
{
if( GetLastError() == ERROR_IO_PENDING )
{
WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );
return dwBytesRead;
}
return 0;
}
buffer[dwBytesReaded] = '\0';
for(k=0;k<(int)dwBytesReaded;k++)
{
BYTE bt=*(char*)(buffer+k);
if(m_ctrlHexDisplay.GetCheck())
recStr.Format("%02X ",bt);
else
recStr.Format("%c",bt);

m_Rec_Edit.SetSel(-1, -1);
m_Rec_Edit.ReplaceSel(recStr);
}
m_Rec_Edit.ReplaceSel("\r\n");
UpdateData(TRUE);

return dwBytesRead;

}

#6


什么平台的?

#7


引用 4 楼 sheenl 的回复:
像你这种情况, 毫无疑问是用控件最方便了.  
Visual Basic + MSCOMM控件, 是最最简单的串口通信方法.

对,如果是用Visual Basic + MSCOMM控件,那开发周期还是很短的.
用C的话你可以参照一个叫"串口调试助手"的程序(好像作者还写了开发过程的文章).

#8


5楼大哥 程序我看不懂  你能简单的说明下 每行代码是什么意思吗?

#9


4楼 和7楼的大哥 我在网上也看到了说用VB的MSCOMM控件是很方便的 但问题是我这是毕业设计中的一个程序 我对VB根本没接触过 所以我需要一个程序和简单的过程的中文意思  起码能把老师对付过去啊

#10


引用 8 楼 wms1986629 的回复:
5楼大哥 程序我看不懂  你能简单的说明下 每行代码是什么意思吗?

我那个程序你只要ReadFile这个怎么用.
Win32中,串口和其他通信设备均被作为文件处理.
串口的打开、关闭和读写等操作所用的API函数与操作文件的函数相同。
可通过CreateFile函数打开串口,通过CloseFile函数关闭串口,
通过CommProp、DCB结构、GetCommProperties、SetCommProperties、GetCommState及SetCommState等函数设置串口状态,通过函数ReadFile和WritFile读写串口。 
把这几个函数搞懂就差不多完成一半了.
推荐个网站给你:www.gjwtech.com (我上这个网站IE老是会当掉)

#11


引用 10 楼 candy110 的回复:
引用 8 楼 wms1986629 的回复:
5楼大哥 程序我看不懂  你能简单的说明下 每行代码是什么意思吗? 
 
我那个程序你只要ReadFile这个怎么用. 
Win32中,串口和其他通信设备均被作为文件处理. 
串口的打开、关闭和读写等操作所用的API函数与操作文件的函数相同。 
可通过CreateFile函数打开串口,通过CloseFile函数关闭串口, 
通过CommProp、DCB结构、GetCommProperties、SetCommProperties、GetCommState及SetCommState等函…

能否用论坛的在线聊天或者QQ 简单指导我一下啊 我毕业设计很急  大哥谢了

#12


在公司上不了QQ,而且还有任务在身:)
我觉得你可以先上网搜索一下相关资料.
到MSDN看看这几个函数的用法.
要不然我说什么你也未必听的很清楚.你觉得呢?
而且你要是用纯C写的话还应该看看<windows程序设计>这本书.

#13


引用 12 楼 candy110 的回复:
在公司上不了QQ,而且还有任务在身:) 
我觉得你可以先上网搜索一下相关资料. 
到MSDN看看这几个函数的用法. 
要不然我说什么你也未必听的很清楚.你觉得呢? 
而且你要是用纯C写的话还应该看看 <windows程序设计>这本书.

那我再问一下,你发的那个程序就是一个可以读取串口的程序吧?是C还是C++?我只接触过简单的C  所以 除了那些函数 其他的我也看不懂

#14


引用 2 楼 wms1986629 的回复:
可是我都不听说过你所说的哪个 IDE  API  都是什么东西都不知道 我毕业设计很急  现在急需这样一个程序 如果可以告诉我每一步都是什么意思 那我不懂的程序也行  只要能把老师应付过去就好 谢谢大哥们了



今天已经是4月22日了,看你的情况,你现在急也没有用!


三种方法:

1、直接跟老师说做不了,换一个简单点的做;


2、花钱找人做;


3、从现在开始学,不是为了应付老师,而是为了自己。

#15


引用 14 楼 zaodt 的回复:
引用 2 楼 wms1986629 的回复:
可是我都不听说过你所说的哪个 IDE  API  都是什么东西都不知道 我毕业设计很急  现在急需这样一个程序 如果可以告诉我每一步都是什么意思 那我不懂的程序也行  只要能把老师应付过去就好 谢谢大哥们了 
 


今天已经是4月22日了,看你的情况,你现在急也没有用! 


三种方法: 

1、直接跟老师说做不了,换一个简单点的做; 


2、花钱找人做; 


3、从现在开始学,不是为了应付…

花钱,不知道找谁.现在开始学可也要先弄完毕业设计.
我是在实习单位做的毕业设计 其中一步就是做这么个程序 我也不是学软件的  

#16


给你两个网址:http://www.chinaitpower.com/A/2001-10-07/983.html
http://download.csdn.net/source/147
去看一下,对你肯定有用.

#17


我的QQ:10489881

#18


以后需再关注,现在先帮你顶一下

#1


建议使用一个开发功能强悍的IDE

这样你就省去了很多麻烦,问题简化为直接使用api了

#2


可是我都不听说过你所说的哪个 IDE  API  都是什么东西都不知道 我毕业设计很急  现在急需这样一个程序 如果可以告诉我每一步都是什么意思 那我不懂的程序也行  只要能把老师应付过去就好 谢谢大哥们了

#3


大哥们 帮帮我 一个程序 快急死了

#4


像你这种情况, 毫无疑问是用控件最方便了. 
Visual Basic + MSCOMM控件, 是最最简单的串口通信方法.

#5


以下是C++下面读取串口数据的片断,
主要是ReadFile.

DWORD CCommand::ReadData(char *buffer, DWORD dwBytesRead)
{
if( !m_bOpened || m_hComDev == NULL ) return 0;

BOOL bReadStatus=0;
DWORD dwErrorFlags,dwBytesReaded=0;
COMSTAT ComStat;
CString recStr;
int k=0;
//buffer[0] ='\0';
ClearCommError( m_hComDev, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return 0;

dwBytesRead = min(dwBytesRead,(DWORD)ComStat.cbInQue);

bReadStatus = ReadFile( m_hComDev, buffer, dwBytesRead, &dwBytesReaded,NULL);//&m_OverlappedRead
if( !bReadStatus )
{
if( GetLastError() == ERROR_IO_PENDING )
{
WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );
return dwBytesRead;
}
return 0;
}
buffer[dwBytesReaded] = '\0';
for(k=0;k<(int)dwBytesReaded;k++)
{
BYTE bt=*(char*)(buffer+k);
if(m_ctrlHexDisplay.GetCheck())
recStr.Format("%02X ",bt);
else
recStr.Format("%c",bt);

m_Rec_Edit.SetSel(-1, -1);
m_Rec_Edit.ReplaceSel(recStr);
}
m_Rec_Edit.ReplaceSel("\r\n");
UpdateData(TRUE);

return dwBytesRead;

}

#6


什么平台的?

#7


引用 4 楼 sheenl 的回复:
像你这种情况, 毫无疑问是用控件最方便了.  
Visual Basic + MSCOMM控件, 是最最简单的串口通信方法.

对,如果是用Visual Basic + MSCOMM控件,那开发周期还是很短的.
用C的话你可以参照一个叫"串口调试助手"的程序(好像作者还写了开发过程的文章).

#8


5楼大哥 程序我看不懂  你能简单的说明下 每行代码是什么意思吗?

#9


4楼 和7楼的大哥 我在网上也看到了说用VB的MSCOMM控件是很方便的 但问题是我这是毕业设计中的一个程序 我对VB根本没接触过 所以我需要一个程序和简单的过程的中文意思  起码能把老师对付过去啊

#10


引用 8 楼 wms1986629 的回复:
5楼大哥 程序我看不懂  你能简单的说明下 每行代码是什么意思吗?

我那个程序你只要ReadFile这个怎么用.
Win32中,串口和其他通信设备均被作为文件处理.
串口的打开、关闭和读写等操作所用的API函数与操作文件的函数相同。
可通过CreateFile函数打开串口,通过CloseFile函数关闭串口,
通过CommProp、DCB结构、GetCommProperties、SetCommProperties、GetCommState及SetCommState等函数设置串口状态,通过函数ReadFile和WritFile读写串口。 
把这几个函数搞懂就差不多完成一半了.
推荐个网站给你:www.gjwtech.com (我上这个网站IE老是会当掉)

#11


引用 10 楼 candy110 的回复:
引用 8 楼 wms1986629 的回复:
5楼大哥 程序我看不懂  你能简单的说明下 每行代码是什么意思吗? 
 
我那个程序你只要ReadFile这个怎么用. 
Win32中,串口和其他通信设备均被作为文件处理. 
串口的打开、关闭和读写等操作所用的API函数与操作文件的函数相同。 
可通过CreateFile函数打开串口,通过CloseFile函数关闭串口, 
通过CommProp、DCB结构、GetCommProperties、SetCommProperties、GetCommState及SetCommState等函…

能否用论坛的在线聊天或者QQ 简单指导我一下啊 我毕业设计很急  大哥谢了

#12


在公司上不了QQ,而且还有任务在身:)
我觉得你可以先上网搜索一下相关资料.
到MSDN看看这几个函数的用法.
要不然我说什么你也未必听的很清楚.你觉得呢?
而且你要是用纯C写的话还应该看看<windows程序设计>这本书.

#13


引用 12 楼 candy110 的回复:
在公司上不了QQ,而且还有任务在身:) 
我觉得你可以先上网搜索一下相关资料. 
到MSDN看看这几个函数的用法. 
要不然我说什么你也未必听的很清楚.你觉得呢? 
而且你要是用纯C写的话还应该看看 <windows程序设计>这本书.

那我再问一下,你发的那个程序就是一个可以读取串口的程序吧?是C还是C++?我只接触过简单的C  所以 除了那些函数 其他的我也看不懂

#14


引用 2 楼 wms1986629 的回复:
可是我都不听说过你所说的哪个 IDE  API  都是什么东西都不知道 我毕业设计很急  现在急需这样一个程序 如果可以告诉我每一步都是什么意思 那我不懂的程序也行  只要能把老师应付过去就好 谢谢大哥们了



今天已经是4月22日了,看你的情况,你现在急也没有用!


三种方法:

1、直接跟老师说做不了,换一个简单点的做;


2、花钱找人做;


3、从现在开始学,不是为了应付老师,而是为了自己。

#15


引用 14 楼 zaodt 的回复:
引用 2 楼 wms1986629 的回复:
可是我都不听说过你所说的哪个 IDE  API  都是什么东西都不知道 我毕业设计很急  现在急需这样一个程序 如果可以告诉我每一步都是什么意思 那我不懂的程序也行  只要能把老师应付过去就好 谢谢大哥们了 
 


今天已经是4月22日了,看你的情况,你现在急也没有用! 


三种方法: 

1、直接跟老师说做不了,换一个简单点的做; 


2、花钱找人做; 


3、从现在开始学,不是为了应付…

花钱,不知道找谁.现在开始学可也要先弄完毕业设计.
我是在实习单位做的毕业设计 其中一步就是做这么个程序 我也不是学软件的  

#16


给你两个网址:http://www.chinaitpower.com/A/2001-10-07/983.html
http://download.csdn.net/source/147
去看一下,对你肯定有用.

#17


我的QQ:10489881

#18


以后需再关注,现在先帮你顶一下