Leave Your Message

【Open Source】Fingerabdruckerkennungslösung basierend auf dem T5L Smart Screen

15.07.2024

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】

1569.png

 

【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;

}