——來自迪文開發(fā)者論壇
本期為大家推送迪文開發(fā)者論壇獲獎開源案例——基于T5L的指紋識別解決方案。該方案通過智能屏串口進(jìn)行Modbus通訊,實(shí)現(xiàn)對指紋識別模塊的精準(zhǔn)控制,并集成了指紋錄入與識別功能??捎糜陂T禁管理、員工考勤、智能門鎖等場景,為用戶帶來更為便捷、安全的交互體驗(yàn)。
【演示視頻】
完整開發(fā)資料含迪文屏DGUS工程資料與C51代碼,獲取方式:
1. 前往迪文開發(fā)者論壇獲取:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=10571&extra=page%3D1&_dsign=ea69763b
2. 微信公眾號中回復(fù)“指紋識別門鎖”獲取。
【UI素材展示】
【GUI工程設(shè)計(jì)】
【C51工程設(shè)計(jì)】
屏幕進(jìn)行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) //設(shè)備地址
{
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)//寫內(nèi)存
{
write_dgusii_vp(BegAddr,&Tdata[4],1);
}
elseif(Tdata[1]==0x10)
{
write_dgusii_vp(BegAddr,&Tdata[7],Wlen);
}
//讀操作響應(yīng)
//[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]) //當(dāng)?shù)刂反a為真,才應(yīng)答
{
memcpy(RetData,Tdata,8);
SendModbusAckOK(RetData,8);
}
returntrue;
}