|
发表于 2019-8-13 11:55:27
|
显示全部楼层
谢谢Eric老师的例程 ,之前没有注册成功。在此分享一下我应用此例程的使用结果,我的目标是接收7个两位的16进制数,并提取三四位进行显示通过更改此例程实现。
- while (status == 1) /* 读取变送器中数据主循环 */
- {
- comSendBuf(COM3,_ucaBuf,sizeof(_ucaBuf));
- bsp_DelayMS(500);
- for(i=0;i<7;i++) /* 等于7时,每个都读取14位返回值 */
- {
- if (comGetChar(COM3, &read)) /* 接收到的串口命令处理 */
- {
- switch (ucStatus)
- {
- case 0:
- if(read == 0x01)/* 状态0保证接收到0x01 */
- {ucStatus = 1;}
- break;
- case 1:
- if(read == 0x03) /* 状态1保证接收到0x03 */
- {ucStatus = 2;}
- else
- {ucStatus = 0;}
- break;
- case 2:
- if(read == 0x02)/* 状态2保证接收到0x02 */
- {ucStatus = 3;}
- else
- {ucStatus = 0;}
- break;
- case 3:
- sensor_buf[ucCount] = read;
- if(ucCount == 3) /* 接收够4个数据 */
- {
- for(i = 0; i < ucCount+1; i++)
- {
- // printf("%c ", buf[i]);
- }
- FormRSV->ReturnValue=sensor_buf[0]*16*16+sensor_buf[1]; /* 16进制返回值 */
- DispReturnValue();
- FormRSV->TempValue=(sensor_buf[0]*16*16+sensor_buf[1])/10-273; /* 转换成温度值*/
- DispTempValue();
- ucStatus = 0;
- ucCount=0;
- }
- else
- {ucCount++;}
- break;
- default:
- break;
- }
- }
- }
- ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件 */
- if (ucTouch != TOUCH_NONE)
- {
- switch (ucTouch)
- {
- case TOUCH_DOWN: /* 触笔按下事件 */
- if (TOUCH_InRect(tpX, tpY, BTN_RET_X, BTN_RET_Y, BTN_RET_H, BTN_RET_W))
- {
- FormRSV->BtnRet.Focus = 1;
- LCD_DrawButton(&FormRSV->BtnRet);
- status = 0;
- }
- break;
- case TOUCH_RELEASE: /* 触笔释放事件 */
- if (TOUCH_InRect(tpX, tpY, BTN_RET_X, BTN_RET_Y, BTN_RET_H, BTN_RET_W))
- {
- FormRSV->BtnRet.Focus = 0;
- LCD_DrawButton(&FormRSV->BtnRet);
- fQuit = 1; /* 返回 */
- status = 0;
- }
- else /* 按钮失去焦点 */
- {
- FormRSV->BtnRet.Focus = 0;
- LCD_DrawButton(&FormRSV->BtnRet);
- status = 0;
- }
- break;
- }
- }
- }
复制代码 |
|