久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于單片機+RC522的地鐵卡的設計源碼
[打印本頁]
作者:
清風徐來1
時間:
2018-10-22 21:09
標題:
基于單片機+RC522的地鐵卡的設計源碼
通過RC522裝置,能夠給卡片充值金額,記錄地鐵站位置以及抵達的地鐵站位置,將地鐵站的位置進行計算,將充值的金額減去,如果不能大于等于0則無法出站,顯示屏會出現請充值字樣。
單片機源程序如下:
#include "common.h"
#include "RC522.h"
#include "uart.h"
#include "juzhenanjian.h"
#include "12864.h"
#define DEBUG
unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
//unsigned char writeBuf[16] = {0x01, 0x00, 0x03, 0x00, 0x00, 0x00};
int num,flag,i,fig,mode=0,fig1=0;
static volatile int s=0;
/* 充值
** 金額數
**
*/
void Value()
{ num =keyscan();
switch (num)
{
case 1:fig=0x01;fig1=1;
Lcd_Num_Display1(1,6,fig1);
break;
case 2:fig=0x02;fig1=2;
Lcd_Num_Display1(1,6,fig1);
break;
case 3:fig=0x03;fig1=3;
Lcd_Num_Display1(1,6,fig1);
break;
case 4:mode=1 ;
Lcd_Write_Com(0x01);
Lcd_Display(1,1,"充值金額: 元");
break;
case 5:fig=0x04;fig1=4;
Lcd_Num_Display1(1,6,fig1);
break;
case 8:mode=2 ;
Lcd_Write_Com(0x01);
Lcd_Display(1,1,"刷卡模式:");
break;
}
}
/* 金額充值
** value 金額數
** *sernum 序列號
*/
void ChangeValue(unsigned char *sernum, unsigned int value)
{
unsigned char status;
unsigned char readBuf[16];
unsigned char writeBuf[16]=0;
#ifdef DEBUG
UART_TC("You will be select!\n");
#endif
status = PcdSelect(sernum);
if(status == MI_OK){
#ifdef DEBUG
UART_TC("Select card ok!\n");
#endif
status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, sernum);
if(status == MI_OK){
#ifdef DEBUG
UART_TC("Authent A success!\n");
#endif
status = PcdRead(1, readBuf);
if(status == MI_OK){
#ifdef DEBUG
UART_TC("Read OK\n");
for(i=0; i<16; i++)
{tochar(readBuf[i]);}
#endif
if(status == MI_OK)
{
writeBuf[2] = value;
PcdWrite(1,writeBuf);
UART_TC("Write OK\n");
}
if(readBuf[2]==1 || readBuf[2]==2 || readBuf[2]==3)
{
Lcd_Write_Com(0x01);
Lcd_Display(1,1,"充值成功: 元");
Lcd_Num_Display1(1,6,fig1);
}
}
}
}
}
void ShowCardType(unsigned char *type)
{
UART_TC("Card Type: ");
if(type[0]==0x04 && type[1]==0x00)
UART_TC("MFone-S50\n");
else if(type[0]==0x02 && type[1]==0x00)
UART_TC("MFone-S70\n");
else if(type[0]==0x44 && type[1]==0x00)
UART_TC("MF-UltraLight\n");
else if(type[0]==0x08 && type[1]==0x00)
UART_TC("MF-Pro\n");
else if(type[0]==0x44 && type[1]==0x03)
UART_TC("MF Desire\n");
else
UART_TC("Unknow Card Type\n");
}
void ShowCardId(unsigned char *id)
{
int IdLen = 4;
int i;
for(i=0; i<IdLen; i++){
tochar(id[i]);
}
UART_TC("\n");
}
void InoutHandle(const unsigned char *sernum)
{
unsigned char status;
unsigned char readBuf[16];
unsigned char writeBuf[16];
#ifdef DEBUG
UART_TC("You will be select!\n");
#endif
status = PcdSelect(sernum);
if(status == MI_OK){
#ifdef DEBUG
UART_TC("Select card ok!\n");
#endif
status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey , sernum);
if(status == MI_OK){
#ifdef DEBUG
UART_TC("Authent A success!\n");
#endif
status = PcdRead(1, readBuf);
if(status == MI_OK){
#ifdef DEBUG
UART_TC("Read OK\n");
for(i=0; i<16; i++)
{tochar(readBuf[i]);
}
#endif
writeBuf[2] = readBuf[2];
switch(flag)
{
case 0x0A :tochar(flag);
if(readBuf[1]==0) // 第一位 0進站1出站 第0位記錄進站位置 第2位金額 {
{
writeBuf[0]=0x0A;
writeBuf[1]=1;
PcdWrite(1,writeBuf);
UART_TC("Int success!\n");
Lcd_Display(1,6,"進站");
}
else
{
if(readBuf[0]==0x0B)
{
if(readBuf[2]>=0x01)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"Success Thank you!");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");
}
}
else if(readBuf[0]==0x0C)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0D)
{
if(readBuf[2]>=0x03)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0E)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
}
break;
case 0x0B :tochar(flag);
if(readBuf[1]==0)
{
writeBuf[0]=0x0B;
writeBuf[1]=1;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"進站");
}
else
{
if(readBuf[0]==0x0A)
{
if(readBuf[2]>=0x01)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0C)
{
if(readBuf[2]>=0x01)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0D)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0E)
{
if(readBuf[2]>=0x04)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值 ");}
}
}
break;
case 0x0C :tochar(flag);
if(readBuf[1]==0)
{
writeBuf[0]=0x0C;
writeBuf[1]=1;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"進站");
}
else
{
if(readBuf[0]==0x0B)
{
if(readBuf[2]>=0x01)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0A)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0D)
{
if(readBuf[2]>=0x01)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0E)
{
if(readBuf[2]>=0x03)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
}
break;
case 0x0D :tochar(flag);
if(readBuf[1]==0)
{
writeBuf[0]=0x0D;
writeBuf[1]=1;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"進站");
}
else
{
if(readBuf[0]==0x0B)
{
if(readBuf[2]>=2)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0C)
{
if(readBuf[2]>=0x01)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0A)
{
if(readBuf[2]>=0x03)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0E)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
}
break;
case 0x0E :tochar(flag);
if(readBuf[1]==0)
{
writeBuf[0]=0x0E;
writeBuf[1]=1;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"進站");
}
else
{
if(readBuf[0]==0x0B)
{
if(readBuf[2]>=0x03)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0C)
{
if(readBuf[2]>=0x03)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0D)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,1,"Success Thanks");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
else if(readBuf[0]==0x0A)
{
if(readBuf[2]>=0x02)
{LED_OK=0;
writeBuf[0]=0;
writeBuf[1]=0;
writeBuf[2]=0;
PcdWrite(1,writeBuf);
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"Success Thank you!");
LED_FAILED=1;
ALARM=1;}
else
{LED_FAILED=0;
ALARM=0;
Lcd_Display(1,6,"出站");
Lcd_Display(2,2,"失敗,請充值");}
}
}
break;
default:
LED_FAILED=0;
ALARM=0;
Lcd_Display(2,2,"error");
}
}
}
}
}
復制代碼
所有資料51hei提供下載:
RFID 最終程序.zip
(185.06 KB, 下載次數: 27)
2018-10-22 21:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
123321151
時間:
2019-9-25 12:44
樓主這個有仿真圖嗎?
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲色图综合
|
99re热这里只有精品视频
|
日韩精品极品视频在线观看免费
|
久久宗合色
|
天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品
|
天堂在线免费视频
|
日韩中文字幕2019
|
国产高清在线精品
|
视频一二三区
|
波多野结衣一区二区三区在线观看
|
亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区
|
91大神在线资源观看无广告
|
成人在线免费视频
|
亚洲免费在线播放
|
老司机精品福利视频
|
播放一级毛片
|
国产在线97
|
高清视频一区二区三区
|
精品久久av
|
在线男人天堂
|
中文在线一区
|
久久久久久久久久久91
|
亚洲国产成人av好男人在线观看
|
国产精品 欧美精品
|
国产小视频在线
|
国精产品一区一区三区免费完
|
国产高清免费视频
|
91夜色在线观看
|
日韩欧美亚洲
|
欧美一区二区三区小说
|
欧美lesbianxxxxhd视频社区
|
久久这里只有精品首页
|
精品久久久久久亚洲综合网站
|
亚洲午夜在线
|
影视一区
|
视频一区二区国产
|
在线国产一区二区
|
欧美精品一区在线发布
|
无人区国产成人久久三区
|
婷婷在线免费
|
国产成人高清视频
|