问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VC2008中如何编程才能向PC串口发送一个字符? 不要用串口调试助手...

发布网友 发布时间:2024-02-13 03:17

我来回答

3个回答

热心网友 时间:2024-03-17 13:37

VC2008 当然是 用 serialport 控件

serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);
MessageBox.Show("数据发送成功!","系统提示");
}

串口程序 调试 可以 用 虚拟串口软件 vspd

请看 武汉鸿伟光电
有 虚拟串口软件 vspd 下载

热心网友 时间:2024-03-17 13:37

代码转自:《51单片机C语言创新教程》温子祺等编著,书籍中的界面开发篇!

#include "StdAfx.h"
#include "CSerial.h"
#include <assert.h> //使用断言

CSerial::CSerial(void)
{
m_bInit=FALSE;
m_hSerial=NULL;
}

CSerial::~CSerial(void)
{
Close();
}

BOOL CSerial::Ready(void)const
{
return m_bInit;
}

BOOL CSerial::Close(void)
{

if (m_hSerial)
{
CloseHandle(m_hSerial);
m_hSerial=NULL;
}

if (m_bInit)
{
m_bInit=FALSE;
}

return TRUE;
}

BOOL CSerial::Init(UINT portnr,
UINT baud,
UINT parity,
UINT databits,
UINT stopbits)
{
if (Ready())
{
Close();
}

COMMTIMEOUTS CommTimeOuts;
DCB dcb;

LPSTR sz= new CHAR[64];
LPWSTR wsz= new WCHAR[64];

// 打开串口
//wprintf_s(wsz,64,"COM%d",portnr);//用wprintf无效
sprintf_s(sz,64,"COM%d",portnr);
MultiByteToWideChar(CP_ACP,
0,
sz,
64,
wsz,
64);

m_hSerial = CreateFile(wsz,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);

delete []sz;
delete []wsz;

if(m_hSerial == INVALID_HANDLE_VALUE)
{
return FALSE;
}

GetCommState(m_hSerial, &dcb); /* 读取串口的DCB */
dcb.BaudRate = baud; //波特率
dcb.ByteSize = databits; //数据位
dcb.Parity = parity; //校验位
dcb.StopBits = stopbits; //停止位

dcb.fParity = FALSE; /* 禁止奇偶校验 */
dcb.fBinary = TRUE;
dcb.fDtrControl = 0; /* 禁止流量控制 */
dcb.fRtsControl = 0;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fTXContinueOnXoff = 0;
dcb.EvtChar='q'; // 这个一定要,否则大于127的数值会接收不了啊

//设置状态参数
SetCommMask(m_hSerial, EV_RXFLAG|EV_RXCHAR); /* 串口事件:接收到一个字符 */
SetupComm(m_hSerial, 1024, 1024); /* 设置接收与发送的缓冲区大小 */

if(!SetCommState(m_hSerial, &dcb)) /* 设置串口的DCB */
{
return FALSE;
}

//设置超时参数
GetCommTimeouts(m_hSerial, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 100; /* 接收字符间最大时间间隔 */
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
CommTimeOuts.ReadTotalTimeoutConstant = 100; /* 读数据总超时常量 */
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;

if(!SetCommTimeouts(m_hSerial, &CommTimeOuts))
{
return FALSE;
}

PurgeComm(m_hSerial, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT); /* 清除收/发缓冲区 */

m_bInit = TRUE;

return TRUE;
}

UINT CSerial::Send(UCHAR *pbuf,UINT len)
{
if (!Ready())
{
//AfxMessageBox(_T("请确保串口已正常打开"));
return 0;
}

BOOL rt=FALSE;

DWORD dwBytesSend=0,dwCnt=0;

while (len>dwCnt)
{
rt=WriteFile(m_hSerial,pbuf+dwCnt,len-dwCnt,&dwBytesSend,NULL);

if (!rt)
{
return FALSE;
}

dwCnt+=dwBytesSend;

if (len > dwCnt)
{
Sleep(100); //有可能I/O挂起
}
}

return (UINT)dwCnt;
}
UINT CSerial::Recv(UCHAR *pbuf,UINT len)
{
if (!Ready())
{
//AfxMessageBox(_T("请确保串口已正常打开"));
return 0;
}

BOOL rt=FALSE;

DWORD dwBytesRecv=0;

rt=ReadFile(m_hSerial,pbuf,len,&dwBytesRecv,NULL);

if (!rt)
{
return FALSE;
}

return (UINT)dwBytesRecv;
}

热心网友 时间:2024-03-17 13:34

bSuccess = WriteFile(m_hCom, // handle to file to write to
buffer, // pointer to data to write to file
dwBytesWrite, // number of bytes to write
&dwBytesWrite, // pointer to number of bytes written
&m_OverlappedWrite);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我小弟要当兵,这几天在等家访,我想问一下需要拿钱之类的吗?_百度知 ... 怎样治好气管炎 怎么治好气管炎 气管炎能彻底治好吗 分手后再遇见前男友是什么感受? 分手后与前任再相遇 指弹怎么练 用吉他练指弹有什么快速入门的办法 皖西学院新生住哪里 皖西学院的宿舍条件好吗? 妈妈的背有点驼了,大家推荐下适合中年妇女的矫正操!!hoho~~~_百度知... 不到一年怎么改第二次 用苹果手机怎么做到第二次修改 修改没到一年怎么改? 我们人有判断对错的能力靠的是什么,自已的思维,还有什么? 招花夕拾中五猖会这一章节中最后一句为画龙点睛之笔说说作者所要批判的... ...分之一+二乘以三分之一+...+九十九乘以一百分之一等于多少? 1乘二分之一加二乘三分之一……加九十九乘一百分之一 中国西部最美经典的10条自驾线路景点、行程攻略推荐,西部自驾哪些... 我想配台电脑3000左右(含显示器)要求1g显卡,3a平台,双核以上cpu,玩游戏... 用苹果手机怎么做到第二次修改 怎么在一年内修改两次 我有两个,想在苹果12手机上同时使用两个,网上说可支付66元... 孕妇血压高睡眠不好怎么办 一个手机号在注册了一个微信后又注册了新的,旧的怎么找回? 一年内第二次修改技巧 ...问题:你的手机号在最近24小时内已绑定过3个,已达到限制?_百度... 用苹果手机怎么做到第二次修改 网商贷必须扫自己的发票吗 梦到自己生了个女孩239 一只手机号注册了两个,想要注销一个怎么注销? 视力不好可以报考军校和警校吗? 我有b2驾驶证骑两轮电动摩托车被交警抓住后认证是机动车应当怎么处理... 手机号1 24 手机号24小时内绑定了两个被限制 请问什么时候才能重 ... 索尼“rx100”和“m12345”的区别是什么? 怎么养才不会被封? 如何强制二次修改 2在Python语言中,整数a=6,b=-4,则表达式a+b&gt;a-bora&gt;b的值是()D. Tr... 怎么一年内修改两次怎样才能一年修改两次? 中国西部最美经典的10条自驾线路景点、行程攻略推荐,西部自驾哪些... 我有一个浪琴手表,表盘写的是longines 后面写的是NO.3318L 请问是真的... 怎么一年内修改两次怎样才能一年修改两次? helping后面加什么 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 用苹果手机怎么做到第二次修改 像落花生一样的人有哪些啊? 怎么避免被封 怎么转里的好友到另一个呢? 怎么一年内修改两次怎样才能一年修改两次? 您的手机号在最近24小时内绑定过三个,已达到限制,...24小时后...