——來自迪文開發者論壇
本期為大家推送迪文開發者論壇獲獎開源案例——基于T5L智能屏的指紋識別解決方案。該方案通過智能屏串口進行Modbus通訊,實現對指紋識別模塊的精準控制,并集成了指紋錄入與識別功能??捎糜陂T禁管理、員工考勤、智能門鎖等場景,為用戶帶來更為便捷、安全的交互體驗。
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;}
-
指紋識別
+關注
關注
43文章
1742瀏覽量
102231 -
開源
+關注
關注
3文章
3309瀏覽量
42471 -
智能屏幕
+關注
關注
0文章
65瀏覽量
3323
發布評論請先 登錄
相關推薦
評論