📄 main.#3
字号:
//#include "REG51F.H"
//#include "c8051F020.h"
//#include "absacc.h"
//#include "string.h"
//#include "stdio.h"
//#include "intrins.h"
//#include <MfRcuC.h>
//#include <MfRc500R.h>
//#include <MfErrNo.h>
//don't del above test,else will don't open .c
#include "c8051F020.h"
#include "absacc.h"
#include "string.h"
#include "stdio.h"
#include "intrins.h"
#include <MfRcuC.h>
#include <MfRc500R.h>
#include <MfErrNo.h>
#include <I2c.h>
/////////////////////////////////液晶测试
#define uchar unsigned char
//#define data 1
#define comm 0
#define f_page 0xb8
#define f_row 0xc0
#define f_line 0x00
//#define LCD12232_DATA P2 //数据口
//******************************************************************
// 串口1中断服务相应定义
unsigned char xdata Receive_Buf_UART1[30];// UART1 RECEIVE buffer
unsigned char xdata UART1_Receive_Len;
bit Receive_Flag_UART1=0,Padding_Flag_UART1=0,UART1_Rec_Complete=0; // UART1 RECEIVE FLAG
//********************************************************************
unsigned char xdata MLastSelectedSnr[5];
unsigned char xdata Returnval;
unsigned char xdata MRcvBuffer[64] ,MSndBuffer[16]; //
static MfCmdInfo MInfo;
unsigned char status=0;
//********************************************
bit haveset=0;
sbit PReset=P1^3;
//sbit csflash=P1^1;
sbit csrc500=P1^2;
sbit csrtc=P1^1;
sbit DIR=P1^4; //DIR=1时发送
sbit speak=P1^7;
sbit rst=P1^1;
sbit e1 =P1^5;
sbit e2 =P1^6;
sbit rw =P1^7;
sbit a0 =P1^4;
sbit bf =P2^7;
uchar code tab1[]={
0x0, 0x22, 0x64, 0x0C, 0x80, 0x04, 0x74, 0x84,
0x04, 0x04, 0x04,0x0C4, 0x3E, 0x04, 0x00, 0x00,
0x04, 0x04, 0x7E, 0x01, 0x80, 0x40, 0x20, 0x11,
0x0A, 0x04, 0x0B, 0x10, 0x60,0x0C0, 0x40, 0x00,
/*-- 文字: 科 --*/
0x00,0x10,0x14,0x92,0x51,0x30,0x13,0x1C,0x10,0x00,0x1F,0x00,0x00,0xFF,0x00,0x00,
0x02,0x04,0x08,0x10,0x20,0xC0,0x60,0x1C,0x08,0x00,0xE0,0x04,0x02,0xFC,0x00,0x00,
/*-- 文字: 国 --*/
0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,
/*-- 文字: 技 --*/
0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00,
0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00,
/*-- 文字: 肇 --*/
0x80,0x60,0x1C,0x95,0x96,0x94,0x9C,0xC8,0xA4,0xAF,0x94,0x94,0x2C,0x44,0x44,0x00,
0x20,0x22,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2F,0x22,0x22,0x20,0x00,
/*-- 文字: 有 --*/
0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00,
/*-- 文字: 庆 --*/
0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0xC5,0x7E,0xC4,0x44,0x44,0x44,0x44,0x44,0x00,
0x40,0x30,0x0F,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x18,0x30,0x60,0x20,0x00,
/*-- 文字: 限 --*/
0xFE,0x02,0x32,0x4E,0x82,0x00,0xFE,0x4A,0xCA,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,
0xFF,0x00,0x02,0x04,0x03,0x00,0xFF,0x40,0x20,0x03,0x0C,0x12,0x21,0x60,0x20,0x00,
/*-- 文字: 金 --*/
0x40,0x40,0x20,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x50,0x20,0x60,0x20,0x00,
0x40,0x40,0x42,0x42,0x4A,0x72,0x42,0x7F,0x42,0x62,0x5A,0x42,0x42,0x40,0x40,0x00,
/*-- 文字: 公 --*/
0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00,
0x00,0x01,0x20,0x70,0x28,0x24,0x23,0x31,0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00,
/*-- 文字: 鹏 --*/
0x00,0xFE,0x12,0xFE,0x00,0xFE,0x12,0xFE,0x00,0xFC,0x0E,0x35,0x44,0x7C,0x00,0x00,
0x20,0x1F,0x21,0x7F,0x20,0x1F,0x41,0x7F,0x08,0x09,0x09,0x29,0x49,0x21,0x1F,0x00,
/*-- 文字: 司 --*/
0x00,0x10,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0x02,0xFE,0x00,0x00,
0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00
};
uchar code tab2[]={
//-- 文字: 8 --
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
//-- 文字: G --
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,
//-- 文字: 6 --
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
//-- 文字: o --
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
//-- 文字: - --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
//-- 文字: l --
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//-- 文字: 7 --
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
//-- 文字: d --
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
//-- 文字: 5 --
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
//-- 文字: e --
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
//-- 文字: 8 --
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
//-- 文字: n --
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
//-- 文字: - --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
//-- 文字: P --
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
//-- 文字: 2 --
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
//-- 文字: a --
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
//-- 文字: 2 --
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
//-- 文字: l --
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//-- 文字: 2 --
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
//-- 文字: m --
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
//-- 文字: 3 --
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
//-- 文字: --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//-- 文字: 1 --
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//-- 文字: L --
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,
//-- 文字: 9 --
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
//-- 文字: C --
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
//-- 文字: 6 --
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
//-- 文字: M --
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00
};
uchar code tab3[488]={
//-- 调入了一幅图像:F:\梁\其它\HOCO12232.bmp --
//-- 宽度x高度=122x32 --
0x00,0x00,0x00,0x70,0xF8,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xF0,0xE0,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x48,0xD4,0xB4,0x62,0xC2,0x82,0x03,0x02,0x02,
0x02,0x84,0xC4,0xE0,0xA0,0xE0,0x60,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xB0,0xF8,0xF0,0xF0,0xF8,0xFC,0x60,0x60,0x30,
0x18,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xD8,0x58,0x58,0x58,0x58,
0x58,0xD8,0xD8,0x98,0xB0,0x30,0x70,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x07,0x07,0x02,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x04,
0x0D,0x1B,0x36,0x6D,0xDB,0xF6,0xED,0xFB,0xFE,0xFE,0xFF,0x7F,0x1F,0x07,0x01,0x00,
0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFE,0xFE,
0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xE0,0xC0,0xC0,0xF8,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x3E,0xF8,0x01,0x37,
0x0C,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x60,0xFF,0xC7,0x03,0x03,0x03,0x03,0xE1,
0xFF,0x3F,0x0F,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0F,0x3F,0x7F,0xFF,0xEF,
0xBF,0x7F,0xFF,0xC7,0x07,0x1F,0xFE,0xF8,0xB0,0x60,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x10,0x20,0x40,0x40,0x80,0x83,
0xFF,0xFF,0xFF,0xFF,0x83,0x40,0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x7F,0xFF,
0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0x3F,0x3F,0x0F,0x61,0x3F,0x1F,0x2F,0x3F,
0x1F,0x0F,0x00,0x0F,0x07,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1E,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x70,0x3C,0x1F,0x07,0x03,0x01,0x01,0x00,0x00,
0x01,0x07,0x07,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0xEC,0x00,
0x7C,0x44,0x7C,0x00,0x7C,0x40,0x40,0x00,0x7C,0x44,0x38,0x00,0x7C,0x14,0x1C,0x00,
0x7C,0x40,0x40,0x00,0x78,0x24,0x78,0x00,0x7C,0x18,0x18,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x10,0x04,0x07,0x00,0x01,0x00,0x00,0x00,0x01,
0x05,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/****************************************************************************
* *
* Function: main *
* *
* Input: - *
* Output: - *
* *
* Description: *
****************************************************************************/
void main(void)
{
// unsigned char idata i;
unsigned char xdata catq[2],csn[5];
unsigned char xdata rbuf[16]={0};
unsigned char xdata keybuf[6],keycodebuf[12],temp_buf[17];
unsigned char xdata sector_num; //扇区绝对号
unsigned char xdata selec_abkey; //key a b selector
unsigned char xdata block_num; //块绝对号
unsigned char xdata e2key_secotor;
// unsigned short idata rc500_e2addr;
unsigned short delay;
unsigned char xdata i,j,buff[40];
OSCXCN = 0x67; // Enable external crystal
WDTCN = 0xDE; // disable watchdog timer
WDTCN = 0xAD;
EMI0CF = 0x07; // Set External Memory Configuration Register,
//使用片内 4K 和片外存储器低端口,地址数据复用
//因为地址与数据复用,所以应将XBR2.1设为高电平,以使交叉开关
//跳过ALE,RD,WR
XBR0 = 0X05; //SET UART0,I2C
XBR1 = 0x10; // Set INT1
XBR2 = 0x42; // Enable XBAR,Enable EMFILE
P0MDOUT = 0xe1; //Output configuration for P0
//ALE,RD,WR,TXD配置为推挽输出,RXD,INT1配置为漏级开路
P1MDOUT = 0xff; // Output configuration for P1
//复位脚配置为推挽输出
P2MDOUT = 0x00; // Output configuration for P2
P3MDOUT = 0xff; // Output configuration for P3
P0|=0x1A; //set RX0,RX1,INT1为输入
delay=256; // Delay >1 ms before polling XTLVLD.
while(delay--);
while (!(OSCXCN & 0x80)); // Wait until external crystal has // started.
OSCICN = 0x0C; // Switch to external oscillator
OSCICN = 0x88; // Disable internal oscillator; enable
// missing clock detector.
while (!(OSCXCN & 0x80)); // Wait until external crystal has // started.
OSCICN = 0x08; // Switch to external oscillator
///////////////////////////////////////////////////
//test 液晶
init_lcd ();
wrlattice (0x00,0x00);
disphz (tab1);
delay1 (300);
wrlattice (0xff,0x00);
delay1 (300);
wrlattice (0x00,0x00);
dispzf (tab2);
delay1 (300);
wrlattice (0x33,0x33);
wrlattice (0x00,0x00);
delay1 (300);
disptu (tab3);
delay1 (300);
/////////////////////////////////
csrc500=0;
csrtc=1;
SpeakSound();
SpeakSound();
// 初始化UART0、TIMER2
Baudrate_Init(); // 初始化串口0的波特率
TI0=0; //发送清零
DIR=0; //485置于接收状态
IT1=1; // 外部中断1设为沿触发
ES0=1; //允许串口0中断
EX1=1; //外部中断1开放
EA=1;
//---------------------i2c init------------------------
SMB0CN = 0x44; // Enable SMBus with ACKs on acknowledge
// cycle
SMB0CR = -100; // SMBus clock rate = 100kHz.
EIE1 |= 2; // SMBus interrupt enable
SM_BUSY = 0; // Free SMBus for first transfer.
// TEST I2C CODE---------------------------------------------------------------------
for(i=0;i<40;i++)
SM_Send(CHIP_A,0x0FFF+i,i); // Send 0x53(data) to address 0x88 on CHIP_A
// SM_Send(CHIP_B, 0x0001, 0x66); // Send 0x66(data) to address 0x01 on CHIP_B
// SM_Send(CHIP_C, 0x0010, 0x77);
// SM_Send(CHIP_B, 0x0333, 0xF0);
// SM_Send(CHIP_A, 0x0242, 0xF0);
for(i=0;i<40;i++)
{
buff[i] = SM_Receive(CHIP_A, 0x0FFF+i); // Read address 0x88 on CHIP_A
}
// check = SM_Receive(CHIP_B, 0x0001); // Read address 0x01 on CHIP_B
// check = SM_Receive(CHIP_C, 0x0010);
// check = SM_Receive(CHIP_B, 0x0333);
// END TEST I2C CODE-----------------------------------------------------------------
status=Mf500PcdConfig(); //配置RC500内部寄存器函数
status=Mf500PiccHalt();
while(1) //while(1)
{
if(UART1_Rec_Complete==1){//接收成功
UART1_Rec_Complete=0;
switch(Receive_Buf_UART1[1]){ //run command
case 0x00: //择卡命令
do{
status=Mf500PiccRequest(PICC_REQALL,catq);
status=Mf500PiccAnticoll(0,csn); //csn 为返回的卡序列号SN
status=Mf500PiccSelect(csn,catq); //选择这张卡
}while(status);
SEND_ICINFO_PC(0,0,5,csn);
SpeakSound();
break;
case 0x01: //卡验证
sector_num=Receive_Buf_UART1[2]*4+3;//算出密钥所在的扇区
if(Receive_Buf_UART1[3]==0x0A) //认证密钥
selec_abkey=PICC_AUTHENT1A;
if(Receive_Buf_UART1[3]==0x0B)
selec_abkey=PICC_AUTHENT1B;
switch(Receive_Buf_UART1[4]){
case 0x01:
memmove(keybuf,Receive_Buf_UART1+5,6);
status=Mf500HostCodeKey(keybuf,keycodebuf);//将密钥转换成RC500格式
status=Mf500PiccAuthKey(selec_abkey,csn,keycodebuf,sector_num);
if(status==0)
SEND_ICINFO_PC(1,0,0,NULL);
else
SEND_ICINFO_PC(1,1,0,NULL);
SpeakSound();
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -