——来自迪文开发者论坛
本期为大家推送迪文开发者论坛获奖开源案例——基于T5L智能屏的指纹识别解决方案。该方案通过智能屏串口进行Modbus通讯,实现对指纹识别模块的精准控制,并集成了指纹录入与识别功能。可用于门禁管理、员工考勤、智能门锁等场景,为用户带来更为便捷、安全的交互体验。
UI素材展示
GUI工程设计 C51工程设计
屏幕进行modbus通讯的部分代码如下:
int main(void){ INIT_CPU(); T2_Init(); UART4_Init(); EA=1;// UART4_SendStr("hello",sizeof("hello")); WDT_ON();//打开开门狗 while(1) { WDT_RST();//喂狗 Process(); }}void MainMachineHandle(void){ if(UartDataHandle) { uartHandle(Uart4_Rx,uart4_rx_count); CLR_UartMp3(); }}bool uartHandle(u8 *Tdata,u8 len){ u16Wlen=0; u16CRC_1=0,BegAddr=0; u8 xdata RetData[Uart4_Rx_Maxlen+10]; u8 errnum=0; CRC_1=CalcCrcAll(0xffff,Tdata,len-2); if(CRC_1!= ((Tdata[len-1])<<8 | (Tdata[len-2]))) returnfalse; //这个为写指令 if(Tdata[0]==0&& Tdata[1]!=0x06) { returnfalse; } elseif(Tdata[0]!=DevAddr) //设备地址 { returnfalse; } //这个为写指令 if(Tdata[1]!=0x03&& Tdata[1]!=0x06 && Tdata[1]!=0x10 ) { SendModbusAckErr(Tdata,1); returnfalse; } Wlen=(Tdata[4]<<8|Tdata[5]); //长度 BegAddr=(Tdata[2]<<8|Tdata[3]); //开始地址 if(Tdata[1]==0x06)//写内存 { write_dgusii_vp(BegAddr,&Tdata[4],1); } elseif(Tdata[1]==0x10) { write_dgusii_vp(BegAddr,&Tdata[7],Wlen); } //读操作响应 //[01][0x03][00][6B][00][02][CRC高][CRC低] if(Tdata[1]==0x03) { RetData[0]=Tdata[0]; RetData[1]=0x03; RetData[2]=Wlen*2; read_dgusii_vp(BegAddr,&RetData[3],Wlen); CRC_1=CalcCrcAll(0xFFFF,RetData,3+Wlen*2); RetData[Wlen*2+3]=CRC_1; RetData[Wlen*2+3+1]=CRC_1>>8; SendModbusAckOK(RetData,3+Wlen*2+2); } elseif(Tdata[1]==0x10) { memcpy(RetData,Tdata,6); CRC_1=CalcCrcAll(0xFFFF,(INT8U*)&RetData,6); RetData[6]=CRC_1; RetData[7]=CRC_1>>8; SendModbusAckOK(RetData,8); } elseif(Tdata[1]==0x06 && Tdata[0]) //当地址码为真,才应答 { memcpy(RetData,Tdata,8); SendModbusAckOK(RetData,8); } returntrue;}
全部0条评论
快来发表一下你的评论吧 !