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

📄 memcard.lst

📁 最流行的mifare卡读卡器全部源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
1117          																				*/
1118          bit compare_password_sle4406(uchar* sPassword)
1119          {
1120   1      	uchar data i,j,k;
1121   1      	uchar data cTemp;
1122   1      	reset_4406();
1123   1      	address_setting_4406(9);
1124   1      	SDA=HIGH;
1125   1      	for(i=0;i<7;i++)
1126   1      	{
1127   2      		if(SDA==HIGH)
1128   2      		{
1129   3      			RST=HIGH;
1130   3      			delay(DELAY_4406);
1131   3      			RST=LOW;
1132   3      			delay(DELAY_4406);
1133   3      			SCL = 0;
1134   3      			delay(DELAY_4406);
1135   3      			SCL = 1;
1136   3      			delay(DELAY_4406);
1137   3      			for(;i<7;i++)
1138   3      			{
1139   4      				SCL = 0;
1140   4      				delay(DELAY_4406);
1141   4      				SCL = 1;
1142   4      				delay(DELAY_4406);
1143   4      			}
1144   3      			for(j=0;j<3;j++)
1145   3      			{
1146   4      				cTemp=*sPassword++;
1147   4      				for(k=0;k<8;k++)
1148   4      				{
1149   5      					SCL = 0;
1150   5      					if((cTemp&0x80)==0x80)
1151   5      						SDA=HIGH;
1152   5      					else
1153   5      						SDA=LOW;
1154   5      					delay(DELAY_4406);
1155   5      					SCL = 1;
1156   5      					delay(DELAY_4406);
1157   5      					cTemp=cTemp<<1;
1158   5      				}
1159   4      			}
1160   3      			SCL = 0;
1161   3      			delay(DELAY_4406);
1162   3      			SCL = 1;
1163   3      			delay(DELAY_4406);
1164   3      			return TRUE;
1165   3      		}
1166   2      		else
1167   2      		{
1168   3      			SCL = 0;
1169   3      			delay(DELAY_4406);
1170   3      			SCL = 1;
1171   3      			delay(DELAY_4406);
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 20  

1172   3      		}
1173   2      	}
1174   1      	return TRUE;
1175   1      }
1176          
1177          																				/*
1178          功能:带借位擦除sle4406中的一个字节
1179          参数:
1180          		 iOffset: 要擦除字节的前一字节地址
1181          				即,iOffset字节中某一位置0 ,而 iOffset+1 字节置0xff
1182          返回:
1183          	操作状态
1184          																				*/
1185          bit erase_with_carry_sle4406(uchar iOffset)
1186          {
1187   1      	uchar data  i,j;
1188   1      	if(iOffset<8||iOffset>12)
1189   1      		return FALSE;
1190   1      	reset_4406();
1191   1      	address_setting_4406(iOffset);
1192   1      	if(iOffset==8)
1193   1      	{
1194   2      		i=7;
1195   2      		SCL = 0;
1196   2      		delay(DELAY_4406);
1197   2      		SCL = 1;
1198   2      		delay(DELAY_4406);
1199   2      	}
1200   1      	else
1201   1      		i=8;
1202   1      	SDA=HIGH;
1203   1      	for(j=0;j<i;j++)
1204   1      	{
1205   2      		if(SDA==HIGH)
1206   2      		{
1207   3      			RST=HIGH;
1208   3      			delay(DELAY_4406);
1209   3      			RST=LOW;
1210   3      			delay(DELAY_4406);
1211   3      			SCL = 0;
1212   3      			delay(DELAY_4406);
1213   3      			SCL = 1;
1214   3      			delay(DELAY_4406);
1215   3      			RST=HIGH;
1216   3      			delay(DELAY_4406);
1217   3      			RST=LOW;
1218   3      			delay(DELAY_4406);
1219   3      			SCL = 0;
1220   3      			delay(DELAY_4406);
1221   3      			SCL = 1;
1222   3      			delay(DELAY_4406);
1223   3      			return TRUE;
1224   3      		}
1225   2      		SCL = 0;
1226   2      		delay(DELAY_4406);
1227   2      		SCL = 1;
1228   2      		delay(DELAY_4406);		
1229   2      	}
1230   1      	return FALSE;
1231   1      }
1232          
1233          																				/*
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 21  

1234          功能:个人化
1235          参数:无
1236          返回:
1237          	操作状态
1238          																				*/
1239          bit personal_sle4406(void)
1240          {
1241   1      	uchar data cTemp;
1242   1      	reset_4406();
1243   1      	address_setting_4406(8);
1244   1      	cTemp=byte_read_4406();
1245   1      	cTemp=cTemp&0x7f;
1246   1      	reset_4406();
1247   1      	address_setting_4406(8);
1248   1      	return(byte_write_4406(cTemp));
1249   1      }
1250          //////////////////////////////////////////////////////////////////////////////////////
1251          //////////////////////以下为SLE4404的函数/////////////////////////////////////////////
1252          //////////////////////////////////////////////////////////////////////////////////////
1253          #include <stdio.h>
1254          #include <string.h>
1255          //复位应答
1256          void answer_reset_4404(void)
1257          {
1258   1      	delay(DELAY_CLK_4404);
1259   1      	RST=LOW;
1260   1      	delay(DELAY_CLK_4404);
1261   1      	ICP=LOW;
1262   1      	delay(DELAY_CLK_4404);
1263   1      	SCL=HIGH;
1264   1      	delay(DELAY_CLK_4404);
1265   1      	RST=HIGH;
1266   1      	delay(DELAY_CLK_4404);
1267   1      	RST=LOW;
1268   1      	delay(DELAY_CLK_4404);
1269   1      	return;
1270   1      }
1271          
1272          //设置地址
1273          void address_setting_4404(uchar iOffset)
1274          {
1275   1      	uchar data i,j;
1276   1      	RST=LOW;
1277   1      	delay(DELAY_CLK_4404);
1278   1      	if(iOffset!=0)
1279   1      	{
1280   2      		for(i=0;i<iOffset;i++)
1281   2      		{
1282   3      			for(j=0;j<8;j++)
1283   3      			{
1284   4      				SCL = 0;
1285   4      				delay(DELAY_CLK_4404);
1286   4      				SCL = 1;
1287   4      				delay(DELAY_CLK_4404);
1288   4      			}
1289   3      		}
1290   2      	}
1291   1      	return;
1292   1      }
1293          
1294          //读一字节()
1295          
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 22  

1296          uchar byte_read_4404(void)
1297          {
1298   1      	uchar data i,cTemp;
1299   1      	//RST=LOW;
1300   1      	SDA=HIGH;
1301   1      	cTemp=0x00;
1302   1      	for(i=0;i<8;i++)
1303   1      	{
1304   2      		cTemp*=2;
1305   2       		if(SDA==1)
1306   2      		{
1307   3      			cTemp++; 
1308   3      		}		
1309   2      		SCL=0;//high;
1310   2      		delay(DELAY_CLK_4404);
1311   2      		SCL=1;
1312   2      		delay(DELAY_CLK_4404);
1313   2      	}
1314   1      	return cTemp;
1315   1      }
1316          
1317          //写入一字节(b)
1318          bit byte_write_4404_b(uchar cTemp)
1319          {
1320   1      	uchar i;
1321   1      	RST=LOW;
1322   1      	for(i=0;i<8;i++)
1323   1      	{
1324   2      		SDA=HIGH;
1325   2      		if(((cTemp&0x80)==0x80)&&(SDA==LOW))
1326   2      		{
1327   3      			return FALSE;
1328   3      		}
1329   2      		else if(((cTemp&0x80)==0x00)&&(SDA==HIGH))
1330   2      		{
1331   3      			SDA=LOW;
1332   3      			ICP=HIGH;
1333   3      			delay(DELAY_CLK_4404);
1334   3      			SCL = 0;
1335   3      			delay(DELAY_CLK_4404);
1336   3      			SCL = 1;
1337   3      			delay(DELAY_CLK_4404);
1338   3      			ICP=LOW;
1339   3      			SDA=HIGH;
1340   3      			delay(DELAY_CLK_4404);
1341   3      			if(SDA==HIGH)
1342   3      			{
1343   4      				return FALSE;
1344   4      			}
1345   3      		}
1346   2      		SCL = 0;
1347   2      		delay(DELAY_CLK_4404);
1348   2      		SCL = 1;
1349   2      		delay(DELAY_CLK_4404);
1350   2      		cTemp=cTemp<<1;
1351   2      	}
1352   1      	return TRUE;
1353   1      }
1354          
1355          //写入一字节(a)(写密码位)
1356          void byte_write_4404_a(unsigned char cTemp)
1357          {
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 23  

1358   1      	uchar i;
1359   1      	RST=LOW;
1360   1      	for(i=0;i<8;i++)
1361   1      	{
1362   2      		if((cTemp&0x80)==0x00)
1363   2      		{
1364   3      			SDA=LOW;
1365   3      			ICP=HIGH;
1366   3      			delay(DELAY_CLK_4404);
1367   3      			SCL = 0;
1368   3      			delay(DELAY_CLK_4404);
1369   3      			SCL = 1;
1370   3      			delay(DELAY_CLK_4404);
1371   3      			ICP=LOW;
1372   3      			delay(DELAY_CLK_4404);
1373   3      		}
1374   2      		SCL = 0;
1375   2      		delay(DELAY_CLK_4404);
1376   2      		SCL = 1;
1377   2      		delay(DELAY_CLK_4404);
1378   2      		cTemp=cTemp<<1;
1379   2      	}
1380   1      	return;
1381   1      }
1382          
1383          //擦除一字节
1384          void byte_erase_4404(void)
1385          {
1386   1      	uchar i;
1387   1      	RST=LOW;
1388   1      	SDA=HIGH;
1389   1      	ICP=HIGH;
1390   1      	delay(DELAY_CLK_4404);
1391   1      	SCL = 0;
1392   1      	delay(DELAY_CLK_4404);
1393   1      	SCL = 1;
1394   1      	delay(DELAY_CLK_4404);
1395   1      	ICP=LOW;
1396   1      	delay(DELAY_CLK_4404);
1397   1      	SCL = 0;
1398   1      	delay(DELAY_CLK_4404);
1399   1      	SCL = 1;
1400   1      	delay(DELAY_CLK_4404);
1401   1      	for(i=0;i<7;i++)
1402   1      	{
1403   2      		SCL = 0;
1404   2      		delay(DELAY_CLK_4404);
1405   2      		SCL = 1;
1406   2      		delay(DELAY_CLK_4404);
1407   2      	}
1408   1      	return;
1409   1      }
1410          
1411          ///////////////////////////////////////////////////////////////////////////////////////
1412          																					/*
1413          功能:个人化
1414          参数:
1415          		无
1416          返回:
1417          		操作状态
1418          																					*/
1419          bit personal_sle4404(void)
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 24  

1420          {
1421   1      	uchar data i;
1422   1      	answer_reset_4404();
1423   1      	address_setting_4404(62);
1424   1      	for(i=0;i<4;i++)
1425   1      	{
1426   2      		SCL = 0;
1427   2      		delay(DELAY_CLK_4404);
1428   2      		SCL = 1;
1429   2      		delay(DELAY_CLK_4404);
1430   2      	}
1431   1      	SDA=LOW;
1432   1      	ICP=HIGH;
1433   1      	delay(DELAY_CLK_4404);
1434   1      	SCL = 0;
1435   1      	delay(DELAY_CLK_4404);
1436   1      	SCL = 1;
1437   1      	delay(DELAY_CLK_4404);
1438   1      	ICP=LOW;
1439   1      	delay(DELAY_CLK_4404);
1440   1      	return TRUE;
1441   1      }
1442          
1443          /***************************************************
1444          功能:模拟个人化
1445          参数:
1446          		operation: 0--模拟个人化	1--取消模拟
1447          返回:
1448          		操作状态                                   
1449          ***************************************************/
1450          bit fake_sle4404(uchar operation)
1451          {
1452   1      	if(operation==0)
1453   1      	{
1454   2      		ICT=LOW;
1455   2      		return TRUE;
1456   2      	}
1457   1      	else if(operation==1)
1458   1      	{
1459   2      		ICT=HIGH;
1460   2      		return TRUE;
1461   2      	}
1462   1      	else
1463   1      	{
1464   2      		return FALSE;
1465   2      	}
1466   1      }
1467          
1468          																					/*
1469          功能:从SLE4404中读取数据
1470          参数:
1471              iOffset:读取数据起始地址
1472              iReadLen:读取数据长度
1473              sBuffer:读取数据指针
1474          返回:
1475              操作状态
1476          																					*/
1477          bit read_sle4404(uchar iOffset,uchar iReadLen,uchar *sBuffer)
1478          {
1479   1      	uchar data i;
1480   1      	if((iOffset<0)||(iOffset>51))
1481   1      	{
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 25  

1482   2      		return FALSE;
1483   2      	}
1484   1      	if((52-iOffset)<iReadLen)
1485   1      	{
1486   2      		return FALSE;
1487   2      	}
1488   1      	answer_reset_4404();
1489   1      	address_setting_4404(iOffset);
1490   1      	for(i=0;i<iReadLen;i++)
1491   1      	{

⌨️ 快捷键说明

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