前段时间,家里正好需要换个rfid+密码的门禁。
淘了一个
1.png

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

3.png

现在已经实现了基本功能:
1.密码开锁
2.刷卡开锁
3.增加管理密码
4.增加开锁密码
5.增加开锁ic卡
其他可能也实现了一些,但是还没有来得及测试,后续还会继续完善。先分享给大家玩玩。有兴趣的可以一起来讨论哈。
单片机源程序如下:
  • #include <includes.H>
  • /*
  •         1.完成基本功能,刷卡,密码
  •         2.esp8266 连接(串口透传),能用电脑增加,删除ic
  •         3.esp8266远程升级?? 可能实现不了。
  •         4.最好能有个显示屏,显示状态。
  •         5.增加临时密码的功能,有效时间10分钟
  •         单片机64k
  •         30k 分给 程序
  •         34k 分给eeprom   0-511 第一个扇区 存储
  •                                         系统密码(6个字节) 和 通用PIN(6个字节) 和管理员卡号(4个字节) 以及 用户总数(2个字节)
  •                                          
  •                                          第二扇区 512字节,每个用户需要10个字节,大约存放51个用户
  • */
  • unsigned char idle_times = 0;   //空闲计时,没有刷卡,没有按键时开始计时。
  • void GPIO_CONFIG_INIT(void);
  • /////////////////////////////////////////////////////////////////////
  • //系统初始化
  • /////////////////////////////////////////////////////////////////////
  • void InitializeSystem()
  • {
  •         GPIO_CONFIG_INIT();
  • //        blockData_init();   //数据初始化
  •         key_init();
  •         
  •           led_init();
  •         init_uart();     //串口0初始化
  •         
  •         RFID_SPI_init();   //spi控制器-rfid
  •         
  •         init_timer0();    //按键扫描,led灯闪,蜂鸣器响控制,RFID扫描
  •         
  •         beep_init();
  •         PN512_Init(0);
  •         
  •         user_init();
  •         
  •         lock_ctrl_init();
  •         
  •         printf("Init ok! 20210814\n");
  •                     
  • }
  • void main()
  • {
  • //        INT8U i = 0;        
  •         
  •         InitializeSystem();
  •         
  •         while(1)
  •         {
  •                 handle_key_function();   //状态机切换
  •                
  •                 led_change_state();                  //根据状态改变led的闪烁情况        
  •                                 
  •                 scan_card();
  •         //        printf("xxxx----");
  •         }        
  • }
  • void GPIO_CONFIG_INIT(void)
  • {
  •     P0M0 = 0x00;
  •     P0M1 = 0x00;
  •     P1M0 = 0x00;
  •     P1M1 = 0x00;
  •     P2M0 = 0x00;
  •     P2M1 = 0x00;
  •     P3M0 = 0x00;
  •     P3M1 = 0x00;
  •     P4M0 = 0x00;
  •     P4M1 = 0x00;
  •     P5M0 = 0x00;
  •     P5M1 = 0x00;
  •     P6M0 = 0x00;
  •     P6M1 = 0x00;
  •     P7M0 = 0x00;
  •     P7M1 = 0x00;        
  • }
  • 复制代码