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

📄 memcard.lst

📁 最流行的mifare卡读卡器全部源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
1492   2      		*sBuffer++=byte_read_4404();
1493   2      	}
1494   1      	return TRUE;
1495   1      }
1496          
1497          																					/*
1498          功能:向SLE4404中写入数据
1499          参数:
1500              iOffset:写入数据起始地址
1501              iReadLen:写入数据长度
1502              sBuffer:写入数据指针
1503          返回:
1504              操作状态
1505          																					*/
1506          bit write_sle4404(uchar iOffset,uchar iWriteLen,uchar* sBuffer)
1507          {
1508   1      	uchar data i;
1509   1      	if((iOffset<0)||((iOffset>7)&&(iOffset<11))||((iOffset>39)&&(iOffset<44))||(iOffset>51))
1510   1      		return FALSE;
1511   1      	if(
1512   1      		((iOffset>=0)&&(iOffset<=7)&&((8-iOffset)<iWriteLen))||
1513   1      		((iOffset>=11)&&(iOffset<=39)&&((40-iOffset)<iWriteLen))||
1514   1      		((iOffset>=44)&&(iOffset<=51)&&((52-iOffset)<iWriteLen))
1515   1      	  )
1516   1      		return FALSE;
1517   1      	answer_reset_4404();
1518   1      	address_setting_4404(iOffset);
1519   1      	for(i=0;i<iWriteLen;i++)
1520   1      	{
1521   2      		if(byte_write_4404_b(*sBuffer++)!=TRUE)
1522   2      		{
1523   3      			return FALSE;
1524   3      		}
1525   2      	}
1526   1      	return TRUE;
1527   1      }
1528          /*功能:读SLE4404错误计数器
1529          参数:无
1530          返回:错误计数器值
1531          																			*/
1532          uchar error_counter_sle4404(void)
1533          {
1534   1      	uchar data cTemp,counter;
1535   1      	uchar data i;
1536   1      	answer_reset_4404();
1537   1      	address_setting_4404(10);
1538   1      	cTemp=byte_read_4404();
1539   1      	cTemp=cTemp&0xf0;
1540   1      	counter=0;
1541   1      	for(i=0;i<4;i++)
1542   1      	{
1543   2      		if((cTemp&0x80)==0x80)
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 26  

1544   2      		{
1545   3      			counter++;
1546   3      		}
1547   2      		cTemp<<=1;
1548   2      	}
1549   1      	return counter;
1550   1      }
1551          
1552          																			/*
1553          功能:比较SLE4404密码
1554          参数:
1555              sPassword:密码存放指针
1556              iPassLen:密码长度
1557          返回:
1558              操作状态
1559          																			*/
1560          bit compare_password_sle4404(uchar* sPassword,uchar iPassLen)
1561          {
1562   1      	uchar data i,j;
1563   1      	uchar data cTemp;
1564   1      	if(iPassLen!=2)
1565   1      		return FALSE;
1566   1      	answer_reset_4404();
1567   1      	address_setting_4404(7);
1568   1      	for(i=0;i<7;i++)
1569   1      	{
1570   2      		SCL = 0;
1571   2      		delay(DELAY_CLK_4404);
1572   2      		SCL = 1;
1573   2      		delay(DELAY_CLK_4404);
1574   2      	}
1575   1      	for(i=0;i<2;i++)
1576   1      	{
1577   2      		cTemp=sPassword[i];
1578   2      		for(j=0;j<8;j++)
1579   2      		{
1580   3      			SCL = 0;
1581   3      			if((cTemp&0x80)==0x00)
1582   3      			{
1583   4      				SDA=LOW;
1584   4      			}
1585   3      			else
1586   3      			{
1587   4      				SDA=HIGH;
1588   4      			}
1589   3      			delay(DELAY_CLK_4404);
1590   3      			SCL = 1;
1591   3      			delay(DELAY_CLK_4404);
1592   3      			cTemp=cTemp<<1;
1593   3      		}
1594   2      	}
1595   1      	for(i=0;i<4;i++)
1596   1      	{
1597   2      		SCL = 0;
1598   2      		delay(DELAY_CLK_4404);
1599   2      		SCL = 1;
1600   2      		delay(DELAY_CLK_4404);
1601   2      		SDA=HIGH;
1602   2      		delay(DELAY_CLK_4404);
1603   2      		if(SDA==HIGH)
1604   2      		{
1605   3      			SDA=LOW;
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 27  

1606   3      			ICP=HIGH;
1607   3      			delay(DELAY_CLK_4404);
1608   3      			SCL = 0;
1609   3      			delay(DELAY_CLK_4404);
1610   3      			SCL = 1;
1611   3      			delay(DELAY_CLK_4404);
1612   3      			ICP=LOW;
1613   3      			delay(DELAY_CLK_4404);
1614   3      			byte_erase_4404();
1615   3      			if(error_counter_sle4404()==4)
1616   3      			{
1617   4      				return TRUE;
1618   4      			}
1619   3      			else
1620   3      			{
1621   4      				return FALSE;
1622   4      			}
1623   3      		}
1624   2      	}
1625   1      	return FALSE;
1626   1      }
1627          
1628          																			/*
1629          
1630          																			/*
1631          功能:读取SLE4404密码
1632          参数:
1633              sPassword:密码存放指针
1634              iPassLen:密码长度,取值为2
1635          返回:
1636              操作状态
1637          																			*/
1638          bit read_password_sle4404(uchar *sPassword,uchar iPassLen)
1639          {
1640   1      	if(iPassLen!=2)
1641   1      		return FALSE;
1642   1      	read_sle4404(8,2,sPassword);
1643   1      	return TRUE;
1644   1      }
1645          
1646          
1647          																					/*
1648          功能:擦除
1649          参数:
1650          		iOffset: 擦除起始地址
1651          		 iEraseLen: 擦除长度
1652          返回:
1653          	操作状态
1654          																					*/
1655          bit erase_sle4404(uchar iOffset,uchar iEraseLen)
1656          {
1657   1      	uchar data i;
1658   1      	if((iOffset<0)||((iOffset>13)&&(iOffset<40))||(iOffset>51))
1659   1      		return FALSE;
1660   1      	if(
1661   1      		((iOffset>=0)&&(iOffset<=13)&&((14-iOffset)<iEraseLen))||
1662   1      		((iOffset>=40)&&(iOffset<=51)&&((52-iOffset)<iEraseLen))
1663   1      	  )
1664   1      		return FALSE;
1665   1      	answer_reset_4404();
1666   1      	address_setting_4404(iOffset);
1667   1      	for(i=0;i<iEraseLen;i++)
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 28  

1668   1      		byte_erase_4404();
1669   1      	return TRUE;
1670   1      }
1671          																			/*
1672          功能:更改SLE4404密码
1673          参数:
1674              iPassLen:密码长度
1675              sPassword:密码指针
1676          返回:
1677              TRUE
1678          																			*/
1679          bit change_password_sle4404(uchar* sPassword,uchar iPassLen)
1680          {
1681   1      	uchar data i;
1682   1      	if(iPassLen!=2)
1683   1      		return FALSE;
1684   1      	if(erase_sle4404(8,2)!=TRUE)
1685   1      		return FALSE;
1686   1      	answer_reset_4404();
1687   1      	address_setting_4404(8);
1688   1      	for(i=0;i<iPassLen;i++)
1689   1      		byte_write_4404_a(*sPassword++);
1690   1      	return TRUE;
1691   1      }
1692          
1693          																					/*
1694          功能:校验应用区整体擦除密码
1695          参数:
1696          		sPassword: 密码指针
1697          		 iPassLen:密码长度,取值为4
1698          返回:
1699          	操作状态
1700          																					*/
1701          bit compare_erase_password_sle4404(uchar *sPassword,uchar iPassLen)
1702          {
1703   1      	uchar data i,j;
1704   1      	uchar data cTemp;
1705   1      	if(iPassLen!=4)
1706   1      		return FALSE;
1707   1      	answer_reset_4404();
1708   1      	address_setting_4404(39);
1709   1      	for(i=0;i<7;i++)
1710   1      	{
1711   2      		SCL = 0;
1712   2      		delay(DELAY_CLK_4404);
1713   2      		SCL = 1;
1714   2      		delay(DELAY_CLK_4404);
1715   2      	}
1716   1      	for(i=0;i<4;i++)
1717   1      	{
1718   2      		cTemp=sPassword[i];
1719   2      		for(j=0;j<8;j++)
1720   2      		{
1721   3      			SCL = 0;
1722   3      			if((cTemp&0x80)==0x80)
1723   3      			{
1724   4      				SDA=HIGH;
1725   4      			}
1726   3      			else
1727   3      			{
1728   4      				SDA=LOW;
1729   4      			}
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 29  

1730   3      			delay(DELAY_CLK_4404);
1731   3      			SCL = 1;
1732   3      			delay(DELAY_CLK_4404);
1733   3      			cTemp=cTemp<<1;
1734   3      		}
1735   2      	}
1736   1      	for(i=0;i<64;i++)
1737   1      	{
1738   2      		SCL = 0;
1739   2      		delay(DELAY_CLK_4404);
1740   2      		SCL = 1;
1741   2      		delay(DELAY_CLK_4404);
1742   2      		SDA=HIGH;
1743   2      		delay(DELAY_CLK_4404);
1744   2      		if(SDA==HIGH)
1745   2      		{
1746   3      			SDA=LOW;
1747   3      			ICP=HIGH;
1748   3      			delay(DELAY_CLK_4404);
1749   3      			SCL = 0;
1750   3      			delay(DELAY_CLK_4404);
1751   3      			SCL = 1;
1752   3      			delay(DELAY_CLK_4404);
1753   3      			ICP=LOW;
1754   3      			delay(DELAY_CLK_4404);
1755   3      			byte_erase_4404();
1756   3      			return TRUE;
1757   3      		}
1758   2      	}
1759   1      	return FALSE;
1760   1      }
1761          
1762          																			/*
1763          功能:读取SLE4404擦除密码
1764          参数:
1765              sPassword:擦除密码存放指针
1766              iPassLen:擦除密码长度,取值为4
1767          返回:
1768              操作状态
1769          																			*/
1770          bit read_erase_password_sle4404(uchar* sPassword,uchar iPassLen)
1771          {
1772   1      	if(iPassLen!=4)
1773   1      		return FALSE;
1774   1      	read_sle4404(40,4,sPassword);
1775   1      	return TRUE;
1776   1      }
1777          
1778          																			/*
1779          功能:读取擦除计数
1780          参数:
1781          		无
1782          返回:
1783          	计数器值
1784          																			*/
1785          uchar read_erase_counter_sle4404(void)
1786          {
1787   1      	uchar data i,j;
1788   1      	uchar idata cTemp[8],counter;
1789   1      	read_sle4404(40,8,cTemp);
1790   1      	counter=0;
1791   1      	for(i=0;i<8;i++)
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 30  

1792   1      	{
1793   2      		for(j=0;j<8;j++)
1794   2      		{
1795   3      			if((cTemp[i]&0x80)==0x80)
1796   3      			{
1797   4      				counter++;
1798   4      			}
1799   3      			cTemp[i]*=2;
1800   3      		}
1801   2      	}
1802   1      	return counter;
1803   1      }
1804          
1805          																					/*
1806          功能:修改应用区擦除密码
1807          参数:
1808          		sPassword: 密码指针
1809          		 iPassLen: 密码长度
1810          返回:
1811          	操作状态
1812          																					*/
1813          bit change_erase_password_sle4404(uchar *sPassword,uchar iPassLen)
1814          {
1815   1      	uchar data i;
1816   1      	if(iPassLen!=4)
1817   1      		return FALSE;
1818   1      	if(erase_sle4404(40,4)!=TRUE)
1819   1      		return FALSE;
1820   1      	answer_reset_4404();
1821   1      	address_setting_4404(40);
1822   1      	for(i=0;i<iPassLen;i++)
1823   1      		byte_write_4404_a(*sPassword++);
1824   1      	return TRUE;
1825   1      }
1826          
1827          																					/*
1828          功能:清除写保护位(置0)
1829          参数:
1830          		无
1831          返回:
1832          	操作状态
1833          																					*/
1834          bit clr_wpbit_sle4404(void)
1835          {
1836   1      	uchar data cTemp;
1837   1      	answer_reset_4404();
1838   1      	address_setting_4404(14);
1839   1      	cTemp=byte_read_4404();
1840   1      	cTemp=cTemp&0x7f;
1841   1      	answer_reset_4404();
1842   1      	address_setting_4404(14);
1843   1      	byte_erase_4404();
1844   1      	answer_reset_4404();
1845   1      	address_setting_4404(14);
1846   1      	if(byte_write_4404_b(cTemp)!=TRUE)
1847   1      		return FALSE;
1848   1      	return TRUE;
1849   1      }
1850          
1851          																					/*
1852          功能:清除读保护位(置0)
1853          参数:
C51 COMPILER V6.12  MEMCARD                                                                12/09/2002 13:03:11 PAGE 31  

1854          		无
1855          返回:
1856          	操作状态
1857          																					*/
1858          bit clr_rpbit_sle4404(void)
1859          {
1860   1      	uchar data cTemp;
1861   1      	answer_reset_4404();
1862   1      	address_setting_4404(14);
1863   1      	cTemp=byte_read_4404();
1864   1      	cTemp=cTemp&0xbf;
1865   1      	answer_reset_4404();
1866   1      	address_setting_44

⌨️ 快捷键说明

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