【TI首届低功耗设计大赛】刷卡水表之程序略解续-
[复制链接]
上次那篇帖子可能程序贴的有点少,今天对主程序以及部分驱动做些略解,无法上传全部源码敬请各位谅解。
如果感兴趣可以下载上篇的驱动源码,自己只要稍微花点时间就可以搞定。本人做了些略解希望帮助各位理解
/*********************************************************/
主函数的代码如下主要做的事情如下
1.关看门狗,后调用PIN_set函数对相关IO的方向做一些设置并初始化。时钟部分由于并未
使用过于严格的时间设置现在先不做相关设置默认即可。
2.对各个模块经行初始化。
3.选择读卡模式。 后期还得考虑功耗问题(时间关系并没有加入低功耗模式)
/*********************************************************/
void main( void )
{
WDTCTL = WDTPW + WDTHOLD ; // 关看门狗
Pin_set( ); //IO的设置
Init_nfr240(); //NFR模块复位
PcdReset(); //复位RC522
PcdAntennaOn(); //开启天线发射
while(1)
{
/* Send1Char('>');
Send1Char('\n');
i=Get1Char();*/ //如果串口连接电脑的话可以通过电脑选择读卡模式
HandleConfigMenu(i); //选择读卡模式
}
}
/*******************************************
选择读卡模式选择自动读卡即可或者直接在主函数中
调用 Auto_Reader();
********************************************/
void HandleConfigMenu(uchar inputvalue)
{
switch(toupper(inputvalue))
{
case 'A':
Auto_Reader();
break;
case 'F':
Find_Card();
break;
default:
DisplayConfigMenu();
}
}
/*******************************************
自动读卡函数具体意义可以参考相关驱动源码
********************************************/
void Auto_Reader(void)
{
while(1)
{
if(PcdRequest(0x52,Temp)==MI_OK) // 调用寻卡函数并根据返回值选择卡的类型
{
if(Temp[0]==0x04&&Temp[1]==0x00)
PutString("MFOne-S50");
else if(Temp[0]==0x02&&Temp[1]==0x00)
PutString("MFOne-S70");
else if(Temp[0]==0x44&&Temp[1]==0x00)
PutString("MF-UltraLight");
else if(Temp[0]==0x08&&Temp[1]==0x00)
PutString("MF-Pro");
else if(Temp[0]==0x44&&Temp[1]==0x03)
PutString("MF Desire");
else
PutString("Unknown");
if(PcdAnticoll(UID)==MI_OK) //读卡的UID号
{
PutString0("Card Id is:"); //通过串口发送电脑
tochar(UID[0]);
tochar(UID[1]);
tochar(UID[2]);
tochar(UID[3]);
while (!(IFG1 & UTXIFG0));
TXBUF0 = '\n'; //发送换行指令
SPI_Write_Buf(TX_FIFO, UID, 4); //将UID通过NFR发送
}
}
后边的程序大家可以参考源码本人只是对一些重要的代码做些解释。
|