前段时间,家里正好需要换个rfid+密码的门禁。
淘了一个
在搜索的过程中发现是51单片机(STC8f2k64s2)实现的,回来就倒腾倒腾了一下。
现在已经实现了基本功能:
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;
- }
复制代码
讲解视频分享在b站了,基本功能的实现都稍微讲了一下。
使用状态机,定时器扫描等实现的。
https://www.bilibili.com/video/BV1Aw411d76F/
全部代码51hei附件下载:
stc8f2k64s2-door-lock(2021-08-14).7z
(108.15 KB, 下载次数: 141)
|