历史上的今天
今天是:2025年07月24日(星期四)
2020年07月24日 | MSP430F149单片机实现公交卡/饭卡充值功能模块
2020-07-24 来源:51hei
实验目的
1. 最基础实现刷卡后显示冲值/扣款说明
2. 实现芯片内部寄存器的读写,实现可记忆性。
设计思路
根据M1射频卡与读写器的通讯过程,程序设计基本流程如下:

主函数架构:
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] = '




