void my_keyL(u8 cmd,u16 pos) { switch(cmd){ case 0 :{//switch if(BBM(p.s.ctl,MY_CTL_L_NC)){//阀门无效 BBM(my.stu,MY_KEY_L) = 1; }else if(BBM(my.stu,MY_KEY_L)){ BBM(my.stu,MY_KEY_L) = 0; }else{ BBM(my.stu,MY_KEY_L) = 1; } }break; case 1 :{//dsp if(BBM(p.s.ctl,MY_CTL_L_NC)){//阀门无效 BBM(my.stu,MY_KEY_L) = 1; } if(BBM(my.stu,MY_KEY_L)){ DcmSetKey(my.screen_id,pos,0x01);//设置按钮由弹起变成按下状态 }else{ DcmSetKey(my.screen_id,pos,0x00);//设置按钮弹起状态 } }break; default :{ ; }break; } }
时间: 2024-04-19 13:29:59 浏览: 10
这段代码是一个函数,名为`my_keyL`,接受两个参数:`cmd`和`pos`。函数内部使用了一个`switch`语句来根据`cmd`的值执行不同的操作。
如果`cmd`的值为0,表示执行开关操作。在这种情况下,首先检查阀门是否有效。如果阀门无效,则将`MY_KEY_L`标志位置为1。否则,如果`MY_KEY_L`标志位已经被设置为1,将其重置为0;如果`MY_KEY_L`标志位为0,则将其设置为1。
如果`cmd`的值为1,表示执行显示操作。在这种情况下,首先检查阀门是否有效。如果阀门无效,则将`MY_KEY_L`标志位置为1。然后,根据`MY_KEY_L`标志位的值,使用`DcmSetKey`函数来设置按钮的状态。如果`MY_KEY_L`标志位为1,则设置按钮状态为按下状态(值为0x01);否则,设置按钮状态为弹起状态(值为0x00)。
如果`cmd`的值既不为0也不为1,则没有任何操作。
请注意,代码中使用了一些宏定义,如`BBM`和`DcmSetKey`,这些宏定义可能在其他地方进行了定义。
相关问题
void my_para_qtinit(sjz* td) { td->cs[0] = td->bd[0];//零气//量程测量值 td->cs[1] = td->bd[1];//量程测量值1 td->cs[2] = td->bd[2];//量程测量值2 td->cs[3] = td->bd[3];//量程测量值3 td->biaoq[0] = td->bd[0];//零气 //样品值 td->biaoq[1] = td->bd[1] * 80 / 100;//样品值1 td->biaoq[2] = td->bd[2] * 80 / 100;//样品值2 td->biaoq[3] = td->bd[3] * 80 / 100;//样品值3 td->wucx[0] = td->biaoq[1];//零气 //误差限 td->wucx[1] = td->biaoq[1];//误差限1 td->wucx[2] = td->biaoq[2] / 2;//误差限2 td->wucx[3] = td->biaoq[3] / 2;//误差限3 td->bjx = td->bd[0] - td->bd[2];//报警下限 td->bjs = td->bd[3] + td->bd[2];//报警上限 td->gaojck = td->bd[1]; //告警窗口 BBM(td->ctl,MY_TDCTL_LC0) = 0;// 标定量程 BBM(td->ctl,MY_TDCTL_LC1) = 1;// BBM(td->ctl,MY_TDCTL_LC2) = 1;// BBM(td->ctl,MY_TDCTL_LC3) = 1;// BBM(td->ctl,MY_TDCTL_CXGJ) = 1;//超限告警=0->禁止;1->使能 //BBM(td->ctl,MY_TDCTL_GJH) = 0;//上限告警 //BBM(td->ctl,MY_TDCTL_GJL) = 0;//下限告警 BBM(td->ctl,MY_TDCTL_CLMOD) = 1;//测量模式0-原始值,1-校正值 BBM(td->ctl,MY_TDCTL_ZDLC) = 1;//量程模式0-固定量程3,1-自动
这段代码是一个函数`my_para_qtinit`,接受一个指向`sjz`类型结构体的指针`td`作为参数。函数的作用是初始化一些参数值,并将其赋值给结构体`td`的相应成员变量。
首先,将`td->bd[0]`的值赋给`td->cs[0]`。然后,依次将`td->bd[1]`、`td->bd[2]`和`td->bd[3]`的值分别赋给`td->cs[1]`、`td->cs[2]`和`td->cs[3]`。
接下来,将`td->bd[0]`的值赋给`td->biaoq[0]`,表示零气的样品值。然后,将`td->bd[1]`的值乘以80再除以100,并赋给`td->biaoq[1]`表示样品值1。类似地,将`td->bd[2]`的值乘以80再除以100,并赋给`td->biaoq[2]`表示样品值2。将`td->bd[3]`的值乘以80再除以100,并赋给`td->biaoq[3]`表示样品值3。
接着,将`td->biaoq[1]`的值赋给`td->wucx[0]`,表示零气的误差限。将`td->biaoq[1]`的值赋给`td->wucx[1]`表示误差限1。将`td->biaoq[2]`的值除以2,并赋给`td->wucx[2]`表示误差限2。将`td->biaoq[3]`的值除以2,并赋给`td->wucx[3]`表示误差限3。
然后,计算并赋值给`td->bjx`和`td->bjs`,分别为报警下限和报警上限。`td->bjx`的值是`td->bd[0] - td->bd[2]`,而`td->bjs`的值是`td->bd[3] + td->bd[2]`。
将`td->bd[1]`的值赋给`td->gaojck`,表示告警窗口。
接下来,通过位操作设置结构体成员变量`td->ctl`中的一些标志位。例如,通过`BBM(td->ctl, MY_TDCTL_LC0) = 0`将标定量程的第0位设置为0。
最后,设置了其他一些标志位,如超限告警使能为1,测量模式为校正值等。
请注意,代码中使用了宏定义,如`BBM`和一些结构体成员变量,这些宏定义和结构体成员变量可能在其他地方进行了定义。
void my_put_gaoj(u8 ach,u8* aptr) { // u8 i; u8* ptr; ptr = aptr; ptr = FuncCpoyStr(p.s.jiaoz[ach].mingc,ptr,8); *ptr = ':'; ptr++; *ptr = ' '; U32ToASCIIDF(my.td[ach].jiaoz,p.s.jiaoz[ach].dot,(aptr + 18),9); ptr = aptr + 19; ptr = FuncCpoyStr(p.s.jiaoz[ach].dw,ptr,8); *ptr = ' '; ptr++; *ptr = ' '; ptr++; if(BBM(my.err,ach)){//低 FuncCpoyStr((u8*)"低于下限",ptr,9);//带0 }else{//高 FuncCpoyStr((u8*)"高于上限",ptr,9);//带0 } }
这段代码是一个函数`my_put_gaoj`,接受两个参数:`ach`和`aptr`。函数的作用是将一些数据格式化输出到`aptr`指向的内存中。
首先,定义了一个指针变量`ptr`,并将其指向`aptr`。
接下来,使用函数`FuncCpoyStr`将长度为8的字符串`p.s.jiaoz[ach].mingc`复制到`ptr`指向的内存中,并将`ptr`指向下一个位置。
然后,在`ptr`指向的位置存储字符':'和空格。
使用函数`U32ToASCIIDF`将数据`my.td[ach].jiaoz`转换为ASCII码,并将结果存储到长度为9的内存区域`(aptr + 18)`中。然后,将`ptr`指向`(aptr + 19)`的位置。
接下来,使用函数`FuncCpoyStr`将长度为8的字符串`p.s.jiaoz[ach].dw`复制到`ptr`指向的内存中,并将`ptr`指向下一个位置。
在最后,根据条件判断,如果`my.err`中对应的位为1,则将字符串"低于下限"复制到`ptr`指向的内存中;否则,将字符串"高于上限"复制到`ptr`指向的内存中。
请注意,代码中使用了一些宏定义,如`BBM`和`FuncCpoyStr`,这些宏定义可能在其他地方进行了定义。