找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2585|回复: 2
收起左侧

RC522设计刷卡的51单片机代码

[复制链接]
ID:164151 发表于 2018-6-13 17:25 | 显示全部楼层 |阅读模式
毕业设计刷卡代码

单片机源程序如下:
  1. #include "LCD1602.h"
  2. #include "mfrc522.h"
  3. #include "CardAction.h"
  4. #include "key.h"                         

  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. sbit Buzzer=P3^5;//蜂鸣器接口定义,低电平响
  8. sbit Jdq=P3^7;//继电器接口定义,低电平吸合
  9. sbit ChangeKey=P3^2;//切换按键
  10. sbit Key=P3^2;//切换按键

  11. uchar ReturnValue=0;//读卡返回值
  12. uchar ModeFlag=0;//模式标志位 0-验证刷卡开门模式    1-注册卡模式    2-注销卡模式

  13. uchar i=0,t=0,In_Code=0;
  14. uchar IN_TAXT[4]="0000";
  15. uchar NOW_CODE[]="123456E";                //mima
  16. uchar num[]="123A456B789CD0EF";
  17. u8 receiveData;



  18. /*******************************************************************************
  19. * 函数名         :UsartInit()
  20. * 函数功能                   :设置串口
  21. * 输入           : 无
  22. * 输出                  : 无
  23. *******************************************************************************/
  24. void UsartInit()
  25. {
  26.         SCON=0X50;                        //设置为工作方式1
  27.         TMOD=0X20;                        //设置计数器工作方式2
  28.         PCON=0X80;                        //波特率加倍
  29.         TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
  30.         TL1=0XF3;
  31.         ES=1;                                                //打开接收中断
  32.         EA=1;                                                //打开总中断
  33.         TR1=1;                                        //打开计数器
  34. }




  35. void main()
  36. {
  37. Card_Init();//读卡器初始化
  38. LCD_init();//液晶1602初始化
  39. Buzzer=1;//蜂鸣器关闭
  40. Jdq=0;//继电器关闭
  41.          KeyState=0;
  42. UsartInit();
  43. while(1)
  44. {

  45.          
  46.          
  47.    while(ModeFlag==0)//卡验证模式
  48.    {
  49.                  write_string(1,0,"Verif Mode:");//第二行显示"Welcome!"
  50.                  ReturnValue=0;//验证卡返回值置0
  51.                  ReturnValue=Vreif_Sy();// 验证卡
  52.                  if(ReturnValue==4)//ReturnValue==4卡验证成功
  53.           {
  54.                                  write_string(2,0,"Welcome!");//第二行显示"Welcome!"
  55.                                  Buzzer=0; //开蜂鸣器
  56.                            Jdq=1;//开继电器
  57.                                  delay1ms(500);//延时0.5s
  58.                                  Buzzer=1;//关蜂鸣器
  59.                                  delay1ms(1000);//延时1s
  60.                                  write_string(2,0,"         ");//清第二行显示

  61. //                        EA=1;
  62. //                        ES=1;
  63.                                                                                                 Jdq=0;//关闭继电器

  64.                  for(t=0;t<100;t++)
  65.                                                  {                        SBUF='A';delay1ms(50);}

  66.           }
  67.                 else                         {SBUF='B';                }


  68.          if(ChangeKey==0)//切换按键被按下
  69.          {
  70.                         while(ChangeKey==0);//等待被弹起
  71.                         LCD_Clear();//清屏幕
  72.                         ModeFlag=1;//进入注册卡模式
  73.          }
  74.          if(Key==0)//切换按键被按下
  75.          {
  76.            while(Key==0);//等待被弹起
  77.            write_string(1,0,"CODE  Mode:");//第一行显示"Code Mode:"
  78.                  write_string(2,0,"         ");
  79.                  In_Code=1;//进入密码模式
  80.                 }
  81.    }//end for   while(ModeFlag==0)
  82.    while(ModeFlag==1)//卡注册模式
  83.    {
  84.                          write_string(1,0,"Register Mode:");//第一行显示"Register Mode:"
  85.                          ReturnValue=0;//ReturnValue重置0
  86.                          ReturnValue=CardReg();//卡注册
  87.                          if(ReturnValue==6)//ReturnValue==6卡注册成功
  88.                                 {
  89.                                                  write_string(2,0,"Success !");//第二行显示"Success !"
  90.                                                  Buzzer=0;   
  91.                                                  delay1ms(500);
  92.                                                  Buzzer=1;
  93.                                                  write_string(2,0,"         ");
  94.                                  
  95.                                 }
  96.                          if(ChangeKey==0)//切换按键被按下
  97.                          {
  98.                                                  while(ChangeKey==0);//等待被弹起
  99.                                                  LCD_Clear();
  100.                                                 ModeFlag=2;//进入注销卡模式
  101.                          }
  102.          if(Key==0)//切换按键被按下
  103.          {
  104.                          while(Key==0);//等待被弹起
  105.                          write_string(1,0,"CODE  Mode:");//第一行显示"Code Mode:"
  106.                          write_string(2,0,"         ");
  107.                          In_Code=1;//进入密码模式
  108.                 }

  109.    }//end for   while(ModeFlag==1)
  110.     while(ModeFlag==2)//卡注销模式
  111.    {
  112.      write_string(1,0,"Reset Mode:");//第一行显示"Reset Mode:"
  113.                  ReturnValue=0;//ReturnValue重置0
  114.                  ReturnValue=CardReset();//注销卡
  115.                  if(ReturnValue==6)//ReturnValue==6卡注销成功
  116.           {
  117.                          write_string(2,0,"Success !");//第二行显示"Success !"  
  118.                          Buzzer=0;   
  119.                          delay1ms(500);
  120.                          Buzzer=1;
  121.                          write_string(2,0,"         ");
  122.           }
  123.          if(ChangeKey==0)//切换按键被按下
  124.          {
  125.            while(ChangeKey==0);//等待被弹起
  126.            LCD_Clear();
  127.                  ModeFlag=3;//进入注销卡模式
  128.          
  129. }



  130.    }//end for   while(ModeFlag==2)
  131.          
  132.          while(ModeFlag==3)//密码输入模式
  133.         {
  134.                
  135.                 write_string(1,0,"CODE  Mode:");//第一行显示"Code Mode:"
  136.                 KeyDown();
  137.                 if(KeyState)
  138.                 {
  139.                         KeyState=0;

  140.                         IN_TAXT[i]=num[KeyValue];

  141. //                write_char(2,0,IN_TAXT[i]);//第一行显示"Code Mode:"
  142. //                write_char(2,2,NOW_CODE[i]);//第一行显示"Code Mode:"
  143. //                       
  144. //                write_string(2,0,NOW_CODE);//第一行显示"Code Mode:"
  145. //                       
  146. //                write_string(2,6,IN_TAXT);//第一行显示"Code Mode:"

  147. //                write_char(2,3,IN_TAXT[i]);//第一行显示"Code Mode:"
  148.                 i++;
  149.                         if(i==1)
  150.                         {
  151.                                                 write_string(2,0,"*          ");//第一行显示"Code Mode:"

  152.                         }
  153.                                                 if(i==2)
  154.                         {
  155.                                                 write_string(2,0,"**          ");//第一行显示"Code Mode:"

  156.                         }
  157.                                                                         if(i==3)
  158.                         {
  159.                                                 write_string(2,0,"***          ");//第一行显示"Code Mode:"

  160.                         }
  161.                                                                                                 if(i==4)
  162.                         {
  163.                                                 write_string(2,0,"****          ");//第一行显示"Code Mode:"

  164.                         }
  165.                                                                                                                         if(i==5)
  166.                         {
  167.                                                 write_string(2,0,"*****          ");//第一行显示"Code Mode:"

  168.                         }
  169.                                                                                                                                                 if(i==6)
  170.                         {
  171.                                                 write_string(2,0,"******          ");//第一行显示"Code Mode:"

  172.                         }

  173.                 }
  174.        
  175.                          
  176.                         if(i>=7)
  177.                         {
  178.                                 i=0;
  179.                                         if(NOW_CODE[0]==IN_TAXT[0]&&NOW_CODE[1]==IN_TAXT[1]&&NOW_CODE[2]==IN_TAXT[2]&&NOW_CODE[3]==IN_TAXT[3]&&NOW_CODE[4]==IN_TAXT[4]&&NOW_CODE[5]==IN_TAXT[5]&&NOW_CODE[6]==IN_TAXT[6])//密码正确
  180.                                          {
  181.                                                          write_string(2,0,"Success !      ");//第二行显示"Success !"
  182.                                                          Buzzer=0;  
  183.                            Jdq=1;//开继电器
  184.                                                  
  185.                                                          delay1ms(1000);
  186.                                                          Buzzer=1;
  187.                                                          write_string(2,0,"         ");
  188.                                                         In_Code=0;
  189.                                                  ModeFlag=0;
  190.                                                                                                                                                                       Jdq=0;//gaun继电器

  191.                                  for(t=0;t<100;t++)
  192.                                                  {                        SBUF='A';delay1ms(50);}


  193.                                          }

  194.                                           else {           write_string(2,8,"error");                                                                         SBUF='B';};
  195.                         }

  196.        
  197.                          
  198.                 if(ChangeKey==0)//切换按键被按下
  199.          {
  200.            while(ChangeKey==0);//等待被弹起
  201.            LCD_Clear();
  202. ……………………

  203. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
刷卡.zip (192.82 KB, 下载次数: 85)
回复

使用道具 举报

ID:379235 发表于 2018-7-27 12:53 | 显示全部楼层
楼主,RC522和单片机怎么连线呀
回复

使用道具 举报

ID:413292 发表于 2022-1-3 17:20 | 显示全部楼层
RC522源码这里定义了接口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表