历史上的今天
返回首页

历史上的今天

今天是:2025年07月24日(星期四)

正在发生

2020年07月24日 | MSP430F149单片机实现公交卡/饭卡充值功能模块

2020-07-24 来源:51hei

实验目的

1.   最基础实现刷卡后显示冲值/扣款说明

2.   实现芯片内部寄存器的读写,实现可记忆性。


设计思路

根据M1射频卡与读写器的通讯过程,程序设计基本流程如下:

1569221583(1).jpg?imageView2/2/w/550

主函数架构:

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD; // 关看门狗

  int i = 0;

  unsigned char status;

  BoardConfig(0xf0);

  Init_Port();

  InitUART();

  Port_init();   //系统初始化,设置IO口属性

  delay_ms(100); //延时100ms

  LCD_init();    //液晶参数初始化设置

  LCD_clear();   //清屏

  LCD_Desk1();

  _EINT();

  PcdReset();     //复位RC522

  PcdAntennaOn(); //开启天线发射

  while (1)

  {

    status = PcdRequest(PICC_REQIDL, Temp); ////寻卡,输出为卡类型

    if (status == MI_OK)

      status = PcdAnticoll(UD); //防冲撞处理,输出卡片序列号,4字节

    if (status == MI_OK)

      status = PcdSelect(UD); //选择卡片,输入卡片序列号,4字节

    if (status == MI_OK)

      status = PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UD); //在进行读写操作之前需要先进行认证

    if (status == MI_OK)

      status == incharg();//读

    if (status == MI_OK)

    {

      status = PcdWrite(1,money_ok);//充钱

      memset(money_ok,0,sizeof(money_ok));

      break;

     }

    }

      LCD_clear(); //清屏

      LCD_Desk3();  

      led();

  }


其中

status == incharg();//读

incharg 函数

这一部分是自己编写用于读写存储器内容,并且进行数据类型转换功能的函数。

char incharg(void)

{

  unsigned char g_ucTempbuf[20];

  unsigned char num;

  unsigned char temp1[10];

  unsigned char temp2[5];

  unsigned char status2;

  long int sum = 0;               //充值后整数部分的额度

  long int re;


  temp1[0] = '';

  temp2[0] = '';

  memset(money, 0, sizeof(money)); //清空钱包临时数组

  status2 = PcdRead(1, g_ucTempbuf);//读块2部分

  if (status2 == MI_OK)

  {

    for (num = 0; num < 2; num++)

    {

      money[num] = g_ucTempbuf[1 - num];//存储芯片寄存器读出来的内容,并且调换高低位(因为存储的时候,按照低位在前的顺序)

    }

    itoa(money[0], temp1, 16);       //十六进制数值转十六进制字符串(字符串无法进行计算)

    itoa(money[1], temp2, 16);       //十六进制数值转十六进制字符串(字符串无法进行计算)

    strcat(temp1, temp2);            //将两个char类型连接。输出temp1=temp1temp2

    inteDec = str_dec(temp1);        //余额整数 十六进制字符串转十进制数

    temp1[0] = '';                 // 字符常量占一个字节的内存空间

    temp2[0] = '';                 // 字符常量占一个字节的内存空间

    memset(money, 0, sizeof(money)); //将money中当前位置后面清零 。

    sum = inputnum + inteDec; //充值后余额整数部分之和

    re = sum;

    Int_char(re);            //十进制转字符串

    led();                   //led灯亮

    LCD_clear();             //清屏

    LCD_Desk2();             //lcd显示正在充值

    while (Result[i] != '')

    {

     LCD_write_str(Result); //lcd显示10进制字符串

     i++;

    }

    delay_ms(1800);

  }

    if(sum<65536)              //将充值完毕的余额总数再次存储到寄存器内。

  {

    itoa(sum,money_inch_hex,16);     //10进制数值转为16进制字符串,整数部分

    i=strlen(money_inch_hex);

    switch(i)

    {

    case 0:

      for(num=0;num<4;num++)

      {

        money_inch_hex[num]='0';

      }

      money_inch_hex[4]='';

      break;

    case 1:

      money_inch_hex[4]='';

      money_inch_hex[3]=money_inch_hex[0];

      money_inch_hex[2]='0';

      money_inch_hex[1]='0';

      money_inch_hex[0]='0';

      break;

    case 2:

      money_inch_hex[4]='';

      money_inch_hex[3]=money_inch_hex[1];

      money_inch_hex[2]=money_inch_hex[0];

      money_inch_hex[1]='0';

      money_inch_hex[0]='0';

      break;

    case 3:

      money_inch_hex[4]='';

      money_inch_hex[3]=money_inch_hex[2];

      money_inch_hex[2]=money_inch_hex[1];

      money_inch_hex[1]=money_inch_hex[0];

      money_inch_hex[0]='0';

      break;

    }

    StringToHex(money_i, money_inch_hex);   //16进制字符串转为16进制字节数组

    for(num=0;num<2;num++)         //置高位在前

    {

      money_ok[num]=money_i[1-num];

    }

  }


return status2;  //返回判断值


函数功能基本实现,因为是实现充值功能,所以为了防止连续多次充值,在主函数最后设置了break环节。


在实际操作过程中,在刷卡充值的时候,不能过早的移开卡片,否则会导致充卡失败。

推荐阅读

史海拾趣

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

Frequency Electronics Inc公司的发展小趣事

高频电子在精确时间和频率生成技术方面一直处于世界领先地位。公司不断投入研发,推出了一系列高精度、高性能的定时和频率控制产品,如铷蒸气原子振荡器、温度稳定的石英晶体振荡器等。这些产品被广泛应用于商业、政府、军事等多个领域,包括卫星通信、指挥控制系统、电子战系统等。高频电子的技术创新不仅提升了自身竞争力,还推动了整个行业的发展。

Alps Alpine Co Ltd公司的发展小趣事

高频电子深知技术创新是企业持续发展的核心动力。因此,公司一直保持着对研发的持续投入,不断推出新产品、新技术和新服务。同时,高频电子还积极与高校、科研机构等合作,共同开展前沿技术的研发和应用。这些努力使得高频电子在技术创新方面始终保持着领先地位,为公司的长期发展奠定了坚实的基础。

综上所述,高频电子通过战略转型、技术创新、全球化布局、多元化业务布局以及持续投入研发等举措,实现了从一家小型国防合同制造商到全球领先的高科技供应商的华丽蜕变。这些故事不仅展现了高频电子的发展历程和成就,也为我们揭示了企业成功背后的关键因素。

方舟(ARKLED)公司的发展小趣事

方舟公司自成立以来,始终致力于LED光电技术的研发与创新。公司拥有一支由行业专家和技术骨干组成的研发团队,不断推出具有自主知识产权的新产品。其中,方舟公司独创的某款LED显示屏,以其高清晰度、低功耗和长寿命等特性,在市场上获得了广泛认可。这款产品不仅提升了方舟公司的品牌影响力,还为公司带来了丰厚的经济回报。

德崧电子(D-SWITCH)公司的发展小趣事

技术创新是德崧电子持续发展的核心动力。公司不断加大研发投入,引进先进的生产设备和技术人才,致力于开发具有竞争力的新产品。通过不断的技术创新,德崧电子在电子开关行业中取得了多项重要成果。例如,公司成功研发出了具有自动感应功能的智能开关,实现了对灯光、温度等环境因素的自动调节。这一技术的推出不仅提高了产品的智能化水平,也为公司赢得了更多的市场份额。

Advance Tapes公司的发展小趣事

随着环保意识的日益增强,电子行业对环保材料的需求也越来越大。Advance Tapes公司积极响应国家环保政策,致力于研发环保型胶带产品。通过采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,公司还加强了对废弃胶带产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了Advance Tapes的企业形象,也为公司的可持续发展奠定了坚实基础。

以上是基于已知信息构建的关于Advance Tapes在电子行业中可能的发展故事。然而,这些故事并非真实的历史记录,仅用于展示该公司可能的发展路径和面临的挑战。如需了解更多关于Advance Tapes公司的真实发展历程和故事,建议查阅相关文献资料或访问公司官网。

问答坊 | AI 解惑

【求助】光耦输出端不可以上接VCC,下接电阻到地吗?

为什么宁愿加一个三极管倒相,也不愿把光耦和电阻的位置调换一下? [ 本帖最后由 dukedz 于 2009-12-13 21:55 编辑 ]…

查看全部问答>

血压参数_监护产品监护参数的检验方法 (三)

六 无创血压测量特性的检验和评估方法 1. 概述     无创血压测量功能是监护仪最基本的监测参数之一,也是反映监护仪性能特征的关键参数,目前大多数监护仪上所采用的无创血压方法都是基于振荡法的,虽然这个方法存在某些局限性,但 ...…

查看全部问答>

面试时一定要避免的16种行为

面试是成功寻找到工作的一个必要过程,其关键程度也就不言而喻。对于广大应聘者来说,如何在面试中发挥更好就成了一门学问。当然,面试中常见问题的总结,需要自己经历不断的面试后才能做出。但是,至少应该注意的是,如何在面试中不给面试官留下负 ...…

查看全部问答>

如何实现锁住触摸屏和按键

目前我想实现按键盘中的某个键锁住触摸屏和按键,让他们都不响应,再按这个键,则解锁 各位有什么好办啊 …

查看全部问答>

wince触摸屏驱动要让横坐标反向怎么改?急求~

我用的是480*800的屏,现在想让触摸屏的(0,0)点的位置变成(800,0)点,纵坐标不变,只是横坐标反过来,请教怎么修改驱动~~~~急盼~~~谢谢大家了 ~~贴上驱动代码 /*++ THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF AN ...…

查看全部问答>

EVC下打印的问题

我用EVC新建了个单文档带打印功能的工程。想实现直接打印的功能,也就是说在直接按一下打印按钮就可以打印了,不弹出设置的对话框。代码如下。。。 // documentView.cpp : implementation of the CDocumentView class // #include \"stdafx.h\ ...…

查看全部问答>

请问tornado在download时出错的问题

安装了tornado2.2,编写了一个简单的helloworld程序,但是在download时出错 error:image specified cannot be run as a vxworks simulator with processor number 0 请问这是怎么回事,我是新手,请指教~!…

查看全部问答>

白领职场谈薪酬技巧支招

职场浮浮沉沉,薪水却始终停滞不前,这恐怕是不少白领心中的痛。如果你在人事部的“考评排行榜上”一直名列前茅,为什么不试着向老板提出加薪,争取自己应 得的利益呢?当然,谈加薪事关重大,没有方法、技巧,结局很可能会与你的愿望背道而驰。下 ...…

查看全部问答>

求数字频率计的毕业设计

急求一篇数字频率计的毕业设计,小弟将不胜感激,谢谢了…

查看全部问答>

大功率igbt驱动保护电路的分类

按照大功率igbt驱动保护电路能够完成的功能来分类,可以将大功率igbt驱动保护电路分为以下三种类型:单一功能型、多功能型、全功能型。2.1 单一功能型  单一功能型的大功率igbt驱动保护电路一般是由光耦和功率缓冲器构成,如hcpl-3150 等,如图1 ...…

查看全部问答>