1. #include "variable.h"
2. #include"delay.h"
3. #include "KEY.h"
4. #include "UART.h"
5. #include "IC_w_r.h"
6. void Initial()
7. {
8. CLKCONCMD &= ~0x40; //设置系统时钟源为 32MHZ 晶振
9. while(CLKCONSTA & 0x40); //等待晶振稳定为 32M
10. CLKCONCMD &= ~0x47; //设置系统主时钟频率为 32MHZ
11. UartInitial();
12.
13. …
14. …
IC_SCK = 1;
IC_CS = 1;
15. }
16. void IC_test()
17. {
18. uint
19. uchar qq[4];
20. uchar find=0xaa;
21. uchar ar;
22.
23. while(1)
24. {
25. /***16 进制转 ASC 码*****/
26. uchar
27. asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','
D','E','F'},i;
28. uchar Card_Id[8]; //存放 32 位卡号
29. ar = PcdRequest(0x52,qq);//寻卡
30. if(ar != 0x26)
31. ar = PcdRequest(0x52,qq);
32. if(ar != 0x26)
33. find = 0xaa;
34. if((ar == 0x26)&&(find == 0xaa))
35. {
36. if(PcdAnticoll(qq) == 0x26);//防冲撞
37. {
38. UartSend_String("The Card ID is: ",16);
39.
40. /****16 进制转 ASC 码********/
41. for(i=0;i<4;i++)
42. {
43. Card_Id[i*2]=asc_16[qq[i]/16];
44. Card_Id[i*2+1]=asc_16[qq[i]%16];
45. }
46. UartSend_String(Card_Id,8); //打印 IC 卡号
47. UartSend_String("\n",1);
48. find = 0x00;
49. }
50. }
51. }
52. }
53. void main()
54. {
55. Initial();
56. PcdReset();
57. M500PcdConfigISOType('A'); //设置工作方式
58. while(1)
59. {
60. IC_test();//IC 卡检测
}
61. }
我们留意主函数代码:
第 55~56 行:初始化工作。
第 57 行:设置 IC 卡模块工作方式。
第 60 行:检测 IC 卡。
大家可以在工程里进入具体函数看代码,理解 IC 卡初始化及读取卡号的过程。
|