双路串口接收数据

有个客户做测试仪器,是双路的,每路都是独立的电路,都有单片机并且有串口输出,输出的格式如下:

1|测试结果|参数1|参数2#0d#0a

需要将两路的串口收到的信息都解析到屏幕上

分析:

实施

第一:初始化串口

void b1.onclick()
{    //调试用,启动str模式后,系统将不能串口更新,因此设置一个按钮
    setrecvmode(2);    //1号串口开启str模式
      setcom(1,115200);  //打开2号串口
      if (que_create(1)) {que_go(1,10);} //2号串口启动通信,开始接收数据
     gopage(1)
}

建立第一个页面,放置一个按钮,点击进入第二页,点击这个按钮后,串口更新就已经不起作用了,只能用TF卡更新

第二:建立appbase处理程序

菜单:控件-->编辑全局控件appbase源码 :

int x1=0;
int y1=0;
int x2=319;
int y2=239;
int status=00;
int status2=0x0000;

void create(){}
void draw(){}
void show(){}

void showjm1(int picn,str s1,str s2,str s3){};
void showjm2(int picn,str s1,str s2,str s3){};
void work(int n,str s)
{    //picn|label1|label2|label3
    int picn;
    str s1;
    str s2;
    str s3;
    picn=explode_num(s,"|",0);
    echo("{");echo(picn);echo("}");
    s1=explode_str(s,"|",1);
    s2=explode_str(s,"|",2);
    s3=explode_str(s,"|",3);
    if (n==0) {
        showjm1(picn,s1,s2,s3);
    }
    else{
        showjm2(picn,s1,s2,s3);
    }
}

//--------1号串口接收
void onrecv(){
    str s;
    s=urecv(0);
    echo(s);
    if (s=="exit str mode") setrecvmode(0);
    work(0,s);
}

//------ 2号串口接收
void que_step(){
    str s;
    str ss;
    int cc=0;    //计数

    que_do(1,10,10){}//设置关闭回显
    then{
           s=trim(urecv(1),1);
        work(1,s);
    }
    else que_go(1,10);
}

第三:页面程序

//注: p1是pic控件  l1 -l6 是六个label控件,本代码是示例,具体控件显示属性可自行调整
void app.showjm1(int picn,str s1,str s2,str s3){
    p1.picn=picn;p1.show();
    l1.text=s1;
    l3.text=s2;
    l5.text=s3;
};
void app.showjm2(int picn,str s1,str s2,str s3){
    p2.picn=picn;
    l2.text=s1;
    l4.text=s2;
    l6.text=s3;
};

在页面中继承这2个事件,就可以在串口收到数据后的刷新到页面。