📄 finger.c
字号:
}
}
}
/////////////////////////////////////
uchar CMDFpDelete(uchar Param1L,uchar Param1H)
{
uchar *pComm;
P5DIR |= BIT4;
P5OUT &= ~BIT4;
delay(500);
RecCount=0;
FrameCount =12;
pComm = CMD_FP_DELETE;
*(pComm + 2) = Param1L;
*(pComm + 3) = Param1H;
*(pComm + 11)= CheckSum(pComm,11);
SendFrame(pComm,12);
Time_count=50;
while((RecCount != FrameCount)&&(Time_count>0)) //20s等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
}
if(Time_count==0)
return ComErr;
else
{
if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
else
{
Param1_L=RecComm[2];
Param1_H=RecComm[3];
Param2_L=RecComm[4];
Param2_H=RecComm[5];
return RecComm[10];
}
}
}
//////////////////////
uchar CMDFpVerify(uchar Param1L,uchar Param1H)
{
uchar *pComm;
P5DIR |= BIT4;
P5OUT &= ~BIT4;
delay(500);
RecCount=0;
FrameCount =12;
pComm = CMD_FP_VERIFY;
*(pComm + 2) = Param1L;
*(pComm + 3) = Param1H;
*(pComm + 11)= CheckSum(pComm,11);
SendFrame(pComm,12);
Time_count=50;
while((RecCount != FrameCount)&&(Time_count>0)) //20s等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
}
if(Time_count==0)
return ComErr;
else
{
if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
else
{
Param1_L=RecComm[2];
Param1_H=RecComm[3];
Param2_L=RecComm[4];
Param2_H=RecComm[5];
return RecComm[10];
}
}
}
//////////////////////////////////
uchar CMDFpIdentify()
{
uchar *pComm;
P5DIR |= BIT4;
P5OUT &= ~BIT4;
delay(500);
RecCount=0;
FrameCount =12;
pComm = CMD_FP_IDENTIFY;
*(pComm + 11)= CheckSum(pComm,11);
SendFrame(pComm,12);
Time_count=70;
while((RecCount != FrameCount)&&(Time_count>0)) //6s等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
}
if(Time_count == 0)
return ComErr;
else
{
if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
else
{
Param1_L=RecComm[2];
Param1_H=RecComm[3];
Param2_L=RecComm[4];
Param2_H=RecComm[5];
return RecComm[10];
}
}
}
////////////////////////////////////
uchar CMDFpVerifyMaster(uchar Param1L,uchar Param1H)
{
uchar *pComm;
P5DIR |= BIT4;
P5OUT &= ~BIT4;
delay(500);
RecCount=0;
FrameCount =12;
pComm = CMD_FP_VERIFY_MASTER;
*(pComm + 2) = Param1L;
*(pComm + 3) = Param1H;
*(pComm + 11)= CheckSum(pComm,11);
SendFrame(pComm,12);
Time_count=50;
while((RecCount != FrameCount)&&(Time_count>0)) //20s等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
}
if(Time_count==0)
return ComErr;
else
{
if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
else
{
Param1_L=RecComm[2];
Param1_H=RecComm[3];
Param2_L=RecComm[4];
Param2_H=RecComm[5];
return RecComm[10];
}
}
}
////////////////////////////////////
uchar CMDFpVerifyEnd()
{
uchar *pComm;
P5DIR |= BIT4;
P5OUT &= ~BIT4;
delay(500);
RecCount=0;
FrameCount =12;
pComm = CMD_FP_VERIFY_END;
*(pComm + 11)= CheckSum(pComm,11);
SendFrame(pComm,12);
Time_count=50;
while((RecCount != FrameCount)&&(Time_count>0)) //200ms等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
}
if(Time_count==0)
return ComErr;
else
{
if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
else
{
Param1_L=RecComm[2];
Param1_H=RecComm[3];
Param2_L=RecComm[4];
Param2_H=RecComm[5];
return RecComm[10];
}
}
}
//////////////////////////////////
uchar CMDFpIdentifyEx(uchar Param1L,uchar Param1H,uchar Param2L,uchar Param2H)
{
uchar *pComm;
P5DIR |= BIT4;
P5OUT &= ~BIT4;
delay(500);
RecCount=0;
FrameCount =12;
pComm = CMD_FP_IDENTIFY_EX;
*(pComm + 2) = Param1L;
*(pComm + 3) = Param1H;
*(pComm + 4) = Param2L;
*(pComm + 5) = Param2H;
*(pComm + 11)= CheckSum(pComm,11);
SendFrame(pComm,12);
Time_count=70;
while((RecCount != FrameCount)&&(Time_count>0)) //20s等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
}
if(Time_count==0)
return ComErr;
else
{
if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
else
{
Param1_L=RecComm[2];
Param1_H=RecComm[3];
Param2_L=RecComm[4];
Param2_H=RecComm[5];
return RecComm[10];
}
}
}
//isd4003语音芯片程序
//******************************************************************
void isdx(uchar com)
{
uchar i;
//SS=0;
P5OUT &= ~BIT0;
//delay(5); //启动用时
//SCLK=0;
P5OUT &= ~BIT3;
//delay(10);
for(i=0;i<8;i++)
{
//delay(10);
if((com & 0x01)==0)
P5OUT &= ~BIT1;
else
P5OUT |= BIT1;
//delay(10);
//SCLK=1; //上升沿锁存数据
P5OUT |= BIT3;
//delay(20);
com=com>>1;
//SCLK=0;
P5OUT &= ~BIT3;
}
}
//----------------------isd4003()-------------------------------------
//void play(uchar addsH,uchar addsL)
void play(uint adds)
{
uchar addsH,addsL;
P5SEL &= ~(BIT0+BIT1+BIT2+BIT3);
P5DIR |= (BIT0+BIT1+BIT3);
P5DIR &= ~BIT2;
P1DIR &= ~BIT1; //用于检测放音结束标志
P5OUT |= BIT0;
addsL = (adds & 0xff);
adds = adds>>8;
addsH = (adds & 0xff);
addsH &= 0x07; //取后三位
isdx(0x00);
isdx(POWERUP);
P5OUT |= BIT0;
isdx(addsL); //开始地址
isdx(SETPLAY | addsH);
P5OUT |= BIT0;
isdx(0x00);
isdx(PLAY);
P5OUT |= BIT0;
while(P1IN & BIT1)
{;}
isdx(0x00);//停止取消也能正常停止
isdx(STOP);
P5OUT |= BIT0;
isdx(0x00);
isdx(POWERDN);
P5OUT |= BIT0;
}
//液晶显示模块
uchar wait_free()
{
uchar Status;
P6DIR = 0x00; //p6 is input port
//ClrRS;
P5OUT &= ~BIT5;
//SetRW;
P5OUT |= BIT6;
//SetE;
P5OUT |= BIT7;
Status = P6IN;
Time_count=10;
while((Status & BIT7)&&(Time_count>0)) //20s等待通讯
{
if(TACTL & TAIFG)
{
Time_count--;
TACTL &= ~TAIFG; //轻重断标志
}
Status = P6IN;
}
P6DIR = 0xff; //p6 is output port
if(Time_count==0) return BUSY;
else
return FREE;
}
void write1_command(uchar command)
{
//ClrRS;
P5OUT &= ~BIT5;
//ClrRW;
P5OUT &= ~BIT6;
//SetE;
P5OUT |= BIT7;
P6OUT = command;
//ClrE;
P5OUT &=~BIT7;
}
void write_command(uchar command)
{
if(wait_free()==FREE)
write1_command(command);
}
void write_data(uchar data)
{
if(wait_free() == FREE)
{
//SetRS;
P5OUT |= BIT5;
// ClrRW;
P5OUT &= ~BIT6;
//SetE;
P5OUT |= BIT7;
P6OUT = data;
//ClrE;
P5OUT &= ~BIT7;
}
}
void InitLcm()
{
P6DIR |= 0xff;
P5DIR |= (BIT5+BIT6+BIT7);
delay(500); //delay > 40ms
write1_command(0x30); //set basic commandset
delay(100); //delay > 100us
write1_command(0x30); //set 8bit mode
delay(10); //delay > 37us
write_command(0x0c); //display status
delay(100); //delay > 100us
write_command(0x01); //clear screen
delay(500); //delay > 10ms
write_command(0x06); //设定光标的移动方向
delay(100);
}
void DisString(uchar row,uchar line,char *Data_String)
{
uchar Add,Status;
Add = (row-1)*16+(line -1);
write_command(Add | 0x80);
Status = wait_free();
if( Status == FREE)
{
write_data(*(Data_String));
if(wait_free()==FREE)
write_data(*(Data_String+1));
}
}
void ClrString(uchar row,uchar line)
{
uchar Add;
Add = (row-1)*16+(line -1);
write_command(Add | 0x80);
if(wait_free()==FREE)
{
write_data(0x20);
if(wait_free()==FREE)
write_data(0x20);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -