求教 上课老师让把读卡号16进制显示改成10进制,无果
mfc吧
全部回复
仅看楼主
level 1
诚爱诚LOVE 楼主
mrfc卡,读卡号是16进制,在刷卡的时候要改成显示为10进制
代码如下:
#include "include.h"
uchar data NewKey[16]={0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0x07,0x80,0x69,
0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char idata Read_Data[16]={0x00};
uchar idata PassWd[6]={0x00};
uchar idata WriteData[16];
unsigned char idata RevBuffer[30];
unsigned char data MLastSelectedSnr[4];
uchar uart_count,uart_comp;
uint data KeyNum,KuaiN;
uchar data bWarn,bPass;
uchar data KeyTime,WaitTimes,SysTime;
uchar data oprationcard,bSendID;
extern char PcdReset(void);
extern char PcdRequest(unsigned char req_code,unsigned char *pTagType);
extern void PcdAntennaOn(void);
extern void PcdAntennaOff(void);
extern char M500PcdConfigISOType(unsigned char type);
extern char PcdAnticoll(unsigned char *pSnr);
extern char PcdSelect(unsigned char *pSnr);
extern char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr);
extern char PcdWrite(unsigned char addr,unsigned char *pData);
extern char PcdRead(unsigned char addr,unsigned char *pData);
extern char PcdHalt(void);
extern uchar GetKey(void);
void delay_ms(uint data tms)
{
uint data ii;
while(tms)
{
tms--;
for(ii=0;ii<400;ii++)
{
nop();nop();nop();nop();nop();nop();
}
}
}
void Warn(void)
{
uchar data ii;
for(ii=0;ii<3;ii++)
{
SET_BEEP;
delay_ms(120);
CLR_BEEP;
delay_ms(120);
}
}
void Pass(void)
{
SET_BEEP;
delay_ms(700);
CLR_BEEP;
}
void InitPort(void)
{
P0M1=0x00;
P0M0=0xff;
P1M1=0x00;
P1M0=0x00;
P24=1;
P2M1=0x10;
P2M0=0x88;
P30=1;
P36=1;
P3M1=0x41;
P3M0=0xa2;
P41=1;
P4M1=0x02;
P4M0=0x04;
}
/**********************************************************************
functionName:putChar(BYTE sentData)
description:通过串口发送数据sentData
**********************************************************************/
void sendchar1(uchar data sentData)
{
ES=0;
TI=0;
SBUF=sentData;
while(TI==0);
TI=0;
ES=1;
}
void send_string(uchar *buf)
{
while(*buf!='\0')
{
sendchar1(*buf++) ;
}
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
// char size: 8 bit
// parity: Disabled
void uart_init(void)
{
SCON = 0x50;
BRT=RELOAD_COUNT;
AUXR=0x11;
AUXR1=0x00; //0x80:p1 0x00:p3
ES=1;
}
void uart_interrupt_receive(void) interrupt 4
{
uchar data R_Char;
if(RI==1);
{
RI=0;
WaitTimes=0;
R_Char=SBUF;
RevBuffer[uart_count]=R_Char;
uart_count++;
if(uart_count==RevBuffer[0])
{
uart_comp=1;
}
}
}
void InitRc522(void)
{
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
M500PcdConfigISOType( 'A' );
}
//TIMER1 initialize - prescale:8
// desired value: 20mSec
// actual value: 19.999mSec (0.0%)
void init_time0(void) //25ms
{
TMOD=0x01;
TH0=0x79;
TL0=0xfe;
ET0=1;
TR0=1;
}
void time0_routine(void) interrupt 1
{
//TIMER1 has overflowed
TMOD=0x01;
TH0=0x69;
TL0=0xfe;
WaitTimes++;
SysTime++;
if(WaitTimes>=10)
{
WaitTimes=10;
uart_count=0;
uart_comp=0;
}
if(KeyTime)
{
KeyTime--;
}
}
void InitAll(void)
{
InitPort();
InitRc522();
EA=0;
init_time0();
uart_init();
EA=1; //re-enable interrupts
bWarn=0;
bPass=0;
SysTime=0;
KeyTime=0;
WaitTimes=0;
KeyNum=0;
KuaiN=0;
oprationcard=0;
uart_count=0;
uart_comp=0;
bSendID=0;
Pass();
}
void ctrlprocess(void)
{
unsigned char data ii;
char data status;
PcdReset();
status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节
if(status!=MI_OK)
{
return;
}
status=PcdAnticoll(&RevBuffer[2]);//防冲撞,返回卡的序列号 4字节
if(status!=MI_OK)
{
return;
}
memcpy(MLastSelectedSnr,&RevBuffer[2],4);
status=PcdSelect(MLastSelectedSnr);//选卡
if(status!=MI_OK)
{
return;
}
if(oprationcard==KEYCARD)//修改密码
{
oprationcard=0;
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);//
if(status!=MI_OK)
{
bWarn=1;
return;
}
status=PcdWrite(KuaiN,&NewKey[0]);
if(status!=MI_OK)
{
bWarn=1;
return;
}
bPass=1;
PcdHalt();
}
else if(oprationcard==READCARD)//读卡
{
oprationcard=0;
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);//
if(status!=MI_OK)
{
bWarn=1;
return;
}
status=PcdRead(KuaiN,Read_Data);
if(status!=MI_OK)
{
bWarn=1;
return;
}
for(ii=0;ii<16;ii++)
{
sendchar1(Read_Data[ii]);
}
bPass=1;
PcdHalt();
}
else if(oprationcard==WRITECARD)//写卡
{
oprationcard=0;
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);//
if(status!=MI_OK)
{
bWarn=1;
return;
}
status=PcdWrite(KuaiN,&WriteData[0]);
if(status!=MI_OK)
{
bWarn=1;
return;
}
bPass=1;
PcdHalt();
}
else if(oprationcard==SENDID)//发送卡号
{
oprationcard=0;
for(ii=0;ii<4;ii++)
{
sendchar1(MLastSelectedSnr[ii]);
}
bPass=1;
}
}
void ctrl_uart(void)
{
uchar ii;
switch(RevBuffer[1])
{
case 0xa0:
oprationcard=SENDID;
break;
case 0xa1://读数据
oprationcard=READCARD;
for(ii=0;ii<6;ii++)
{
PassWd[ii]=RevBuffer[ii+2];
}
KuaiN=RevBuffer[8];
break;
case 0xa2://写数据
oprationcard=WRITECARD;
for(ii=0;ii<6;ii++)
{
PassWd[ii]=RevBuffer[ii+2];
}
KuaiN=RevBuffer[8];
for(ii=0;ii<16;ii++)
{
WriteData[ii]=RevBuffer[ii+9];
}
break;
case 0xa3:
oprationcard=KEYCARD;
for(ii=0;ii<6;ii++)
{
PassWd[ii]=RevBuffer[ii+2];
}
KuaiN=RevBuffer[8];
for(ii=0;ii<6;ii++)
{
NewKey[ii]=RevBuffer[ii+9];
NewKey[ii+10]=RevBuffer[ii+9];
}
break;
default:
break;
}
uart_comp=0;
uart_count=0;
}
void main(void)
{
InitAll();
while(1)
{
KeyNum=GetKey();
if(KeyNum==N_1)
{
KeyTime=15;
send_string("hello");
sendchar1(0xaa);
oprationcard=SENDID;
}
if(bWarn)
{
bWarn=0;
Warn();
}
if(bPass)
{
bPass=0;
Pass();
}
if(uart_comp)
{
send_string("Card ID:");
ctrl_uart();
}
if(SysTime>=2)
{
SysTime=0;
ctrlprocess();
}
}
}
2014年06月19日 06点06分 1
level 1
诚爱诚LOVE 楼主
好像是说,主要是在这一段:
if(uart_comp)
{
send_string("Card ID:");
ctrl_uart();
}
刷卡后,输出Card ID和16进制的号,要求把16进制改成10进制.
2014年06月19日 06点06分 2
level 9
这代码风格看着不像是个新手,怎么会问这么小白的问题呢。
再说你这个控制台程序里头粗览了一遍不都是读写串口的操作么,哪里有输出显示相关语句了
2014年06月19日 07点06分 3
咳咳,这是老师给的程序,让我们改而已
2014年06月19日 07点06分
额,它用的mrfc米菲卡(大概是这两个字吧),连接串口以后刷卡显示的,还有,这个只是主程序
2014年06月19日 07点06分
回复 诚爱诚LOVE :那你贴这么长一串有啥用,跟你问的问题根本没关系的。这里头根本没涉及你说的“显示”问题,是不是还有另外个客户端
2014年06月19日 07点06分
回复 89198408 :额,算是吧,还有个串口助手,可是程序要在这里改啊
2014年06月19日 08点06分
level 8
It is ‘Mifare One’ card!读取卡号32位串码,根据读取协议显示。而你的这个问题,网上一大堆源码…
2014年06月19日 13点06分 4
???是么,为什么我没找到。。
2014年06月20日 13点06分
回复 诚爱诚LOVE :我是做这个行业的…
2014年06月20日 14点06分
回复 凡小宝 :搜噶,大神,那改十进制代码写哪里啊?
2014年06月20日 14点06分
回复 诚爱诚LOVE :大神不会MFC
2014年06月20日 16点06分
1