⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~cpp

📁 提供一个上位机串口通信的源代码,方便开发上位机通信
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
    if(Form1-> T_AutoClear->Checked&&Form1-> DISPLAY->Lines->Count>62)Form1-> DISPLAY->Clear();//自动清空
    if(Form1-> DISPLAY->Lines->Count>4096)//太长了,清空
    {
        Form1-> DISPLAY->Clear();//自动清空
        Form1-> DISPLAY->Text="串口调试助手提醒您,数据太长,自动清空!";
    }
}
//---------------------------------------------------------------------------
//发送数据
void __fastcall TForm1::Send_ButtonClick(TObject *Sender)
{
    AnsiString str=Send_Box->Text;//取得发送文本
    OleVariant temp;              //声明变体变量
    uchar c=0;
    double result=0;//十进制发送缓冲区
    unsigned long sendout=0;//十进制发送缓冲区

    if(!str.Length())return;//发送缓冲区数据空.自动退出
    if(Uart_Open)
    {
        //创建变体变量
        temp=VarArrayCreate(OPENARRAY(int,(0,0)),varByte);//创造单个变体int,(0,10))发送11个数据
        if(Dec_Send->Checked==true)//十进制发送
        {
            for(int n=0;n<str.Length();n++)//读取数据
            {
                c=str[n+1];
                if(c<48||c>57)//限制字符输入
                {
                    Application->MessageBox("请输入合法数字!","输入错误",MB_OK);
                    return;
                }
                result=result*10+c-'0';//将char型转换为十进制
            }
            if(str.Length()>10||result>4294967295)//限制输入范围
            {
                Application->MessageBox("数值溢出!","输入错误",MB_OK);
                return;
            }
            sendout=(unsigned long)result;//赋值到ulong型数据
            do//直到把数据发送完毕
            {
                c=sendout&0xff;//取低八位
                sendout>>=8;   //循环取数
                temp.PutElement(c,0);//字符传入变体变量;
                MSComm1->Output=temp;//发送
            }while(sendout);
        }//以字符发送
        else for(int n=1;n<=str.Length();n++)//直到发送完毕
        {
            c=str[n];
            //if(c=='\r'||c=='\n')continue; //忽略换行符
            temp.PutElement(c,0);//字符传入变体变量
            MSComm1->Output=temp;
        }
        TXCount->Caption="TX:"+IntToStr(TX_Count++);//发送计数器计数
    }
}
//---------------------------------------------------------------------------
//接收一个字符
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
    Timer1->Enabled=true;
    RX_Num++;
    if(RX_Num>65529)RX_Num=0;//溢出,重新填充
    RX_Count++;
    if(RX_Count>9999999)RX_Count=0;//太长了,清掉
    RXCount->Caption="RX:"+IntToStr(RX_Count);
}

//计数器清空
void __fastcall TForm1::ClearTXRXClick(TObject *Sender)
{
    RX_Count=0;
    TX_Count=0;
    RXCount->Caption="RX:0";
    TXCount->Caption="TX:0";
}
//---------------------------------------------------------------------------
//控制显示与否
void __fastcall TForm1::T_StopClick(TObject *Sender)
{
    if(Display_Enable)
    {
        if(MSComm1->PortOpen)
        {
            MSComm1->PortOpen=false;//关闭串口
            MSComm1->PortOpen=true;//再次打开串口
            //利用这个语句把串口的缓存全部清空
        }
        Display_Enable=false;
        T_Stop->Caption="继续显示";
    }else
    {
        Display_Enable=true;
        T_Stop->Caption="停止显示";
    }
}
//---------------------------------------------------------------------------
//显示方式选择
void __fastcall TForm1::T_Type_HexClick(TObject *Sender)
{
    if(T_Type_Hex->Checked)Display_Type=1;//十六进制显示
    else Display_Type=2;//十进制显示
}
//---------------------------------------------------------------------------
//显示方式选择
void __fastcall TForm1::T_Type_DecClick(TObject *Sender)
{
    if(T_Type_Hex->Checked)Display_Type=1;//十六进制显示
    else Display_Type=2;//十进制显示
}
//---------------------------------------------------------------------------



void __fastcall TForm1::FrontShowClick(TObject *Sender)
{
    static bool Front_Show=false;
    if(Front_Show)
    {
        Front_Show=false;
        FrontShow->Caption="TOP";
        SetWindowPos(Form1->Handle,HWND_NOTOPMOST,0,0,0,0,(SWP_NOSIZE|SWP_NOMOVE));
        SetWindowPos(Form2->Handle,HWND_NOTOPMOST,0,0,0,0,(SWP_NOSIZE|SWP_NOMOVE));
        //非前端显示
    }else
    {
        Front_Show=true;
        FrontShow->Caption="OFF";
        SetWindowPos(Form1->Handle,HWND_TOPMOST,0,0,0,0,(SWP_NOSIZE|SWP_NOMOVE));
        SetWindowPos(Form2->Handle,HWND_TOPMOST,0,0,0,0,(SWP_NOSIZE|SWP_NOMOVE));
        //前端显示
    }
}
//---------------------------------------------------------------------------
//发送文件
void __fastcall TForm1::Send_FilesClick(TObject *Sender)
{
    if(SendFileEn)
    {
        Timer2->Interval=1000;
        Timer2->Enabled=false;//发送中断关闭
        Send_Files->Caption="发送文件";
        Open_Filse->Enabled=true;//打开打开文件按钮 
        SendFileEn=false;
    }else//开始发送文件
    {
        Timer2->Interval=1;//1ms发送一个数据
        Timer2->Enabled=true;//使能中断
        Send_Files->Caption="终止发送";
        Open_Filse->Enabled=false;//关闭打开文件按钮
        SendFileEn=true;
    }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Close_UartClick(TObject *Sender)
{
    Form1->Close();//关闭程序
}
//---------------------------------------------------------------------------
//自动发送开启与否
void __fastcall TForm1::Auto_SendClick(TObject *Sender)
{
    if(Auto_Send->Checked)
    {
        Timer2->Enabled=true;//使能定时器二
        Timer2->Interval=StrToInt(AutoSend_Time->Text);
    }else Timer2->Enabled=false;//关掉定时器二
}
//---------------------------------------------------------------------------
//定时器二 ,自动发送
//每ms发送100个数据
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
    static unsigned long n=1;//存储文字长度
    uchar count_send=0;

    AnsiString str=Send_Box->Text;//取得发送文本
    OleVariant temp;              //声明变体变量
    uchar c;

    if(SendFileEn&&Uart_Open)//发送文件,串口必须打开
    { 
        while(n<=str.Length())//直到发送结束
        {
            c=str[n];
            n++;
            //if(c=='\r'||c=='\n')return; //忽略换行符
            temp=VarArrayCreate(OPENARRAY(int,(0,0)),varByte);//创造单个变体int,(0,10))发送11个数据
            temp.PutElement(c,0);//字符传入变体变量
            MSComm1->Output=temp;
            TXCount->Caption="TX:"+IntToStr(TX_Count++);//发送计数器计数

            count_send++;
            if(count_send>10)return;//每1ms发送100个字符
        }
        //发送结束了
        n=1;//计数器复位
        Timer2->Enabled=false;//中断关闭
        Timer2->Interval=1000;
        Send_Files->Caption="发送文件";
        Open_Filse->Enabled=true;//打开打开文件按钮
        SendFileEn=false;//文件发送使能标志清空
        return;
    }
    else Send_ButtonClick(Form1);
}
//---------------------------------------------------------------------------
//定时时间设置
void __fastcall TForm1::AutoSend_TimeChange(TObject *Sender)
{
    char *cs;
    unsigned long settime;
    AnsiString c;
    c=AutoSend_Time->Text;
    cs=c.c_str();
    for(int t=0;t<c.Length();t++)
    {
        if(cs[t]>57||cs[t]<48)
        {
            Application->MessageBox("请输入数字!","输入错误",MB_OK);
            AutoSend_Time->Text=1000;//重新设置
            return;
        }
    }
    settime=StrToInt(AutoSend_Time->Text);//得到时间长度(ms)
    if(settime>65535||settime==0)//范围设置
    {
        Application->MessageBox("定时范围:1~65535(ms)","数据溢出",MB_OK);
        AutoSend_Time->Text=1000;//重新设置
        return;
    }
    Timer2->Interval=settime;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Open_FilseClick(TObject *Sender)
{
    if(Form1->OpenDialog1->Execute())//如果执行有效则继续执行
    {
        Send_Files->Enabled=false;//关闭发送按钮,避免触发Send_BoxChange事件
        Send_Box->Lines->LoadFromFile(Form1->OpenDialog1->FileName);
        Send_Button->Enabled=false;//关闭发送按钮
        Auto_Send->Checked=false;//自动发送取消
        Auto_Send->Enabled=false;//自动发送关闭
        SendFileEn=false;//关闭发送使能
        Send_Files->Caption="发送文件";
        Send_Files->Enabled=true;//开启发送按钮
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Send_BoxChange(TObject *Sender)
{
    FileSend_Juder();//发送文件退出处理
}
//---------------------------------------------------------------------------
//打开升级链接
void __fastcall TForm1::Label11Click(TObject *Sender)
{
    ShellExecute(NULL,"OPEN","http://blog.ednchina.com/atom6037/168302/message.aspx",NULL,NULL,SW_SHOW);
}
//---------------------------------------------------------------------------
//打开对话框二
void __fastcall TForm1::Label12Click(TObject *Sender)
{ 
    Form2->Show();
    Form2->Label1->Caption=Label10->Caption;//获得相同版本号
}
//---------------------------------------------------------------------------





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -