立即注册 登录
返回首页

uid:457281的个人空间

日志

RC-522+S50+038+12864刷卡程序

热度 1已有 654 次阅读2018-12-28 15:00

/************** 全遥控操作RFID刷卡系统************/
/*
   硬件:1.MCU:STC12C5A60S2 ,11.0592MHz
          2.12864带中文字库液晶
          3.RFID读卡模块:RC522,+ S50卡
    4.红外遥控038接收头,CARMP3遥控器,不同遥控器键值不同,若用不同品牌遥控器需修改键值  
    5.LED指示灯(或为蜂鸣器)
   RC522接法:
   sbit     MF522_RST  =    P1^4;                  
   sbit     MF522_NSS  =    P1^2;
   sbit     MF522_SCK  =    P1^1;
   sbit     MF522_SI   =    P1^0;
   sbit     MF522_SO   =    P1^3;
   
   LED指示灯接法:
   sbit     LED_GREEN  =    P1^5;     //指示灯
   
   12864接法:
   #define Lcd_Bus P0             //数据口
   sbit LCM_RS  =  P2^0;            //寄存器选择输入
   sbit LCM_RW  =  P2^1;            //液晶读/写控制
   sbit LCM_EN  =  P2^2;            //液晶使能控制
   sbit LCM_PSB =  P2^3;            //串/并方式
   
   红外遥控接法:
   sbit IRIN = P3^2; //红外接收器数据线
   遥控器功能键说明:prev为退格键,next为切换键,play为确认键,0-9为相应数字键 100+为小数点键
   
   注意:务必确保RC522供电为3.3V,接5V必烧!!!

 功能: 1.多级菜单操作,菜单有反白高度显示。
        2.全遥控操作,通过遥控键盘控制读、写卡,并可输入读、写数值。
     3.有读卡信息(卡类型、类号、余额),初始化卡,充值和扣款功能。
     4.自动设定数据范围,超范围自动提示。 
    
 出品:聚龙居士 qq:15080987   2014.6.8
*/
/****************************************/
#include "reg52.h"
#include "main.h"
#include "mfrc522.h" 
#include "string.h"
#include "12864.h"
#include "hw.h"
#include "set.h"
#include "delay.h"
//M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
//4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
unsigned char code data1[16] = {0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};
uchar g_ucTempbuf[20];   
sfr AUXR  = 0x8E;
/////////////////////////////////////////////////////////////////////
//系统初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
 LED_GREEN = 1;
 PcdReset();
 PcdAntennaOff();
 PcdAntennaOn(); 
 M500PcdConfigISOType( 'A' );
 LED_GREEN = 0;
 delay_10ms(); 
 LED_GREEN = 1;
 delay_10ms();
 LED_GREEN = 0;
}

void main( )
{   
 IE = 0x81;    //允许总中断中断,使能 INT0 外部中断 相当于EA=1; EX0=1;
    TCON = 0x01;  //触发方式为脉冲负边沿触发   相当于IT0=1;
    IRIN=1;       //红外接收器数据初始化
 lcm_init();
    InitializeSystem( );
 write12864GDRAM(bmp12864);//显示开机画面
 Delay100ms(20);//延时
 Clean_12864_GDRAM();
 lcm_init();
 display_welcome();
 Delay100ms(20);
 mainmenu(0);
 w=1;
 menu2=0; 
 while(1)
    { 
/*-----------------------------红外遥控切换功能---------------------------*/
  if (key_manue==1)        
  {    
   DelayM(8);
/*-----------------当是主菜单调时状态 本键用于调整下一项---------------------------*/  
   if(key_manue==1&&w==1&& menu2==0)   //w为主菜单状态位,menu2为子菜单状态参数
   {
      key_manue=0;
    e++;
    if (e >= 3 ) {e = 0;}          
    mainmenu(e);       //主菜单调整    
   }
/*------------------------当是子菜单时调整信息显示子菜单-----------------------*/
   if(key_manue==1&&w == 0 &&menu2==1&&e==0)
   {
    key_manue=0;
    d++;
    if(d>=3){d=0;}
    set_info(d);     
   }
/*---------------------当是子菜单时调整充值子菜单------------------------------*/
   if(key_manue==1&&w == 0&&menu2==1&&e==1)
   {
    key_manue=0;
    t++;
    if(t>=2){t=0;}
    set_inch(t);
   }
/*---------------------当是子菜单时调整消费子菜单-------------------------------*/
   if(key_manue==1&&w == 0&&menu2==1&&e==2)
   {
    key_manue=0;
    a++;
    if(a>=2){a=0;}
    set_cons(a);
   }
   key_manue=0;
  }
/*-----------------------------红外遥控切换功能---------------------------*/


/*--------------红外遥控确认功能----------------------------------------*/  
  if (key_ok==1)                   
  {
   DelayM(8);
/*---------------------主菜单时选项选择确认功能-----------------------------------*/
   if(key_ok==1&&w==1&&menu2==0)
   {   
    key_ok=0;
    menu2=1;
    w=0;
    switch(e) //进入相应子菜单
    {
     case 0: 
       d=0;
       set_info(d);
       break;
     case 1: t=0;
       set_inch(t);
       break;
     case 2: a=0;
       set_cons(a);
       break;
    }
   }
/*---------------------子菜单时选项选择确认功能-----------------------------------*/
   if(key_ok==1&&w==0&&menu2==1)
   {   
    key_ok=0;
    switch(e) //各子菜单确认键功能定义
    {
     
     case 0: 
          if(d==0)
         { info();}
        if(d==1)
         { initcard();}
        if(d==2)
         { menu2=0; w=1; mainmenu(0);}
       break;
     case 1:
        if(t==0)
       {incharg();}  
        if(t==1)
         {menu2=0;w=1;mainmenu(1);}
        break;
     case 2:
        if(a==0)
          {consume();}         
        if(a==1)
         {menu2=0;w=1;mainmenu(2);}
        break;
    }   
   }
   key_ok=0;
  }

/*--------------红外遥控确认功能----------------------------------------*/

/*---------------------遥控键盘输入功能-----------------------------------*/
  if(key0==1||key1==1||key2==1||key3==1||key4==1||key5==1||key6==1||key7==1||key8==1||key9==1||key_back==1||key_dot==1)
  {
     DelayM(8);
     if(key0==1||key1==1||key2==1||key3==1||key4==1||key5==1||key6==1||key7==1||key8==1||key9==1||key_back==1||key_dot==1)
     {
    if(w==0&&menu2==1)
    {
     set_inch_input();
     key0=0;
     key1=0;
     key2=0;
     key3=0;
     key4=0;
     key5=0;
     key6=0;
     key7=0;
     key8=0;
     key9=0;
     key_back=0;
     key_dot=0;     
    }
   }
  }
/*---------------------遥控键盘输入功能-----------------------------------*/
 }
}

1

路过

鸡蛋

鲜花

握手

雷人

刚表态过的朋友 (1 人)

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部