找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 952|回复: 0
打印 上一主题 下一主题
收起左侧

单片机图书馆门禁管理系统

[复制链接]
跳转到指定楼层
楼主
ID:1024008 发表于 2022-5-24 18:22 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本设计主要采用AT89C52单片机和mcm200模块实现Mifare 1射频卡的识别和卡上信息的采集,RS485通讯接口和单片机控制系统连接来对Mifare非接触式智能射频卡进行相应的读写操作。读卡距离约为25毫米。当卡进入射频天线频带时,卡上的数据将被读取并显示在顶部PC上。读卡器可以在平时独立工作。mcm200读卡模块采用AT89C52单片机和8K字节闪存作为控制器。
对于软件部分,需要读写IC卡的内部信息,并与最高管理计算机进行通信。也就是说,主要通过串行通信程序的设计和调试,无卡时显示时钟,有卡时读取卡上的数据并显示在计算机屏幕上,由读卡程序和编程DS1302执行。

程序如下:
lcd_init()                                        //LCD初始化设定
{                                                        
        lcd_wcmd(0x38);                        
        Delay(1);
        lcd_wcmd(0x0c);                        
        Delay(1);
        lcd_wcmd(0x06);                        
        Delay(1);
        lcd_wcmd(0x01);                        //清除LCD的显示内容
        Delay(1);
}
LCD1602()
{
        lcd_pos(0x03);                                // 显示ID:
        lcd_wdat(dis2[0]);
        lcd_wdat(dis2[1]);
        lcd_wdat(dis2[2]);
        lcd_pos(0x06);                                // 显示ID号
        lcd_wdat(dis5[ID_DATA[0]/16]);
        lcd_wdat(dis5[ID_DATA[0]%16]);
        lcd_wdat(dis5[ID_DATA[1]/16]);
   lcd_wdat(dis5[ID_DATA[1]%16]);
        lcd_wdat(dis5[ID_DATA[2]/16]);
        lcd_wdat(dis5[ID_DATA[2]%16]);
        lcd_wdat(dis5[ID_DATA[3]/16]);
        lcd_wdat(dis5[ID_DATA[3]%16]);

        lcd_pos(0x40);                        // 读到卡,请进,WALK UP!
        if(falg==1)
        {         
                lcd_wdat(dis3[0]);
                lcd_wdat(dis3[1]);
                lcd_wdat(dis3[2]);
                lcd_wdat(dis3[3]);
                lcd_wdat(dis3[4]);
                lcd_wdat(dis3[5]);
                lcd_wdat(dis3[6]);
                lcd_wdat(dis3[7]);
                lcd_wdat(dis3[8]);
                lcd_wdat(dis3[9]);
                lcd_wdat(dis3[10]);
                lcd_wdat(dis3[11]);
                lcd_wdat(dis3[12]);
                lcd_wdat(dis3[13]);
                lcd_wdat(dis3[14]);
                lcd_wdat(dis3[15]);
        }
    lcd_pos(0x40);                        // 没读到卡或者卡没有权限显示,welcome you!!
        if(falg==0)
        {         
            lcd_wdat(dis4[0]);
                lcd_wdat(dis4[1]);
                lcd_wdat(dis4[2]);
                lcd_wdat(dis4[3]);
                lcd_wdat(dis4[4]);
                lcd_wdat(dis4[5]);
                lcd_wdat(dis4[6]);
                lcd_wdat(dis4[7]);
                lcd_wdat(dis4[8]);
                lcd_wdat(dis4[9]);
                lcd_wdat(dis4[10]);
                lcd_wdat(dis4[11]);
                lcd_wdat(dis4[12]);
                lcd_wdat(dis4[13]);
                lcd_wdat(dis4[14]);
                lcd_wdat(dis4[15]);
        }               
}  

        当系统开始供电时进入工作状态,初始化接着开启天线,当初始化结束后便开始寻找天线范围内的卡片,当有卡刷入时开始选定卡片,输入卡片ID号,接着可以进行对卡片的添加或删除权限的操作。当选择卡片有权限时门打开,当无权限时门不打开。

status = PcdRequest(PICC_REQALL, g_ucTempbuf);
//返回卡片类型#define PICC_REQALL 0x26 寻天线区内所有卡
                                 if(status!= MI_OK)            //读不到卡,显示清0;
                                 {
                                        LED=1;
                                                TYPE_DATA[0]=0;         
                                                TYPE_DATA[1]=0;
                                                ID_DATA[0]=0;
                                                ID_DATA[1]=0;
                                                ID_DATA[2]=0;
                                                ID_DATA[3]=0;
                                                falg_pro=0;
                                 }
if (status == MI_OK) //读到卡
                {         
                                                 LED=0;
                                                 TYPE_DATA[0]=g_ucTempbuf[0];
                                                 TYPE_DATA[1]=g_ucTempbuf[1];
                                                  status = PcdAnticoll(g_ucTempbuf);   //防冲撞 ,返回卡片ID号 4字节
                                 if (status == MI_OK)
                                 {
                                                 status = PcdSelect(g_ucTempbuf);    //选定卡片  ,输入卡片ID号
                                         if (status == MI_OK)
                                         {         
                                                                     if(falg_pro==0)//声音提示标志
                                                                                 {
                                                                                         falg_pro=1;
                                                                                         pro();
                                                                                 }        
                                                                         ID_DATA[0]=g_ucTempbuf[0];
                                                                         ID_DATA[1]=g_ucTempbuf[1];
                                                                         ID_DATA[2]=g_ucTempbuf[2];
                                                                         ID_DATA[3]=g_ucTempbuf[3];
                        init_k();//将卡写成门卡,或者清门卡
                        readk(); //读卡,读字节3的数据判断是否是AA
                                                                     if(value_DATA[3]==0xaa)//权限正确,标志写1
                                                                         {
                                                                                 falg=1;//
                                                                         }
                                         }           
                                 }
                     }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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