前段时间,家里正好需要换个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; }复制代码