⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memcard.lst

📁 最流行的mifare卡读卡器全部源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 742          																			/*
 743          功能:写SLE4428卡保护位
 744          参数:
 745              iOffset:写入数据起始地址
 746          	sBuffer:写入数据指针
 747              iBufferLen:写入长度
 748          返回:
 749              TRUE
 750          																			*/
 751          bit write_pbit_sle4428(uint iOffset,uchar iBufferLen,uchar* sBuffer)
 752          {
 753   1      	uchar data i;
 754   1      	uint data ipOffset,iTemp;
 755   1      	uchar cTemp[2];
 756   1      	uchar* swBuffer;
 757   1      	if((iOffset<0)||(iOffset>1020))
 758   1      		return FALSE;
 759   1      	if((1021-iOffset)<iBufferLen)
 760   1      		return FALSE;
 761   1      	swBuffer=sBuffer;
 762   1      	ipOffset=iOffset;
 763   1      	answer_reset_4428();
 764   1      	for(i=0;i<iBufferLen;i++)
 765   1      	{
 766   2      		memcpy(cTemp,&ipOffset,2);
 767   2      		cTemp[0]=(cTemp[0]*64)|0x30;
 768   2      		byte_write_4428(cTemp[0]);
 769   2      		byte_write_4428(cTemp[1]);
 770   2      		byte_write_4428(*swBuffer++);
 771   2      		if(process_4428()!=TRUE)
 772   2      			return FALSE;
 773   2      		ipOffset++;
 774   2      	}
 775   1      	answer_reset_4428();
 776   1      	memcpy(cTemp,&iOffset,2);
 777   1      	cTemp[0]=(cTemp[0]*64)|0x0c;
 778   1      	byte_write_4428(cTemp[0]);
 779   1      	byte_write_4428(cTemp[1]);
 780   1      	byte_write_4428(0xff);
 781   1      	for(i=0;i<iBufferLen;i++)
 782   1      	{
 783   2      		iTemp=byte_read_wpbit_4428();
 784   2      		memcpy(cTemp,&iTemp,2);
 785   2      		if(cTemp[1]!=0x00)
 786   2      			return FALSE;
 787   2      		if(cTemp[0]!=*sBuffer++)
 788   2      			return FALSE;
 789   2      	}
 790   1      	return TRUE;
 791   1      }
 792          
 793          																			/*
 794          功能:比较SLE4428密码
 795          参数:
 796              sPassword:密码存放指针
 797              iPassLen:密码长度
 798          返回:
 799              TRUE
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 14  

 800          																			*/
 801          bit compare_password_sle4428(uchar* sPassword,uchar iPassLen)
 802          {
 803   1      	uchar cTemp;
 804   1      	if(iPassLen!=2)
 805   1      		return FALSE;
 806   1      	cTemp=error_counter_4428();
 807   1      	if(cTemp!=0x00)
 808   1      	{
 809   2      		switch(cTemp)
 810   2      		{
 811   3      		case 0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff:
 812   3      			{
 813   4      				cTemp=cTemp&0xfe;
 814   4      				break;
 815   4      			}
 816   3      		case 0x02,0x06,0x0e,0x1e,0x3e,0x7e,0xfe:
 817   3      			{
 818   4      				cTemp=cTemp&0xfc;
 819   4      				break;
 820   4      			}
 821   3      		case 0x04,0x0c,0x1c,0x3c,0x7c,0xfc:
 822   3      			{
 823   4      				cTemp=cTemp&0xf8;
 824   4      				break;
 825   4      			}
 826   3      		case 0x08,0x18,0x38,0x78,0xf8:
 827   3      			{
 828   4      				cTemp=cTemp&0xf0;
 829   4      				break;
 830   4      			}
 831   3      		case 0x10,0x30,0x70,0xf0:
 832   3      			{
 833   4      				cTemp=cTemp&0xe0;
 834   4      				break;
 835   4      			}
 836   3      		case 0x20,0x60,0xe0:
 837   3      			{
 838   4      				cTemp=cTemp&0xc0;
 839   4      				break;
 840   4      			}
 841   3      		case 0x40,0xc0:
 842   3      			{
 843   4      				cTemp=cTemp&0x80;
 844   4      				break;
 845   4      			}
 846   3      		case 0x80:
 847   3      			{
 848   4      				cTemp=cTemp&0x00;
 849   4      				break;
 850   4      			}
 851   3      		default:
 852   3      			{
 853   4      				return FALSE;
 854   4      			}
 855   3      		}
 856   2      	}
 857   1      	byte_write_4428(0xf2);
 858   1      	byte_write_4428(0xfd);
 859   1      	byte_write_4428(cTemp);
 860   1      	if(process_4428()!=TRUE)
 861   1      		return FALSE;
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 15  

 862   1      	byte_write_4428(0xcd);
 863   1      	byte_write_4428(0xfe);
 864   1      	byte_write_4428(*sPassword++);
 865   1      	if(process_4428()!=TRUE)
 866   1      		return FALSE;
 867   1      	byte_write_4428(0xcd);
 868   1      	byte_write_4428(0xff);
 869   1      	byte_write_4428(*sPassword);
 870   1      	if(process_4428()!=TRUE)
 871   1      		return FALSE;
 872   1      	byte_write_4428(0xf3);
 873   1      	byte_write_4428(0xfd);
 874   1      	byte_write_4428(0xff);
 875   1      	if(process_4428()!=TRUE)
 876   1      		return FALSE;
 877   1      	cTemp=error_counter_4428();
 878   1      	if(cTemp==0xff)
 879   1      		return TRUE;
 880   1      	return FALSE;
 881   1      }
 882          
 883          																			/*
 884          功能:读取SLE4428密码
 885          参数:
 886              sPassword:密码存放指针
 887              iPassLen:密码长度
 888          返回:
 889              TRUE
 890          																			*/
 891          bit read_password_sle4428(uchar* sPassword,uchar iPassLen)
 892          {
 893   1      	bit st;
 894   1      	if(iPassLen!=2)
 895   1      		return FALSE;
 896   1      	st=read_sle4428(1022,2,sPassword);
 897   1      	if(st!=1)
 898   1      		return FALSE;
 899   1      	return TRUE;
 900   1      }
 901          
 902          																			/*
 903          功能:更改SLE4428密码
 904          参数:
 905              iPassLen:密码数量
 906              sPassword:密码指针
 907          返回:
 908              TRUE
 909          																			*/
 910          bit change_password_sle4428(uchar* sPassword,uchar iPassLen)
 911          {
 912   1      	bit st;
 913   1      	if(iPassLen!=2)
 914   1      		return FALSE;
 915   1      	st=write_sle4428(1022,2,sPassword);
 916   1      	if(st!=1)
 917   1      		return FALSE;
 918   1      	return TRUE;
 919   1      }
 920          
 921          																			/*
 922          功能:读SLE4428错误计数器
 923          参数:无
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 16  

 924          返回:错误计数器值
 925          																			*/
 926          ///////////////////////////////////////////////////////////////////////////////////////
 927          ///////////以下为SLE4406的函数////////////////////////////////////////////////////////
 928          //////////////////////////////////////////////////////////////////////////////////////
 929          /*复位应答*/
 930          void reset_4406(void)
 931          {
 932   1      	RST=HIGH;
 933   1      	delay(DELAY_4406);
 934   1      	SCL = 0;
 935   1      	delay(DELAY_4406);
 936   1      	SCL = 1;
 937   1      	delay(DELAY_4406);
 938   1      	RST=LOW;
 939   1      	delay(DELAY_4406);
 940   1      }
 941          
 942          /*设置地址*/
 943          void address_setting_4406(uchar iOffset)
 944          {
 945   1      	uchar data i,j;
 946   1      	for(i=0;i<iOffset;i++)
 947   1      	{
 948   2      		for(j=0;j<8;j++)
 949   2      		{
 950   3      			SCL = 0;
 951   3      			delay(DELAY_4406);
 952   3      			SCL = 1;
 953   3      			delay(DELAY_4406);
 954   3      		}
 955   2      	}
 956   1      }
 957          //*******************************************************************************
 958          //读一字节
 959          uchar byte_read_4406(void)
 960          {
 961   1      	uchar data i,cTemp=0;
 962   1      	SDA=HIGH;
 963   1      	for(i=0;i<8;i++)
 964   1      	{
 965   2      		cTemp=cTemp*2;
 966   2      		if(SDA==HIGH)
 967   2      			cTemp++;
 968   2      		SCL = 0;
 969   2      		delay(DELAY_4406);
 970   2      		SCL = 1;
 971   2      		delay(DELAY_4406);
 972   2      	}
 973   1      	return cTemp;
 974   1      }
 975          
 976          //写一字节
 977          bit byte_write_4406(uchar cTemp)
 978          {
 979   1      	uchar data i;
 980   1      	for(i=0;i<8;i++)
 981   1      	{
 982   2      		if((cTemp&0x80)==0x80)
 983   2      		{
 984   3      			SDA=HIGH;
 985   3      			delay(DELAY_4406);
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 17  

 986   3      			if(SDA==LOW)
 987   3      				return FALSE;
 988   3      		}
 989   2      		else if((cTemp&0x80)==0x00)
 990   2      		{
 991   3      			SDA=LOW;
 992   3      			RST=HIGH;
 993   3      			delay(DELAY_4406);
 994   3      			RST=LOW;
 995   3      			delay(DELAY_4406);
 996   3      			SCL = 0;
 997   3      			delay(DELAY_4406);
 998   3      			SCL = 1;
 999   3      			delay(DELAY_4406);
1000   3      			SDA=HIGH;
1001   3      			delay(DELAY_4406);
1002   3      			if(SDA==HIGH)
1003   3      				return FALSE;
1004   3      		}
1005   2      		SCL = 0;
1006   2      		delay(DELAY_4406);
1007   2      		SCL = 1;
1008   2      		delay(DELAY_4406);
1009   2      		cTemp=cTemp<<1;
1010   2      	}
1011   1      	return TRUE;
1012   1      }
1013          
1014          
1015          /////////////////////////////////////////////////////////////////////////////////
1016          																				/*
1017          功能:读取sle4406中的数据
1018          参数:
1019          		 iOffset: 读取数据起始地址
1020          		iReadLen: 读取数据长度
1021          		 sBuffer: 读取数据存放地址
1022          返回:
1023          	操作状态
1024          																				*/
1025          bit read_sle4406(uchar  iOffset,uchar iReadLen,uchar* sBuffer)
1026          {
1027   1      	uchar data  i;
1028   1      	if(iOffset<0||iOffset>12)
1029   1      			return FALSE;
1030   1      	if((13-iOffset)<iReadLen)
1031   1      	    	return FALSE;
1032   1      	reset_4406();
1033   1      	address_setting_4406(iOffset);
1034   1      	for(i=0;i<iReadLen;i++)
1035   1      		*sBuffer++=byte_read_4406();
1036   1      	return TRUE;
1037   1      }
1038          
1039          																				/*
1040          功能:向sle4406中写入数据
1041          参数:
1042          		 iOffset: 写入数据起始地址
1043          		iReadLen: 写入数据长度
1044          		 sBuffer: 写入数据地址
1045          返回:
1046          	操作状态
1047          																				*/
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 18  

1048          bit write_sle4406(uchar iOffset,uchar iWriteLen,uchar* sBuffer)
1049          {
1050   1      	uchar data i;
1051   1      	if(iOffset<0||iOffset>12)
1052   1      		return FALSE;
1053   1      	if((13-iOffset)<iWriteLen)
1054   1      		return FALSE;
1055   1      	reset_4406();
1056   1      	address_setting_4406(iOffset);
1057   1      	for(i=0;i<iWriteLen;i++)
1058   1      		if(byte_write_4406(*sBuffer++)!=TRUE)
1059   1      			return FALSE;
1060   1      	return TRUE;
1061   1      }
1062          
1063          																				/*
1064          功能:读密码计数器值
1065          参数:无
1066          返回:
1067          	计数器值 0~8
1068          																				*/
1069          uchar password_counter_sle4406(void)
1070          {
1071   1      	uchar data  i;
1072   1      	uchar data  cTemp,counter=0;
1073   1      	reset_4406();
1074   1      	address_setting_4406(9);
1075   1      	cTemp=byte_read_4406();
1076   1      	for(i=0;i<8;i++)
1077   1      	{
1078   2      		if((cTemp&0x80)==0x80)
1079   2      			counter++;
1080   2      	    cTemp=cTemp<<1;
1081   2      	}
1082   1      	return counter;
1083   1      }
1084          																				/*
1085          功能:读取sle4406密码
1086          参数:
1087          		 sPassword: 读取密码存放指针
1088          		  iPassLen: 密码长度
1089          返回:
1090          	操作状态
1091          																				*/
1092          bit read_password_sle4406(uchar* sPassword)
1093          {
1094   1      	return(read_sle4406(10,3,sPassword));
1095   1      }
1096          
1097          																				/*
1098          功能:修改sle4406密码
1099          参数:
1100          		 sPassword: 读取密码存放指针
1101          		  iPassLen: 密码长度
1102          返回:
1103          	操作状态
1104          																				*/
1105          bit change_password_sle4406(uchar* sPassword)
1106          {
1107   1      	return(write_sle4406(10,3,sPassword));
1108   1      }
1109          
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 19  

1110          																				/*
1111          功能:校验sle4406密码
1112          参数:
1113          		 sPassword: 读取密码存放指针
1114          		  iPassLen: 密码长度
1115          返回:
1116          	操作状态

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -