【Open Source】Fingerabdruckerkennungslösung basierend auf dem T5L Smart Screen
Hier wurde ein Open-Source-Fallbeispiel vorgestellt. DWIN Entwicklerforum – Fingerabdruckidentifizierungslösung basierend auf T5L.
Die Lösung basiert auf Modbus-Kommunikation über die serielle Schnittstelle des Smart-Bildschirms, ermöglicht die präzise Steuerung des Fingerabdruck-Identifikationsmoduls und integriert die Funktionen zur Fingerabdruckeingabe und -identifizierung. DÜRFEN kann für Zutrittskontrollmanagement, Mitarbeiteranwesenheitskontrolle, intelligente Türschlösser und andere Anwendungsfälle eingesetzt werden und bietet den Nutzern ein komfortableres und sichereres Interaktionserlebnis.
【GUI-Design】

【C51 Design】
Ein Teil des Codes für die Modbus-Kommunikation des Bildschirms lautet wie folgt:
int main(void)
{
INIT_CPU();
T2_Heat();
UART4_Init();
EA=1;
// UART4_SendStr("hello",sizeof("hello"));
WDT_ON();//Watchdog öffnen
while(1)
{
WDT_RST();//Füttere den Hund
Verfahren();
}
}
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])
return false;
// Dies ist ein Schreibbefehl
if(Tdata[0]==0&& Tdata[1]!=0x06)
{
return false;
}
elseif(Tdata[0]!=DevAddr) // Geräteadresse
{
return false;
}
// Dies ist ein Schreibbefehl
if(Tdata[1]!=0x03&& Tdata[1]!=0x06 && Tdata[1]!=0x10 )
{
SendModbusAckErr(Tdata,1);
return false;
}
Wlen=(Tdata[4]
BegAddr=(Tdata[2]
if(Tdata[1]==0x06)// In den Speicher schreiben
{
write_dgusii_vp(BegAddr,&Tdata[4],1);
}
elseif(Tdata[1]==0x10)
{
write_dgusii_vp(BegAddr,&Tdata[7],Wlen);
}
// Antwort des Lesevorgangs
//[01][0x03][00][6B][00][02][CRC High][CRC Low]
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]) // Antwort, wenn der Adresscode wahr ist
{
memcpy(RetData,Tdata,8);
SendModbusAckOK(RetData,8);
}
returntrue;
}







