6000|19

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince下的数据覆盖问题 [复制链接]

我用开发板用串口连仪表时,能够不断的接收数据,但后一数据不能覆盖前面的数据。请问怎么使后面的数据完全覆盖前面的数据啊 使开发板只显示当前的数据

最新回复

void CSerialPortDlg::OnTimer(UINT nIDEvent) { if(Receive) { if(strInChar.GetLength()!=0) { m_strReceive+=strInChar; strInChar=_T(""); SetDlgItemText(IDC_RECEIVE,m_strReceive); m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE); } } CDialog::OnTimer(nIDEvent); } 这段代码,用到strInChar了,你把m_strReceive+=strInChar; 改成m_strReceive=strInChar; 就可以了。  详情 回复 发表于 2009-8-21 10:00
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个就是对读到的数据处理下就得了吧
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
那看你串口助手是怎么实现的了,如果没有源代码,就自己编写一段读写串口的程序了!不管是何种方式,只要有源代码,修改就方便了,显示时直接显示当前读到的字符就可以了,之前的不要显示不就行了!

你现在的串口助手,肯定是把读到的数据拼接到上次读到的数据了,你修改后,只要先清空界面显示,然后把最新读到的数据放在界面就可。

如果是显示在编辑框中,直接赋值即可;如果显示在View中,用TextOut函数就可以了!
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

4
 
引用 7 楼 daigua04 的回复:
那看你串口助手是怎么实现的了,如果没有源代码,就自己编写一段读写串口的程序了!不管是何种方式,只要有源代码,修改就方便了,显示时直接显示当前读到的字符就可以了,之前的不要显示不就行了!

你现在的串口助手,肯定是把读到的数据拼接到上次读到的数据了,你修改后,只要先清空界面显示,然后把最新读到的数据放在界面就可。

如果是显示在编辑框中,直接赋值即可;如果显示在View中,用TextOut函数就可以了!
是编辑框的,我看了一下,还是不会改,这是它接收数据的源码 请问怎么改啊 谢谢了
void CSerialPortDlg::OnRece()
{
        if(!Receive)
        {
                Receive=TRUE;
                SetDlgItemText(IDC_RECE,CString("不接收"));
        }
        else
        {
                Receive=FALSE;
                SetDlgItemText(IDC_RECE,CString("接收"));
        }
}

void CSerialPortDlg::OnSend()
{
        WritePort();
}

void CSerialPortDlg::OnDestroy()
{
        CDialog::OnDestroy();
        ClosePort();       
}

void CSerialPortDlg::OnCheckHex()
{
        HexDisplay=!HexDisplay;
}

void CSerialPortDlg::OnSendFile()
{
        CString FileName(_T(""));
        CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,TEXT("Hex Files(*.hex)|*.hex||"));
        if(FileDlg.DoModal()==IDOK)
        {
                FileName=FileDlg.GetPathName();
        }
        if(FileName!=_T(""))
        {
                WriteFileToPort(FileName);
        }
}
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
同意楼上了做法,先试一下吧
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
何谓后面的数据覆盖前面的数据?不甚明白!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼主,你好,想问你关于Win  CE.Net(C#)的 "Hello  World "的源代码程序!再三谢谢了.

不知道你能帮忙不? 项目经理要2周内学懂Win  CE.Net(C#),你能写个源代码谢谢下不》?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 1 楼 daigua04 的回复:
何谓后面的数据覆盖前面的数据?不甚明白!
就是比如仪表这一秒输出120 下一秒是115 在开发板上就是120 115这么的一直显示下去 而我希望的是只显示当前的115就可以了 120被115覆盖掉
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
那看你的串口读取仪表是如何实现的了,你自己把读入的串口数据处理下就可以了!比如有一个线程负责读取串口数据,读到一个字符串中,你只要把前面部分删掉或是不要显示就可以了!
不知道你说的是不是这个意思?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 4 楼 daigua04 的回复:
那看你的串口读取仪表是如何实现的了,你自己把读入的串口数据处理下就可以了!比如有一个线程负责读取串口数据,读到一个字符串中,你只要把前面部分删掉或是不要显示就可以了!
不知道你说的是不是这个意思?
对,使这个意思,我读仪表的程序是借用的开发板自带的串口助手,请问你说的把前面部分删掉或是不要显示就可以了怎么实现啊 是用语句吗?我是初学者,请说的详细一些,谢谢了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
不是这边接收了,你搜索下Receive变量,OnRece函数中将该变量设置为TRUE,应该是在一个单独的线程中(或其他代码中,用到这个变量),判断如果Receive为TRUE,就接收。你看看那个线程的代码!
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

12
 
BOOL CSerialPortDlg::OpenPort()
{
        if(hComm==INVALID_HANDLE_VALUE)
        {
                hComm=CreateFile(PortID,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
                if(hComm==INVALID_HANDLE_VALUE )
                {
                        AfxMessageBox(CString("无法打开端口!请检查是否已被占用。"));
                        return FALSE;
                }
                else
                {
                        GetCommState(hComm,&dcb);
                        dcb.BaudRate=BaudRates[BaudRate];
                        dcb.ByteSize=DataBits+6;
                        dcb.Parity=Parity;
                        dcb.StopBits=StopBits;
                        dcb.fParity=FALSE;
                        dcb.fBinary=TRUE;
                        dcb.fDtrControl=0;
                        dcb.fRtsControl=0;
                        dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;
                       
                        SetCommMask(hComm,EV_RXCHAR);

                        SetupComm(hComm,16384,16384);
                        if(!SetCommState(hComm,&dcb))
                        {
                                AfxMessageBox(CString("无法按当前参数配置端口,请检查参数!"));
                                PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
                                CloseHandle(hComm);
                                hComm=INVALID_HANDLE_VALUE;
                                return FALSE;
                        }
                        else
                        {
                                GetCommTimeouts(hComm,&CommTimeOuts);
                               
                                CommTimeOuts.ReadIntervalTimeout=100;
                                CommTimeOuts.ReadTotalTimeoutMultiplier=1;
                                CommTimeOuts.ReadTotalTimeoutConstant=100;
                                CommTimeOuts.WriteTotalTimeoutMultiplier=0;
                                CommTimeOuts.WriteTotalTimeoutConstant=0;

                                if(!SetCommTimeouts(hComm,&CommTimeOuts))
                                {
                                        AfxMessageBox(CString("无法设置超时参数!"));
                                        PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
                                        CloseHandle(hComm);
                                        hComm=INVALID_HANDLE_VALUE;
                                        return FALSE;
                                }
                                else
                                {
                                        PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);

                                        if(hReadThread=CreateThread(NULL,0,ReadPortThread,0,0,&dwThreadID))
                                        {
                                        }                                       
                                        else
                                        {
                                                AfxMessageBox(CString("无法创建读取串口线程!"));
                                        }
                                        return TRUE;
                                }
                        }
                }
        }
        else
        {
                return FALSE;
        }
}



DWORD CSerialPortDlg::WritePort()
{
        BOOL fWriteState;
        DWORD dwBytesWritten;
        DWORD dwCharToWrite(0);
        int i,j;

        GetDlgItemText(IDC_TRANSMIT,m_strTransmit);
        if(!HexSend)
        {
                dwCharToWrite=(DWORD)m_strTransmit.GetLength();
        }
        else
        {
                for(i=0;i                 {
                        if(((m_strTransmit.GetAt(i*2)>='0'&&m_strTransmit.GetAt(i*2)<='9')||(m_strTransmit.GetAt(i*2)>='A'&&m_strTransmit.GetAt(i*2)<='F'))&&((m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1)<='9')||(m_strTransmit.GetAt(i*2+1)>='A'&&m_strTransmit.GetAt(i*2+1)<='F')))
                        {
                                dwCharToWrite++;
                        }
                }
        }
        dwBytesWritten=0;
       
        if(hComm!=INVALID_HANDLE_VALUE&&dwCharToWrite!=0)
        {
                unsigned char* buf=new unsigned char[dwCharToWrite];
                if(!HexSend)
                {                       
                        for(i=0;i<(int)dwCharToWrite;i++)
                        {
                                buf=(unsigned char)m_strTransmit.GetAt(i);
                        }
                }
                else
                {
                        j=0;
                        for(i=0;i                         {
                                if(((m_strTransmit.GetAt(i*2)>='0'&&m_strTransmit.GetAt(i*2)<='9')||(m_strTransmit.GetAt(i*2)>='A'&&m_strTransmit.GetAt(i*2)<='F'))&&((m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1)<='9')||(m_strTransmit.GetAt(i*2+1)>='A'&&m_strTransmit.GetAt(i*2+1)<='F')))
                                {
                                        if(m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1)<='9')
                                        {
                                                buf[j]=m_strTransmit.GetAt(i*2+1)-48;
                                        }
                                        else
                                        {
                                                buf[j]=m_strTransmit.GetAt(i*2+1)-55;
                                        }
                                        if(m_strTransmit.GetAt(i*2)>='0'&&m_strTransmit.GetAt(i*2)<='9')
                                        {
                                                buf[j]+=(m_strTransmit.GetAt(i*2)-48)*16;
                                        }
                                        else
                                        {
                                                buf[j]+=(m_strTransmit.GetAt(i*2)-55)*16;
                                        }
                                        j++;
                                }
                        }
                }
                fWriteState=WriteFile(hComm,buf,dwCharToWrite*sizeof(unsigned char),&dwBytesWritten,NULL);
                if(!fWriteState)
                {
                        AfxMessageBox(CString("无法向端口写入数据!"));
                }
                delete[] buf;               
        }
        return dwBytesWritten;
}

DWORD CSerialPortDlg::WriteFileToPort(LPCTSTR FileName)
{
        CFile cf;

        BOOL fWriteState;
        DWORD dwBytesWritten;
        DWORD dwCharToWrite;

        dwCharToWrite=0;

        if(!cf.Open(FileName,CFile::modeRead))
        {
                AfxMessageBox(_T("无法打开Hex文件!"));
        }
        dwCharToWrite=(DWORD)cf.GetLength();
        cf.Seek(0,CFile::begin);
        dwBytesWritten=0;
       
        if(hComm!=INVALID_HANDLE_VALUE&&dwCharToWrite!=0)
        {
                unsigned char* buf=new unsigned char[dwCharToWrite];
                cf.Read(buf,dwCharToWrite);

                fWriteState=WriteFile(hComm,buf,dwCharToWrite*sizeof(unsigned char),&dwBytesWritten,NULL);
                if(!fWriteState)
                {
                        AfxMessageBox(CString("无法向端口写入数据!"));
                }
                delete[] buf;               
        }
        cf.Close();
        return dwBytesWritten;
}

BOOL CSerialPortDlg::SaveReceivedToFile(LPCTSTR FileName)
{
        int i;
        CFile cf;
        DWORD dwBytesToSave=m_strReceive.GetLength();
       
        if(!cf.Open(FileName,CFile::modeWrite|CFile::modeCreate))
        {
                AfxMessageBox(_T("无法打开Text文件!"));
        }

        cf.Seek(0,CFile::begin);
        unsigned char * buf=new unsigned char[dwBytesToSave];
        for(i=0;i         {
                buf=m_strReceive.GetAt(i);
        }       

        cf.Write(buf,dwBytesToSave);
       
        delete[] buf;
        cf.Close();

        return TRUE;
}

BOOL CSerialPortDlg::ClosePort()
{
        if(hComm!=INVALID_HANDLE_VALUE)
        {
                SetCommMask(hComm,0);

                if(hReadThread)
                {
                        TerminateThread(hReadThread,0);
                        CloseHandle(hReadThread);
                }
                PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
                CloseHandle(hComm);
                hComm=INVALID_HANDLE_VALUE;
                return TRUE;
        }
        else
        {
                hComm=INVALID_HANDLE_VALUE;
                return TRUE;
        }
}

void CSerialPortDlg::OnSetup()
{
        CSetupDlg* Dialog1;
        Dialog1=new CSetupDlg;

        Dialog1->BaudRate=BaudRate;
        Dialog1->PortNo=PortNo-1;
        Dialog1->DataBits=DataBits-1;
        Dialog1->StopBits=StopBits;
        Dialog1->Parity=Parity;

        if(Dialog1->DoModal()==IDOK)
        {
                BaudRate=Dialog1->BaudRate;
                PortNo=Dialog1->PortNo+1;
                DataBits=Dialog1->DataBits+1;
                StopBits=Dialog1->StopBits;
                Parity=Dialog1->Parity;
        }

        delete Dialog1;
}

void CSerialPortDlg::OnOpen()
{
        if(!Open)
        {
                PortID=PortIDs[PortNo-1];
                OpenPort();
                Open=TRUE;
                m_timer=SetTimer(1,10,NULL);
                SetDlgItemText(IDC_OPEN,CString("关闭端口"));
        }
        else
        {
                ClosePort();
                Open=FALSE;
                KillTimer(m_timer);
                SetDlgItemText(IDC_OPEN,CString("打开端口"));
        }
}

void CSerialPortDlg::OnClearRece()
{
        m_strReceive=_T("");
        GetDlgItemText(IDC_TRANSMIT,m_strTransmit);
        UpdateData(FALSE);
}

void CSerialPortDlg::OnClearSend()
{
        m_strTransmit=_T("");
        UpdateData(FALSE);
}

void CSerialPortDlg::OnTimer(UINT nIDEvent)
{
        if(Receive)
        {
                if(strInChar.GetLength()!=0)
                {
                        m_strReceive+=strInChar;
                        strInChar=_T("");
                        SetDlgItemText(IDC_RECEIVE,m_strReceive);
                        m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE);
                }
        }
       
        CDialog::OnTimer(nIDEvent);
}

void CSerialPortDlg::OnRece()
{
        if(!Receive)
        {
                Receive=TRUE;
                SetDlgItemText(IDC_RECE,CString("不接收"));
        }
        else
        {
                Receive=FALSE;
                SetDlgItemText(IDC_RECE,CString("接收"));
        }
}

void CSerialPortDlg::OnSend()
{
        WritePort();
}

void CSerialPortDlg::OnDestroy()
{
        CDialog::OnDestroy();
        ClosePort();       
}

void CSerialPortDlg::OnCheckHex()
{
        HexDisplay=!HexDisplay;
}

void CSerialPortDlg::OnSendFile()
{
        CString FileName(_T(""));
        CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,TEXT("Hex Files(*.hex)|*.hex||"));
        if(FileDlg.DoModal()==IDOK)
        {
                FileName=FileDlg.GetPathName();
        }
        if(FileName!=_T(""))
        {
                WriteFileToPort(FileName);
        }
}

void CSerialPortDlg::OnSaveReceived()
{
        CString FileName(_T(""));
        CFileDialog FileDlg(FALSE,NULL,NULL,OFN_HIDEREADONLY,TEXT("Text Files(*.txt)|*.txt||"));
        if(FileDlg.DoModal()==IDOK)
        {
                FileName=FileDlg.GetPathName();
        }
        if(FileName!=_T(""))
        {
                SaveReceivedToFile(FileName);
        }
}

void CSerialPortDlg::OnCheckHexSend()
{
        HexSend=!HexSend;
}
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

13
 
肯定还有其他代码了,你倒不如把整个工程给我看了!你发到我邮箱了:daigua04@hotmail.com。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 16 楼 daigua04 的回复:
void CSerialPortDlg::OnTimer(UINT nIDEvent)
{
if(Receive)
{
if(strInChar.GetLength()!=0)
{
m_strReceive+=strInChar;
strInChar=_T("");
SetDlgItemText(IDC_RECEIVE,m_strReceive);
m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE);
}
}

CDialog::OnTimer(nIDEvent);
}

这段代码,用到strInChar了,你把m_strReceive+=strInChar; 改成m_strReceive=strInChar; 就可以了。
太感谢了 我给你发邮件了 请查收一下
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
不用查收了,你先改下,应该就可以了!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
是可以的啊 太感谢了 呵呵 交个朋友啊 我把联系方式给你发到邮箱里了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 9 楼 daigua04 的回复:
不是这边接收了,你搜索下Receive变量,OnRece函数中将该变量设置为TRUE,应该是在一个单独的线程中(或其他代码中,用到这个变量),判断如果Receive为TRUE,就接收。你看看那个线程的代码!
这段应该是读数据的程序,可是我没找到Receive这个变量
DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
        BOOL fReadState;
        DWORD dwLength;
        int i;
        CString THex;

       
        while(hComm!=INVALID_HANDLE_VALUE)
        {
                unsigned char* buf=new unsigned char[512];
                fReadState=ReadFile(hComm,buf,512,&dwLength,NULL);
                if(!fReadState)
                {
                        AfxMessageBox(CString("无法从串口读取数据!"));
                }
                else
                {
                        strInChar=_T("");
                        if(dwLength!=0)
                        {
                                if(HexDisplay)
                                {
                                        for(i=0;i                                         {
                                                if(buf<16)
                                                {
                                                        THex.Format(_T("0%X "),buf);
                                                }
                                                else
                                                {
                                                        THex.Format(_T("%2X "),buf);
                                                }
                                                strInChar+=THex;
                                        }
                                }
                                else
                                {
                                        strInChar=CString(buf).Left(dwLength);
                                }
                        }
                }
                delete[] buf;
        }
        return 0;
}
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 
它读到strInChar这个变量里了,你搜索下这个变量,对它处理下就可以了,也就是把这个字符串最新的留下,其余的去掉再显示就好了!

而且,关键是,显示字符串的代码,也要看看,也就是把之前显示的要覆盖掉;因此,需要先刷新界面,再把新的字符串贴到界面上!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 12 楼 daigua04 的回复:
它读到strInChar这个变量里了,你搜索下这个变量,对它处理下就可以了,也就是把这个字符串最新的留下,其余的去掉再显示就好了!

而且,关键是,显示字符串的代码,也要看看,也就是把之前显示的要覆盖掉;因此,需要先刷新界面,再把新的字符串贴到界面上!
我真的找不到strInChar了,这是串口的所有源码,请帮我看看吧,我是初学者,真的不知道改哪啊。还有显示字符串的窗口不是不需要代码的吗??由于内容过长,我分了几次发送
// SerialPortDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SerialPort.h"
#include "SerialPortDlg.h"

#include "SetupDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

HANDLE hComm;
CString strInChar;
BOOL HexDisplay;
BOOL HexSend;

/////////////////////////////////////////////////////////////////////////////
// CSerialPortDlg dialog

CSerialPortDlg::CSerialPortDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CSerialPortDlg::IDD, pParent)
{
        //{{AFX_DATA_INIT(CSerialPortDlg)
        m_strReceive = _T("");
        m_strTransmit = _T("");
        //}}AFX_DATA_INIT
        // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSerialPortDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CSerialPortDlg)
        DDX_Control(pDX, IDC_RECEIVE, m_CtrlReceive);
        DDX_Text(pDX, IDC_RECEIVE, m_strReceive);
        DDX_Text(pDX, IDC_TRANSMIT, m_strTransmit);
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSerialPortDlg, CDialog)
        //{{AFX_MSG_MAP(CSerialPortDlg)
        ON_BN_CLICKED(IDC_SETUP, OnSetup)
        ON_BN_CLICKED(IDC_OPEN, OnOpen)
        ON_BN_CLICKED(IDC_CLEAR_RECE, OnClearRece)
        ON_BN_CLICKED(IDC_CLEAR_SEND, OnClearSend)
        ON_WM_TIMER()
        ON_BN_CLICKED(IDC_RECE, OnRece)
        ON_BN_CLICKED(IDC_SEND, OnSend)
        ON_WM_DESTROY()
        ON_BN_CLICKED(IDC_CHECK_HEX, OnCheckHex)
        ON_BN_CLICKED(IDC_SEND_FILE, OnSendFile)
        ON_BN_CLICKED(IDC_SAVE_RECEIVED, OnSaveReceived)
        ON_BN_CLICKED(IDC_CHECK_HEX_SEND, OnCheckHexSend)
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSerialPortDlg message handlers

BOOL CSerialPortDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        CenterWindow(GetDesktopWindow());        // center to the hpc screen

        // TODO: Add extra initialization here
        BaudRates[0]=1200;
        BaudRates[1]=2400;
        BaudRates[2]=4800;
        BaudRates[3]=9600;
        BaudRates[4]=19200;
        BaudRates[5]=38400;
        BaudRates[6]=57600;
        BaudRates[7]=115200;

        PortIDs[0]="COM1:";
        PortIDs[1]="COM2:";
        PortIDs[2]="COM3:";
        PortIDs[3]="COM4:";
        PortIDs[4]="COM5:";
        PortIDs[5]="COM6:";
        PortIDs[6]="COM7:";
        PortIDs[7]="COM8:";
        PortIDs[8]="COM9:";

        PortNo=1;
        BaudRate=3;
        DataBits=2;
        StopBits=ONESTOPBIT;
        Parity=NOPARITY;

        Open=FALSE;
        Receive=FALSE;
        HexDisplay=FALSE;
        HexSend=FALSE;

        hComm=INVALID_HANDLE_VALUE;

        return TRUE;  // return TRUE  unless you set the focus to a control
}



DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
        BOOL fReadState;
        DWORD dwLength;
        int i;
        CString THex;

       
        while(hComm!=INVALID_HANDLE_VALUE)
        {
                unsigned char* buf=new unsigned char[512];
                fReadState=ReadFile(hComm,buf,512,&dwLength,NULL);
                if(!fReadState)
                {
                        AfxMessageBox(CString("无法从串口读取数据!"));
                }
                else
                {
                        strInChar=_T("");
                        if(dwLength!=0)
                        {
                                if(HexDisplay)
                                {
                                        for(i=0;i                                         {
                                                if(buf<16)
                                                {
                                                        THex.Format(_T("0%X "),buf);
                                                }
                                                else
                                                {
                                                        THex.Format(_T("%2X "),buf);
                                                }
                                                strInChar+=THex;
                                        }
                                }
                                else
                                {
                                        strInChar=CString(buf).Left(dwLength);
                                }
                        }
                }
                delete[] buf;
        }
        return 0;
}
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

20
 
void CSerialPortDlg::OnTimer(UINT nIDEvent)
{
if(Receive)
{
if(strInChar.GetLength()!=0)
{
m_strReceive+=strInChar;
strInChar=_T("");
SetDlgItemText(IDC_RECEIVE,m_strReceive);
m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE);
}
}

CDialog::OnTimer(nIDEvent);
}

这段代码,用到strInChar了,你把m_strReceive+=strInChar; 改成m_strReceive=strInChar; 就可以了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表