专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

自己做的门禁系统1

作者:佚名   来源:本站原创   点击数:  更新时间:2011年06月10日   【字体:

由于上个月丢了家钥匙,今天无聊中没啥事儿,就想自己动手设计个自己用的门禁来玩,至少钥匙丢了也不愁了,还可以一卡通。由于基本上目前没硬件来设计,那就先用软件来模拟一下吧,到时感觉不错再买元器件。
    今天估计也做不了什么,就大概分析下机器的一些东东吧。
    首先考虑使用的卡的类型,是使用id卡还是ic卡还是二代身份证呢?身份证嘛怕丢,不能老是随身带。id卡和ic卡都行,不过ic卡的读头要贵很多又不方便自做,所以最后决定用id卡吧,就算自己做也没什么,大不了买个芯片读曼彻斯特*码也应该容易,况且读卡器,卡片也便宜嘛。
    id读卡器到时买最便宜的就行了,不用多想什么了,只要记得到时搞清楚到手的参数就行,不要拿个维根32的当成维根26的来用,就可能走很多弯路了。
    主控芯片就用89s52吧,二个外部中断,二个定时中断,32个I/O应该够用了。
    存储器的话只存开门卡号和密码等数据,不用太大,就用24c02够了,几十个用户容量够家里用了。
    其他的配件都是小件散件,用到时再考虑吧。
    用电脑做上位机进行联网远程开门,加卡删卡等操作,电脑软件以后做好下位机后再写了,唉,英语不行,VB,DP等流行软件都不能用,看来只能用易语言了。
    现在到晚上了,今天白天已经画好了proteus图,大概说一一分布:1,电源12v输入12v/5v输出。2,主控P3口控制继电器蜂鸣器LED输出和曼码,IIC,中断(读卡器输入)输入和串口通讯。P2,P1口留做读卡器输入(用查询法来读数据)和信号输出。P0口做键盘输入了。主控就暂时就样分布到时需要时再改吧。
今天就先做到就里,任务才刚刚开始,单片机程序估计要几天才能写好吧。 


制作自用门禁第1个程序


今天开始写下位机也就是89s52的程序。一个早上才搞定键盘扫描程序,程序基本上正确,只是明明加了松开检测了,怎么有时在按下时会发送呢。实在是检查不出哪儿的问题,也许是模拟软件的问题吧。
    现在突然想到怎么先写键盘程序呢,应该写重要的先才对啊,不然到最后重要的部分没写成那不是浪费很多精力?但是没有实际硬件做起来费劲,串口通讯不知怎么用软件模拟,也就是因为这样早上的键盘程序都是*软件调试和蜂鸣器来提示来叛断是否正确,所以做起来很慢。如果有终端来显示那就方便多了。不想买液晶显示,虽然1602液晶应该没多少钱但是怕以后用不到还是用电脑来做显示吧,接上串口来通讯就行。但问题是现在要有芯片,数据线,基本外围元件和洞洞板等等才行。家里街上和工业城市不一样,东西应该不好买,到市区里去看看吧,不行再淘宝了,马上去了……
   贴上我的键盘程序:

/*////////////////////////////////////
函数原型: uchar key(void)
函数说明:键盘扫描
版本:V1.0.0        
程序员:LIY12586
////////////////////////////////////*/
uchar key(void)
{
   uchar temp,number;
   P0=0x0f;
   
   if(P0!=0x0f)
   {
      P0=0xfe;
      if(P0!=0xfe)
       {      
         temp=P0;
         switch (temp)
         {             //11110000
            case 0xee:    //01111110
               number=4;
               
               break;
            case 0xde:
               number=3;
            
               break;
            case 0xbe:
               number=2;
               
               break;
            case 0x7e:
               number=1;
               
               break;
         }
      
         while(P0!=0xfe);
         sound(1);
         return number;
       }
      P0=0xfd;
      if(P0!=0xfd)
       {      
         temp=P0;
         switch (temp)
         {
            case 0xed:
               number=8;
               break;
            case 0xdd:
               number=7;
               break;
            case 0xbd:
               number=6;
               break;
            case 0x7d:
               number=5;
               break;
         }
         while(P0!=0xfd);
         sound(1);
         return number;
       }
      P0=0xfb;
       //temp=P0;
      //temp=temp|0xf0;
      if(P0!=0xfb)
       {      
         temp=P0;
         switch (temp)
         {
            case 0xeb:
               number=12;
               break;
            case 0xdb:
               number=11;
               break;
            case 0xbb:
               number=10;
               break;
            case 0x7b:
               number=9;
               break;
         }
         while(P0!=0xfb);
         sound(1);
         return number;
       }
      P0=0xf7;
       //temp=P0;
      //temp=temp|0xf0;
      if(P0!=0xf7)
       {      
         temp=P0;
         switch (temp)
         {
            case 0xe7:
               number=16;
               break;
            case 0xd7:
               number=15;
               break;
            case 0xb7:
               number=14;
               break;
            case 0x77:
               number=13;
               break;
         }
         while(P0!=0xf7);
         sound(1);
         return number;
       }      
   }return 0;
}
 
关闭窗口

相关文章