msp430 RFID软件源程序说明文档.docx

上传人:b****9 文档编号:25192032 上传时间:2023-06-06 格式:DOCX 页数:39 大小:22.84KB
下载 相关 举报
msp430 RFID软件源程序说明文档.docx_第1页
第1页 / 共39页
msp430 RFID软件源程序说明文档.docx_第2页
第2页 / 共39页
msp430 RFID软件源程序说明文档.docx_第3页
第3页 / 共39页
msp430 RFID软件源程序说明文档.docx_第4页
第4页 / 共39页
msp430 RFID软件源程序说明文档.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

msp430 RFID软件源程序说明文档.docx

《msp430 RFID软件源程序说明文档.docx》由会员分享,可在线阅读,更多相关《msp430 RFID软件源程序说明文档.docx(39页珍藏版)》请在冰豆网上搜索。

msp430 RFID软件源程序说明文档.docx

msp430RFID软件源程序说明文档

软件源程序说明

一、主函数源代码

#include"bsp.h"

#include"app.h"

#include"lcd12864.h"

#include"ds1302.h"

#include"key.h"

#include"MFRC522_API.h"

 

/*局部变量------------------------------------------------------------------*/

uint8_tDisplay_Tmp[16]="";

uint8_tcnt=0;

uint8_tkey_val=0;

 

/************************************************

函数名称:

main

功能:

主函数入口

参数:

返回值:

int

作者:

陈萌

*************************************************/

intmain(void)

{

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

SysColck_Init();//系统时钟配置

Delay_Software(0x100);

LCD12864_Initializes();//LCD12864初始化

DS1302_Initializes();//时钟芯片初始化

RC522SPI_Init();//RC射频芯片初始化

KEY_Initializes();//按键初始化

LCD12864_DisplayString(0x80,"射频IC卡读写系统");

LCD12864_DisplayString(0x99,"按K4注册IC卡");

DS1302_Display();

while

(1)

{

/*1.更新时间*/

cnt++;

if(10<=cnt)

{

cnt=0;

DS1302_Display();

}

/*2.扫描按键*/

if((key_val=KEY_Scan())!

=KEY_NULL)

{

if(KEY_4==key_val)

{

Write_Card();//写入数据

LCD12864_Clear();

LCD12864_DisplayString(0x80,"射频IC卡读写系统");

LCD12864_DisplayString(0x99,"按K4注册IC卡");

cnt=9;

}

}

/*3.射频卡扫描*/

Read_Card();//读出数据

/*4.延时*/

Delay_Software(0x10);

}

}

二、各个模块源代码

2.1按键部分

#include"key.h"

/************************************************

函数名称:

KEY_Initializes

功能:

按键初始化

参数:

返回值:

作者:

陈萌

*************************************************/

voidKEY_Initializes(void)

{

KEY_DIR;

}

/************************************************

函数名称:

KEY_Scan

功能:

按键扫描

参数:

返回值:

按键值

作者:

陈萌

*************************************************/

uint8_tKEY_Scan(void)

{

uint64_ttimes=0;

if(0==(KEY_INVAL&BIT0))

{

while(0==(KEY_INVAL&BIT0))

{

times++;

if(0x60000

{

returnKEY_1;

}

}

if(0x1000

{

returnKEY_1;//按下了K1键

}

}

elseif(0==(KEY_INVAL&BIT1))

{

while(0==(KEY_INVAL&BIT1))

{

times++;

if(0x60000

{

returnKEY_2;

}

}

if(0x1000

{

returnKEY_2;//按下了K2键

}

}

elseif(0==(KEY_INVAL&BIT2))

{

while(0==(KEY_INVAL&BIT2))

{

times++;

if(0x60000

{

returnKEY_3;

}

}

if(0x1000

{

returnKEY_3;//按下了K3键

}

}

elseif(0==(KEY_INVAL&BIT3))

{

while(0==(KEY_INVAL&BIT3))

{

times++;

if(0x60000

{

returnKEY_4;

}

}

if(0x1000

{

returnKEY_4;//按下了K4键

}

}

returnKEY_NULL;

}

2.2时钟DS1302部分

#include"ds1302.h"

 

/************************************************

函数名称:

DS1302_Write

功能:

DS1302写操作

参数:

Addr---地址

Data---数据

返回值:

作者:

陈萌

*************************************************/

voidDS1302_Write(uint8_tadd,uint8_tdate)

{

uint8_ttemp,t;

RST_L;

SCLK_L;

RST_H;

temp=add;

for(t=0;t<8;t++)//写地址

{

if((temp&0x01)==1)

DIO_H;

else

DIO_L;

SCLK_H;

SCLK_L;

temp=temp>>1;

}

temp=date;

for(t=8;t>0;t--)//写数据

{

if((temp&0x01)==1)

DIO_H;

else

DIO_L;

SCLK_H;

temp=temp>>1;

}

RST_L;

}

/************************************************

函数名称:

DS1302_Read

功能:

DS1302读操作

参数:

Addr---地址

返回值:

作者:

陈萌

*************************************************/

uint8_tDS1302_Read(uint8_tadd)

{

uint8_ttemp,t;

RST_L;

SCLK_L;

RST_H;

temp=add;

for(t=0;t<8;t++)

{

if((temp&0x01)==1)

DIO_H;

else

DIO_L;

SCLK_H;

temp>>=1;

}

temp=0;

for(t=0;t<7;t++)//读出数

{

PX_6_IN;//IO端口设定为输入,进行检测

if((PX_IN&BIT6)==BIT6)

temp=temp|0x80;

else

temp=temp&0x7f;

PX_6_OUT;//设定为输出

SCLK_H;

SCLK_L;

temp>>=1;

}

returntemp;

}

/************************************************

函数名称:

DS1302_Initializes

功能:

DS1302初始化

参数:

返回值:

作者:

陈萌

*************************************************/

voidDS1302_Initializes(void)

{

DS1302_DateTimeTypeDefDS1302_DateTimeStructure;

Px_567_OUT;//与DS1302相连接位

SCLK_L;

RST_L;

DS1302_DateTimeStructure.Year=0x15;//初始化时间BCD:

2015-05-12二12:

00:

00

DS1302_DateTimeStructure.Month=0x05;

DS1302_DateTimeStructure.Date=0x25;

DS1302_DateTimeStructure.Week=0x01;

DS1302_DateTimeStructure.Hour=0x22;

DS1302_DateTimeStructure.Minute=0x00;

DS1302_DateTimeStructure.Second=0x00;

DS1302_Update(DS1302_DateTimeStructure);

#endif

}

2.3液晶12864部分

#include"lcd12864.h"

 

/************************************************

函数名称:

LCD12864_Busy

功能:

LCD12864检测

参数:

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_Busy(void)

{

uint8_ttemp;

RW_H;

_NOP();

RS_L;

MCU_DAT_INSET;

do

{

E_H;

_NOP();

temp=PXIN;

E_L;

}

while(temp&0x80);

_NOP();

E_L;

MCU_DAT_OUTSET;

}

/************************************************

函数名称:

LCD12864_Write

功能:

向12864写数据和指令

参数:

dat_comm---指令数据

dat_-------数据

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_Write(uint8_tdat_comm,uint8_tdat_)

{

LCD12864_Busy();

if(dat_comm==1)

{

RW_L;

RS_H;

}

else

{

RW_L;

RS_L;

}

PXOUT=dat_;

_NOP();

_NOP();

E_H;

_NOP();

_NOP();

E_L;

}

/************************************************

函数名称:

LCD12864_Initializes

功能:

12864初始化

参数:

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_Initializes(void)

{

RS_RW_E_EN;//430的12864时序控制口始能

LCD12864_Write(comm,0x30);

_NOP();

LCD12864_Write(comm,0x30);

_NOP();

LCD12864_Write(comm,0x0c);

_NOP();

LCD12864_Write(comm,0x01);

_NOP();

LCD12864_Write(comm,0x06);

_NOP();

_NOP();

}

/************************************************

函数名称:

LCD12864_Clear

功能:

清除屏幕上已显示的内容

参数:

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_Clear(void)

{

LCD12864_Write(comm,0x01);

}

/************************************************

函数名称:

LCD12864_ClearDram

功能:

清除GDRAM中的值

参数:

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_ClearDram(void)

{

uint8_ti,j,k;

LCD12864_Write(comm,0x30);

LCD12864_Write(comm,0x34);

i=0x80;

for(j=0;j<32;j++)

{

LCD12864_Write(comm,i++);//先写y地址

LCD12864_Write(comm,0x80);//再写x地址

for(k=0;k<16;k++)

{

LCD12864_Write(dat,0x00);

}

}

i=0x80;

for(j=0;j<32;j++)

{

LCD12864_Write(comm,i++);

LCD12864_Write(comm,0x88);

for(k=0;k<16;k++)

{

LCD12864_Write(dat,0x00);

}

}

LCD12864_Write(comm,0x30);

}

/************************************************

函数名称:

LCD12864_DisplayNChar

功能:

显示N个字符

参数:

addr--显示位置的首地址

pt--指向显示数据的指针

num--显示字符个数

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_DisplayNChar(uint8_taddr,uint8_t*pt,uint8_tnum)

{

uint8_ti;

LCD12864_Write(comm,0x30);

LCD12864_Write(comm,addr);

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

LCD12864_Write(dat,*(pt++));

}

/************************************************

函数名称:

LCD12864_DisplayString

功能:

显示字符串

参数:

addr--显示位置的首地址

返回值:

作者:

陈萌

*************************************************/

voidLCD12864_DisplayString(uint8_taddress,uint8_t*table)

{

LCD12864_Write(comm,0x30);

LCD12864_Write(comm,address);

while(*table!

='\0')

{

LCD12864_Write(dat,*table);

table++;

}

}

2.4射频IC卡部分

/*****************************************************

**@函数名:

RC522SPI_Init

**@描述:

RC522模拟SPI接口初始化配置

**@参数:

**@返回值:

*****************************************************/

voidRC522SPI_Init(void)

{

P4DIR|=BIT0+BIT1+BIT2+BIT4;

P4DIR&=~BIT3;//MISO

}

/*****************************************************

**@函数名:

SPIReadByte

**@描述:

RC522模拟SPI接口SPI读数据

**@参数:

**@返回值:

*****************************************************/

uint8_tSPIReadByte(void)

{

uint8_tSPICount=0;

uint8_tSPIData=0;

SPIData=0;

for(SPICount=0;SPICount<8;SPICount++)

{

SPIData<<=1;

CLR_SPI_SCK;

__nop();

__nop();

if(STU_SPI_MISO)

{

SPIData|=0x01;

}

SET_SPI_SCK;

__nop();

__nop();

}

returnSPIData;

}

/*****************************************************

**@函数名:

SPIWriteByte

**@描述:

RC522模拟SPI接口SPI写数据

**@参数:

**@返回值:

*****************************************************/

voidSPIWriteByte(uint8_tSPIData)

{

uint8_tSPICount;//Counterusedtoclockoutthedata

for(SPICount=0;SPICount<8;SPICount++)

{

if(SPIData&0x80){

SET_SPI_MOSI;

}else{

CLR_SPI_MOSI;

}

__nop();

__nop();

CLR_SPI_SCK;

__nop();

__nop();

SET_SPI_SCK;

__nop();

__nop();

SPIData<<=1;

}

}

int8_tPcdRequest(uint8_treq_code,uint8_t*pTagType)

{

int8_tstatus;

uint16_tunLen;

uint8_tucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08);

WriteRawRC(BitFramingReg,0x07);//定义接收LSB放在bit0,发送的最后一个字节位数7bit

SetBitMask(TxControlReg,0x03);//设置TX1、TX2发送经13.56MHz调制载波

ucComMF522Buf[0]=req_code;

status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);

if((status==MI_OK)&&(unLen==0x10))//接收卡发回来的数据字节数16Byte

{

*pTagType=ucComMF522Buf[0];

*(pTagType+1)=ucComMF522Buf[1];

}

else

{

status=MI_ERR;

}

returnstatus;

}

/*****************************************************

**@函数名:

PcdAnticoll

**@描述:

防冲撞

**@参数:

pSnr[OUT]:

卡片序列号,4字节

**@返回值:

成功返回MI_OK

*****************************************************/

int8_tPcdAnticoll(uint8_t*pSnr)

{

int8_tstatus;

uint8_ti,snr_check=0;

uint16_tunLen;

uint8_tucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08);

WriteRawRC(BitFramingReg,0x00);//暂停数据发送

//接收LSB放在bit0位上

//最后一个字节所有位都发送

ClearBitMask(CollReg,0x80);//所以接收的位在位冲突后都将清零

ucComMF522Buf[0]=PICC_ANTICOLL1;//防冲撞指令代码

ucComMF522Buf[1]=0x20;//?

//发送并接收数据指令

status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1