如何用串口传输bmp文件并显现出来?(基于对话框),急用,大家帮手啊

tangshiping 2004-04-06 09:25:37
写串口的代码我是这么写的,也不知道对不对:

CFile file;
file.Open("e:\\11.bmp",CFile::typeBinary|CFile::modeRead);//二进制方式打开,只能读
#define BUFFERWIDTH 1000
char buf[BUFFERWIDTH];
DWORD dw = 0;
do{
dw = file.Read(buf, BUFFERWIDTH );
//写串口
DWORD iLength;
iLength=40;
WriteFile(hcom,&buf,iLength,&iLength,NULL);
}while(dw==BUFFERWIDTH);
file.Close();
怎么读串口并显示在对话框呢?谢谢大家帮忙啊
...全文
284 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
是的是的,这会彻底好了。谢谢,揭贴送分!!
感谢: ymbymb(毛病大哥) 。
ymbymb 2004-04-08
  • 打赏
  • 举报
回复
我的测试文件大概用了25秒就传完了, 可能是发送太快了,你可以把发送的部分改一下
com1.WriteBuf(pBuf, dwFileLen); 可以改成;
char *p = pBuf;
while(dwFileLen > 0)
{
if(dwFileLen > 1024)
{
com1.WriteBuf(p, 1024);
dwFileLen -= 1024;
p += 1024;
}
else
{
com1.WriteBuf(p, dwFileLen);
dwFileLen = 0;
}
Sleep(1);
}
忘了加延时了
ymbymb 2004-04-08
  • 打赏
  • 举报
回复
我的测试文件大概用了25秒就传完了, 可能是发送太快了,你可以把发送的部分改一下
com1.WriteBuf(pBuf, dwFileLen); 可以改成;
char *p = pBuf;
while(dwFileLen > 0)
{
if(dwFileLen > 1024)
{
com1.WriteBuf(p, 1024);
dwFileLen -= 1024;
p += 1024;
}
else
{
com1.WriteBuf(p, dwFileLen);
dwFileLen = 0;
}
}
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
我试过了,图片大概是超过5k就不行了。可能我的机器有毛病,毛病大哥没有什么还有提醒的话一会就揭贴啊
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
果然是文件太大的原因!!!
我找了一个3k的位图,很顺利。可是一个几十k的就很久都没有显示。是不是就是这样啊 ymbymb(毛病大哥) ?你测试的那个图片我就显示不出来。难道我的串口有什么问题?速度也太慢了
非常感谢,问题基本解决了,特别感谢 ymbymb(毛病大哥)
ymbymb 2004-04-08
  • 打赏
  • 举报
回复
我发给你的程序,你什么都不要改,两个程序都运行起来后,先按接收,再按发送,你可以先用一个比较小的文件试试,如果还不行那只能是你的串口有问题或者串口线有问题
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
我去掉了,只把你原来的程序中的路径改为全路径,别的一概没有改动。(不会路径也不能改吧?)可是我不会跟踪,不好意思,以前是做vb的,现在刚入门vc。
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
肯定是2,3交叉的,是根直接连两个本机串口的线,9针的,以前别人用国做串口通信的,应该没有问题
ymbymb 2004-04-08
  • 打赏
  • 举报
回复
把你的MessageBox去掉,否则数据会丢失, 如果还不行,你可以跟踪一下,看看两个串口的打开是否正确
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
CFile file;
file.Open("temp1.bmp",CFile::modeCreate|CFile::modeReadWrite);
file.Write(pBuf, dwFileLen);
file.Close();
delete[] pBuf;
HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"temp1.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE);
也改为:
CFile file;
file.Open("e:\\temp1.bmp",CFile::modeCreate|CFile::modeReadWrite);
file.Write(pBuf, dwFileLen);
file.Close();
delete[] pBuf;
HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"e:\\temp1.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE);
还是不行

ymbymb 2004-04-08
  • 打赏
  • 举报
回复
你的串口线要2和3 交叉的那种
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
我先接收,再发送,还是不行啊。
这段代码:
while(!m_bCancel)
{
if(com2.ReadBuf(&aa[len], 1) == 1)
{
len++;
if(len == 4) break;
}
Sleep(1);
DoEvents();
MessageBox("2");//我加的,结果就不停的出现
}
是不是就是这里不跳出导致一直等待啊?
您的具体操作是什么?需要改动哪里啊我?怎么就不行呢?
danielzhu 2004-04-08
  • 打赏
  • 举报
回复
学习
ymbymb 2004-04-08
  • 打赏
  • 举报
回复
我的程序调试过的, 你要先按接收,再按发送, 你不能发贴,可以重新开个贴
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
我等了4分钟,还是没有接受完成。
哪位帮忙顶一下,谢谢,我不能继续发贴了否则
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
把接受方结束后,再运行时连接出现错误:
cannot open Debug/RevBmp.exe for writing
重起机器再次连接自然没有问题,大约知道原因,但是说不出在哪里?: ymbymb(毛病大哥)再看看啊
tangshiping 2004-04-08
  • 打赏
  • 举报
回复
就是接受方并不在对话框显示位图,我把路径该为全路径了已经。我的操作办法是把两个exe同时执行,两个串口用串口线连接,然后发送,接受。
我在发送和接受的核心程序段首尾各加了messagebox,显示“开始发送”,“发送完成”,“开始接受”,“接受完成”。发送顺利执行,接受方却很久都没有出现”接受完成“,位图自然也没有加载,不知道怎么回事?
ymbymb 2004-04-07
  • 打赏
  • 举报
回复
回信没有收到, 把问题贴出来
tangshiping 2004-04-07
  • 打赏
  • 举报
回复
同时恭喜 ymbymb(毛病大哥) 升星了,恭喜
tangshiping 2004-04-07
  • 打赏
  • 举报
回复
谢谢谢谢,已经收到了,可是我还有一点小问题,给您回信了,请帮我看下。
总之真的是感激不尽了
加载更多回复(29)
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]内容概要:本文介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行分析的技术方案,旨在模拟超宽带脉冲通过该天线结构的传播过程,并重点计算微带结构的回波损耗参数。该方法通过数值仿真手段精确建模电磁波在天线中的传播特性,适用于高频电磁场仿真与天线性能评估,能够有效支持天线设计优化。文中可能涵盖FDTD算法的基本原理、网格划分、边界条件设置、激励源配置及结果后处理等关键环节。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程,从事天线设计、射频工程或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展超宽带天线的设计与性能仿真;②研究微带天线在脉冲激励下的瞬态响应特性;③计算和优化天线的回波损耗(S11参数),提升匹配性能;④教学与科研中用于电磁仿真方法的实践训练。; 阅读建议:建议读者结合FDTD理论基础与MATLAB编程实践,逐步实现仿真流程,重点关注时间步长、空间网格精度和边界条件对仿真结果的影响,并通过对比仿真与实测数据验证模型准确性。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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