?? tools.c
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
#include <ExEH0218.h>
#include <mifare530.h>
#include <memcard.h>
#include "Health.h"
void delay_n_ms(short i)
{
for(;i>0;i--)
delay_1ms();
}
void dump_memory(unsigned char * buf,short int cnt,short line)
{
unsigned short cntr;
unsigned char stmp[100];
for (cntr = 0; cntr < cnt; cntr ++) {
sprintf( stmp+2*cntr,"%02X", buf[cntr]);
}
stmp[cnt*2] = 0;
ClearLine(line,DISP_5x7);
DispStr_E(0,line,stmp,DISP_POSITION|DISP_5x7);
}
/**************************************************************
函數名稱:Alarm
功能描述:蜂鳴器報警
函數說明:蜂鳴器鳴響三次
調用函數:無
全局變量:無
輸入: 無
返回: 無
修改:
*************************************************************/
void Alarm()
{
int count;
for(count=0;count<3;count++)
{
BEEPER_sound(0xBF0B);
SPT_set(16);
while(SPT_read());
BEEPER_sound(0x7F0B);
delay_n_ms(100);
}
}
/**************************************************************
函數名稱:BCDToASC
功能描述:將BCD碼轉換為ASCII碼
函數說明:
調用函數:無
全局變量:無
輸入: unsigned char *source:BCD碼 , unsigned char length:BCD碼的長度
輸出: unsigned char *dest: ASCII碼
返回: 無
修改:
*************************************************************/
void BCDToASC(unsigned char *source,unsigned char *dest,unsigned char length)
{
unsigned char i, j;
for(i=0;i<length;i++)
{
j=(source[i]>>4)&0x0f;
if(j>9)
dest[2*i]=j+'A'-10;
else
dest[2*i]=j+'0';
j=source[i]&0x0f;
if(j>9)
dest[2*i+1]=j+'A'-10;
else
dest[2*i+1]=j+'0';
}
}
/**************************************************************
函數名稱:LongToAsc
功能描述:將長整形整數轉換為ASCII碼
函數說明:
調用函數:無
全局變量:無
輸入: long a:長整形整數
輸出: unsigned char *buffer: ASCII碼
返回: 無
修改:
*************************************************************/
void LongToAsc(long a, unsigned char *buffer)
{
int i,j;
long z,b;
memset(buffer, 0, sizeof(buffer));
b = a;
j = 19;
for(i = 0; i < 20; i++)
buffer[i] = 0x30;
buffer[20] = 0;
if(b == 0)
{
buffer[0] = 0;
return;
}
while(b > 0)
{
z = b % 10;
buffer[j--] = (unsigned char)z + 0x30;
b = b / 10;
}
for(i=0; i<21; i++)
if (buffer[i] != 0x30)
break;
for(j=i; j<21; j++)
buffer[j-i] = buffer[j];
return;
}
/**************************************************************
函數名稱:ASCToBCD
功能描述:將ASCII碼轉換為BCD碼
函數說明:
調用函數:無
全局變量:無
輸入: unsigned char *source:ASCII碼 , unsigned char length:ASCII碼的長度
輸出: unsigned char *dest: BCD碼
返回: 無
修改:
*************************************************************/
void ASCToBCD(unsigned char *source, unsigned char *dest, unsigned char length)
{
unsigned char i, j, k;
for(i=0;i<length;i++)
{
if((source[i]>='0') && (source[i]<='9'))
j=source[i]-'0';
else if((source[i]>='a') && (source[i]<='z'))
j=source[i]-'a'+0x0a;
else
j=source[i]-'A'+0x0a;
i++;
if((source[i]>='0') && (source[i]<='9'))
k=source[i]-'0';
else if((source[i]>='a') && (source[i]<='z'))
k=source[i]-'a'+0x0a;
else
k=source[i]-'A'+0x0a;
dest[i/2]=(j<<4)|k;
}
}
/**************************************************************
函數名稱:AscAdd
功能描述:把兩個用ascii碼表示的整數相加
函數說明:
調用函數:無
全局變量:無
輸入: unsigned char *add1:ascii碼的加數1 , unsigned char *add2:ASCII碼的加數2
輸出: unsigned char *result: 結果
返回: 無
修改:
*************************************************************/
void AscAdd(unsigned char *add1,unsigned char *add2,unsigned char *result)
{
unsigned char temp[20];
unsigned char length;
unsigned char carry;
unsigned char j;
int i;
unsigned char length1,length2;
memset(result,0,sizeof(result));
length1 = strlen(add1);
length2 = strlen(add2);
length = length1;
if ( length1 < length2 )
{
memset(temp,0,20);
if (length1 == 1)
temp[0] = add1[0];
else memcpy(temp,add1,length1);
memset(add1,0,20);
for ( j = 0 ; j < length2-length1; j ++ )
add1[j] = 0x30;
if (length1 == 1)
add1[length2-length1] = temp[0];
else memcpy(add1 + length2 - length1 , temp ,length1);
length = length2;
}
if ( length2 < length1 )
{
memset(temp,0,20);
if ( length2 == 1)
temp[0] = add2[0];
else memcpy(temp,add2,length2);
memset(add2,0,20);
for ( j = 0 ; j < length1-length2; j ++ )
add2[j] = 0x30;
if ( length2 == 1 )
add2[length2 - length1] = temp[0];
else memcpy(add2 + length1 - length2 , temp ,length2);
length = length1;
}
carry = 0;
for ( i = length-1 ; i >= 0 ; i-- )
{
result[i] = add1[i] + add2[i] - 0x30 + carry;
if ( ( add1[i] + add2[i] - 0x09 + carry) >= 'a')
result[i] = add1[i] + add2[i] + carry - 0x3a;
if ( ( add1[i] + add2[i] - 0x09 + carry ) >= 'a')
carry = 1;
else carry = 0;
};
if ( carry == 1 )
{
memset(temp,0,20);
memcpy(temp,result,length);
memset(result,0,20);
result[0] = '1';
memcpy(result + 1, temp, length);
}
}
/**************************************************************
函數名稱:LongToBcd
功能描述:把長整形數轉換為bcd碼
函數說明:
調用函數:無
全局變量:無
輸入: long LongData 長整形數 , unsigned char *BcdStr:轉換后的BCD碼
輸出: int BcdStrLen :轉換后的bcd碼長度
返回: 無
修改:
*************************************************************/
void LongToBcd(long LongData,unsigned char *BcdStr,int BcdStrLen)
{
unsigned char ascstr[30];
unsigned char temp[16];
sprintf(ascstr,"%012ld",LongData);
memcpy(temp,ascstr+12-BcdStrLen*2,BcdStrLen*2);
temp[BcdStrLen*2] = 0;
ASCToBCD(temp,BcdStr,BcdStrLen*2);
}
/**************************************************************
函數名稱:BcdToLong
功能描述:把bcd碼轉換為長整形數
函數說明:
調用函數:無
全局變量:無
輸入: unsigned char *BcdStr:BCD碼,int BcdStrLen :bcd碼長度
輸出:
返回: 轉換后的長整形數
修改:
*************************************************************/
long BcdToLong(unsigned char *BcdStr,int BcdStrLen)
{
unsigned char ascstr[500];
BCDToASC(BcdStr,ascstr,BcdStrLen);
ascstr[BcdStrLen*2] = 0;
return(atol(ascstr));
}
void selectcode(char *Card_Read_Buff,char *Buff,int j)
{
int i,k,m,n; //
char temstr[500];
memset(temstr,0,500);
memcpy(temstr,Card_Read_Buff,500);
//DispStr_E(0,0,temstr,DISP_CENTER|DISP_CLRSCR);
// delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
/*if (j==1)
{
for(i=0;i<1000;i++)
{
if (temstr[i]=='|')
{
if (i == 1)
{
memcpy(Buff,"null",4);
break;
}
memcpy(Buff,temstr,i-1);
}
else continue;
}
}*/
m = 1;
for(i=0;i<500;i++)
{
//if (*(Card_Read_Buff+i)=="|")
if (temstr[i]=='|')
{
m = m + 1;
if ((j == 1)&&(m == 2))
{
break;
}
if (m == j)
{
/*memcpy(tmp,temstr+i,10);
DispStr_E(0,0,tmp,DISP_CENTER);
DispStr_E(0,2,p,DISP_CENTER);
delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );*/
break;
}
}
else continue;
}
if (j == 1)
{
memcpy(Buff,temstr,i);
}else
{
for (n=i+1;n<i+100;n++)
{
if (temstr[n]=='|')
{
if (n==(i+1))
{
memcpy(Buff," ",1);
break;
} else memcpy(Buff,temstr+i+1,n-i-1);
break;
}
continue;
}
}
//memcpy(tmp,Buff,10);
// DispStr_E(0,4,tmp,DISP_CENTER|DISP_CLRSCR);
// delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
return;
}
int Getdatanum(char *Card_Read_Buff,char *buff)
{
int i,j,k,m,n;//k is PHY# ,n is PHY#`s number
char str1[10],tmpstr[500];
k=0;
m=0;
n=0;
memcpy(str1,buff,10);
memcpy(tmpstr,Card_Read_Buff,500);
for (i=0;i<10;i++)
{
if (str1[i]=='#')
{
k=i;
//DispStr_E(0,1,str1+i,DISP_POSITION|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
break;
}
}
for (i=0;i<500;i++)
{
m=0;
if (tmpstr[i]==str1[0])
{
for (j=1;j<k+1;j++)
{
if (tmpstr[i+j]==str1[j])
{
m++;
//
//memcpy(ss,tmpstr+j,12);
//DispStr_E(0,0,ss,DISP_POSITION|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
//MH#|med 2|1/11/2006 01:00:00 AM|no|\n\nMH#|med 3|||\n\n
}
else
{
m=0;
break;
}
}
if (m == k)
{
n++;
//DispStr_E(0,1,"test",DISP_CENTER|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
//break;
}
}
}
//str1[0]=n;
//
//DispStr_E(0,4,str1,DISP_CENTER|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
//
return n;
}
void Getphydata(char *Card_Read_Buff,char * buff,int number)
{
//"PHY#|lam don|sp 1|5454512121|\n\n"
//"FFH#|china|teacher|cancer|32|True|True|True|True|True|False|False|False|False|False|False|False|False|False|False|False|False|True|True|True|\n\n
int i,j,k=0,m=0,n=0,p=0,q=0;//k is PHY# ,n is PHY#`s number
char str1[10],temstr[500];
memcpy(str1,buff,10);
memcpy(temstr,Card_Read_Buff,500);
for (i=0;i<10;i++)
{
if (str1[i]=='#')
k=i;
//
//DispStr_E(0,3,"find #",DISP_CENTER|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
//
break;
}
for (i=0;i<500;i++)
{
if (temstr[i]==str1[0])
{
for (j=0;j<k;j++)
{
if (temstr[i+j+1]==str1[j+1])
m++;
else
break;
}
if (m == k)
{
n=i+k;
break;
}
}
}
//
//"PHY#|lam don|sp 1|5454512121|\n\n"
//DispStr_E(0,3,temstr+n+2,DISP_CENTER|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
//
for (i=0;i<500;i++)
{
if (temstr[i+n]=='#')
{
p++;
if (p==number)
{
for(q=0;q<100;q++)
{
if (temstr[n+i+q]==92)
{
break;
}
}
memcpy(buff,temstr+n+i+2,q);
//DispStr_E(0,3,temstr+n+i+2,DISP_CENTER|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
break;
}
//q=i+n+k;
}
}
return ;
}
void tmpGetphydata(char *temstr,char * buff,int number)
{
int i,j,k=0,m=0,n=0,p=0,q=0;//k is PHY# ,n is PHY#`s number
char str1[10],temp[10];
//char *strtmp;
memset(str1,0,10);
memset(temp,0,10);
memcpy(str1,buff,10);
//memcpy(temstr,Card_Read_Buff,2000);
for (i=0;i<10;i++)
{
if (str1[i]=='#')
{
k=i;
break;
}
}
memset(buff,0,500);
for (i=0;i<number;i++)
{
if (temstr[i]==str1[0])
{
m=0;
for (j=0;j<k;j++)
{
if (temstr[i+j+1]==str1[j+1])
m++;
else
break;
}
if (m == k)
{
n=i;//n=i+k; 20060615
break;
}
}
}
for (i=number-k;i>=n;i--)
{
if (temstr[i]==str1[0])
{
m = 0;
for (j=0;j<k;j++)
{
if (temstr[i+j+1]==str1[j+1])
m++;
else
break;
}
if (m == k)
{
p=i;
if ((p-n)>400) continue ;
else break;
}
}
}
if (p>=n)
{
for(q=0;q<300;q++)
{
if (temstr[p+q+k+2]=='#') break;
}
}
if ((p+q-n)>500)
{
DispStr_E(0,3,"erro",DISP_POSITION|DISP_CLRSCR);
delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
memset(buff,0,500);
return ;
}
memcpy(buff,temstr+n,p+q+k-n);//memcpy(buff,temstr+n+i+2,q);
return ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -