1. 程式人生 > 其它 >基於MFC串列埠工具實現的多個txt檔案連續傳送

基於MFC串列埠工具實現的多個txt檔案連續傳送

技術標籤:mfc串列埠通訊fpga

在畢設的學習過程中,需要將minst資料集的圖片轉換成16進位制的txt文字,並將其通過串列埠工具連續傳送到FPGA板子中進行預測,基於之前一個博主所實現的串列埠工具進行部分修改,最終完成了多個txt文件的連續傳送及識別。

其中主要修改的部分為自動傳送部分的程式碼,程式碼主要如下:

void CcommassistDlg::OnBtnAutosend()
{
    // TODO: 在此新增控制元件通知處理程式程式碼
    UpdateData(TRUE);
    m_bAutoSend = !m_bAutoSend;// m_bAutoSend
    //if (!m_strOut.GetLength())
    //{
    //    MessageBox("請先輸入要傳送的內容", "提示", MB_ICONINFORMATION);
    //    m_bAutoSend = !m_bAutoSend;
    //}
    //else
  //  {
        //if (m_bAutoSend)
        //{
            SetTimer(1, atoi(m_strTimer.GetBuffer(m_strTimer.GetLength())), NULL); //設定定時 
            m_autosend.SetText("停止");
            GetDlgItem(IDC_COMCONTROL)->EnableWindow(false);
            GetDlgItem(IDC_BTN_CLRTX3)->EnableWindow(false);
            GetDlgItem(IDC_BTN_CLRRX3)->EnableWindow(false);
            GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(false);
            GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(false);
            GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(false);
            CFile file;
            int k = 0;
            int i = 9;
            m_strFile.Empty();
            char FileName[256] = { 0 };
            int count = 0;
            CString strTemp;
            CString   str, sTemp;
            while (k < 1000)
            {
                sprintf_s(FileName, "txt1_1/%d_%d.txt", i, count++);
                
                m_strFilePath = FileName; //得到檔案路經 
                FILE* fp;
                char buf[1571];
                memset(buf, 0, sizeof(buf));
                fopen_s(&fp,FileName, "r");
                if (fp != NULL)
                {
                    fread(&buf, sizeof(char), sizeof(buf), fp);
                }
                fclose(fp);
                buf[1570] = '\0';
                int buf_i = 0;
                CString str_i;
                while (buf_i < 1570)
                {
                    str_i.Format("%c", buf[buf_i]);
                    m_strFile += str_i;
                    buf_i++;
                }
                buf_i = 0;
                m_strOut = m_strFile; //檔案內容加入傳送框變數內    
                UpdateData(false); //更新發送框內容           
                //strTemp = "";
                m_strFile = "";
                OnBtnHandsend();

                k++;

               

               // if (count == 99 && i == 9) break;
                Delay(100);
                OnBtnClrtx();
              /* if (count == 99) {
                    i++;
                    count = 0;
                }*/
                
            }
           // m_bAutoSend = false;
          
     //   }
     /*   else
        {
             KillTimer(1);
            m_autosend.SetText("自動傳送");
            GetDlgItem(IDC_COMCONTROL)->EnableWindow(true);
            GetDlgItem(IDC_BTN_CLRTX3)->EnableWindow(true);
            GetDlgItem(IDC_BTN_CLRRX3)->EnableWindow(true);
            GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(true);
            GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(true);
            GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(true);
        }*/
   // }
}

修改定時器的回撥函式Ontimer(),在裡面終止定時器:

void CcommassistDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
    if (nIDEvent == 1)
        // OnBtnHandsend();
    {
        
        KillTimer(1);
        m_autosend.SetText("自動傳送");
        GetDlgItem(IDC_COMCONTROL)->EnableWindow(true);
        GetDlgItem(IDC_BTN_CLRTX3)->EnableWindow(true);
        GetDlgItem(IDC_BTN_CLRRX3)->EnableWindow(true);
        GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(true);
        GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(true);
        GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(true);
    }
    else if (nIDEvent == 2)
        return;
    CDialogEx::OnTimer(nIDEvent);
}

下面是傳送6000張圖片的截圖:
在這裡插入圖片描述
串列埠工具所使用的連結如下:
新增連結描述