#include<>#include<>#include<>#defineucharunsignedchar#defineuintunsignedintucharFbuff[16]; //发送FIFO缓存ucharJbuff[16]; //接收FIFO缓存ucharUID[7]; //卡型及卡号ucharData[4]; //按键值存储区ucharcodeseg[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管段选对应0~fucharcount=0 ; //按键回传的值ucharshuaka,chongzhi,keyflag=0;sbitk2=P3^5; //充值‘加值键(实现加1或者加10)sbitk3=P3^2; //刷卡’减值键(实现减1或者减10)sbitk4=P3^3; //确认键sbitnWR=P2^4; //74hc373片选/*****************1702函数声明**************************/ucharspi(ucharm);voidfifo_clear();voidresig_write(ucharreg,ucharda);ucharresig_read(ucharreg);ucharfifo_read(ucharcount,uchar*s);voidfifo_write(ucharcount,uchar*s);ucharinti_1702();voidcard_halt();ucharrequest();ucharcard_anticoll();ucharcard_select();ucharcard_authtication(ucharm) ;ucharcard_read(ucharm);ucharcard_write(ucharm);ucharloadkey();voiddelay(ucharm);/********************按键显示函数声明***************/voiddisplay();voidkeyscan();voiddata1deal();voiddata2deal(ucharm);voidlcdclear();/***********************子函数解释******************//*********************************************************///解释:这是spi总线的读写时序,所有的寄存器操作基于此时序,非常重要//////输入:要写入的16进制参数//////输出:内部传回的16进制参数///********************************************************/ucharspi(ucharm){ uchari,temp=0; for(i=0;i<8;i++) { sck=0; if(m&0x80) mosi=1; else mosi=0; m<<=1; sck=1; temp<<=1; if(miso) temp|=0x01; } sck=0; mosi=0; returntemp;}/*********************************************************///解释:写寄存器函数//////输入:寄存器地址以及要写入的参数//////输出:////注意!!在所有的资料中都没有给出寄存器寻址时的格式,下边的有,看仔细了,如果连寄存器都找不到,后边的就不用看了/********************************************************/voidresig_write(ucharreg,ucharda){ sck=0; reg<<=1; cs=0; reg=reg&0x7e; spi(reg); spi(da); cs=1;}/*********************************************************///解释:读寄存器函数//////输入:寄存器地址//////输出:该寄存器目前的值////注意!!读写寄存器时指令不一样,仔细看。/********************************************************/ucharresig_read(ucharreg){ uchartemp; sck=0; _nop_(); _nop_(); cs=0; reg<<=1; reg|=0x80
基于51的FM1702射频卡程序 来自淘豆网www.taodocs.com转载请标明出处.