MODBUS通讯上了,目前实现如下功能:
//检查站号
if(mb_rsp16_adu.StationNumber == MODBUS_STATION_NUMBER_DEFAULT)
{
//检查命令
if(mb_rsp16_adu.cmd == 16)
{
//检查数量
tmp16 = ((u16)mb_rsp16_adu.WriteLen[0]<<8) | mb_rsp16_adu.WriteLen[1];
if((tmp16 << 1) == mb_rsp16_adu.Bytelen)
{
//检查crc
tmp16 = ((u16)mb_rsp16_adu.crc[1]<<8) | mb_rsp16_adu.crc[0];
if(tmp16 == CRC16_calculation((u8*)&mb_rsp16_adu,sizeof(mb_rsp16_adu)-2))
{
switch(((u16)mb_rsp16_adu.WriteAddr[0]<<8) | mb_rsp16_adu.WriteAddr[1])
{
case 0: //清屏
HUB08_ClearScreen(mb_rsp16_adu.data[0][0],mb_rsp16_adu.data[0][1]);
break;
case 10000: //第一行字符串
memcpy(HUB08Data.string[0].str,mb_rsp16_adu.data[0],mb_rsp16_adu.Bytelen);
HUB08_StringToBuf(0);
break;
case 20000: //第二行字符串
memcpy(HUB08Data.string[1].str,mb_rsp16_adu.data[0],mb_rsp16_adu.Bytelen);
HUB08_StringToBuf(1);
break;
case 30000: //开关、亮度等系统设置
HUB08Data.DisplaySwitch = mb_rsp16_adu.data[0][0]?1:0; //显示屏开关
HUB08Data.brightness = mb_rsp16_adu.data[0][1]; //亮度
break;
default:
break;
}
}
}
}
}
用起来感觉越来越方便了,串口直接发送字符串,不过还有一些细节功能要慢慢完善,比如字体设置,颜色设置等等,,甚至动画效果。。
|
@一路向北lm :谢谢支持!
DIY的不错,支持一波。