二哲科技

  • 228 主题
  • 781 帖子
  • 2343 积分
  • 身份:版主
  • 论坛新秀 灌水之王
  • E币:1580

51单片机实战-rfid门禁-自己写代码实现

2021-9-21 14:54:21 显示全部楼层
前段时间,家里正好需要换个rfid+密码的门禁。
淘了一个
1.png

在搜索的过程中发现是51单片机(STC8f2k64s2)实现的,回来就倒腾倒腾了一下。
2.png

3.png

现在已经实现了基本功能:
1.密码开锁
2.刷卡开锁
3.增加管理密码
4.增加开锁密码
5.增加开锁ic卡
其他可能也实现了一些,但是还没有来得及测试,后续还会继续完善。先分享给大家玩玩。有兴趣的可以一起来讨论哈。
单片机源程序如下:

  1. #include <includes.H>

  2. /*
  3.         1.完成基本功能,刷卡,密码
  4.         2.esp8266 连接(串口透传),能用电脑增加,删除ic
  5.         3.esp8266远程升级?? 可能实现不了。
  6.         4.最好能有个显示屏,显示状态。
  7.         5.增加临时密码的功能,有效时间10分钟



  8.         单片机64k
  9.         30k 分给 程序
  10.         34k 分给eeprom   0-511 第一个扇区 存储
  11.                                         系统密码(6个字节) 和 通用PIN(6个字节) 和管理员卡号(4个字节) 以及 用户总数(2个字节)
  12.                                          
  13.                                          第二扇区 512字节,每个用户需要10个字节,大约存放51个用户

  14. */
  15. unsigned char idle_times = 0;   //空闲计时,没有刷卡,没有按键时开始计时。

  16. void GPIO_CONFIG_INIT(void);




  17. /////////////////////////////////////////////////////////////////////
  18. //系统初始化
  19. /////////////////////////////////////////////////////////////////////
  20. void InitializeSystem()
  21. {
  22.         GPIO_CONFIG_INIT();

  23. //        blockData_init();   //数据初始化
  24.         key_init();
  25.         
  26.           led_init();

  27.         init_uart();     //串口0初始化
  28.         
  29.         RFID_SPI_init();   //spi控制器-rfid
  30.         
  31.         init_timer0();    //按键扫描,led灯闪,蜂鸣器响控制,RFID扫描
  32.         
  33.         beep_init();

  34.         PN512_Init(0);
  35.         
  36.         user_init();
  37.         
  38.         lock_ctrl_init();
  39.         
  40.         printf("Init ok! 20210814\n");
  41.                     
  42. }


  43. void main()
  44. {
  45. //        INT8U i = 0;        
  46.         
  47.         InitializeSystem();
  48.         
  49.         while(1)
  50.         {
  51.                 handle_key_function();   //状态机切换
  52.                
  53.                 led_change_state();                  //根据状态改变led的闪烁情况        
  54.                                 
  55.                 scan_card();

  56.         //        printf("xxxx----");
  57.         }        
  58. }



  59. void GPIO_CONFIG_INIT(void)
  60. {
  61.     P0M0 = 0x00;
  62.     P0M1 = 0x00;
  63.     P1M0 = 0x00;
  64.     P1M1 = 0x00;
  65.     P2M0 = 0x00;
  66.     P2M1 = 0x00;
  67.     P3M0 = 0x00;
  68.     P3M1 = 0x00;
  69.     P4M0 = 0x00;
  70.     P4M1 = 0x00;
  71.     P5M0 = 0x00;
  72.     P5M1 = 0x00;
  73.     P6M0 = 0x00;
  74.     P6M1 = 0x00;
  75.     P7M0 = 0x00;
  76.     P7M1 = 0x00;        
  77. }


您需要登录后才可以评论 登录 | 立即注册

最新评论

楼层直达:
快速回复
0
0
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /1 下一条
快速回复 返回列表