2299|0

639

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【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发送                 
      }
}
后边的程序大家可以参考源码本人只是对一些重要的代码做些解释。


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表