找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4538|回复: 0
收起左侧

DIY电磁密码锁 PCB 原理图设计,Proteus仿真和单片机源程序

[复制链接]
ID:188940 发表于 2017-4-12 19:22 | 显示全部楼层 |阅读模式
自行DIY电磁密码锁  在我的设计中没有用密码存储器 程序在仿真中是没有问题 我也做过实物 但是由于封装的问题 打印的板子不合适 就不能实现功能 还有我的程序还有不足的地方 大家就一起讨论  我也准备用密码存储器来搞 等我搞出来了在分享 我会上传我的PCB设计、仿真设计和程序!

原理图(用AD画的,附件里面有工程文件):

原理图

原理图


仿真原理图:

仿真图

仿真图


pcb文件(用AD画的,附件里面有工程文件):

PCB图

PCB图


0.png
程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uint code jianzhi[]={0xee,0xde,0xbe,0x7e,
  5.                      0xed,0xdd,0xbd,0x7d,
  6.                                          0xeb,0xdb,0xbb,0x7b};

  7. uint code number[]= {0xc0,0xf9,0xa4,0xb0,
  8.                      0x99,0x92,0x82,0xf8,
  9.                                          0x80,0x90};

  10. uint  mima[]={0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9};

  11. uchar mima1[6];

  12. uchar table1[]="Please enter a 7";
  13.                                                            
  14. uchar table2[]=" bit password !";
  15.         
  16. uchar table3[]=" Hello user !";

  17. uchar table4[]="*******";

  18. sbit rr=P1^0;        //绿灯
  19. sbit rd=P1^1;        //蓝灯
  20. sbit re=P1^2;        //红灯
  21. sbit OK=P3^3;        //OK按钮
  22. sbit delete=P3^4;//delete按钮
  23. sbit bao=P3^5;        //警报器
  24. sbit rs=P3^5;
  25. sbit wr=P3^6;
  26. sbit e=P3^7;



  27. void delay(uchar del)
  28. {
  29. uint i,j;
  30. for(i=0;i<del;i++)
  31.    for(j=0;j<130;j++);
  32. }

  33. void write_com(uchar com)
  34. {
  35.         P0=com;
  36.         rs=0;
  37.         wr=0;
  38.         e=0;
  39.         delay(1);
  40.         e=1;
  41.         delay(1);
  42.         e=0;
  43. }

  44. void write_data(uchar dat)
  45. {
  46.         P0=dat;
  47.         rs=1;
  48.         wr=0;
  49.         e=0;
  50.         delay(1);
  51.         e=1;
  52.         delay(1);
  53.         e=0;
  54. }

  55. void initi()
  56. {
  57.         write_com(0x38);//16*2显示,5*7点阵,8位数据口
  58.         write_com(0x0c);//开显示,显示光标,光标不闪烁
  59.         write_com(0x06);//地址自动加一,不移屏
  60.         write_com(0x01);//清屏
  61. }

  62. void cle()
  63. {
  64.         write_com(0x01);//清屏
  65. }

  66. void xianshi()
  67. {
  68.         uchar i=0;
  69.         write_com(0x80+0x00);
  70.     while(table1[i]!='\0')
  71.     {
  72.     write_data(table1[i++]);
  73.     delay(1);                                                   //显示模块
  74.         }
  75.         i=0;
  76.         write_com(0x80+0x41);
  77.     while(table2[i]!='\0')
  78.     {
  79.     write_data(table2[i++]);
  80.     delay(1);                                                   //显示模块
  81.         }
  82. }

  83. void xianshi1()
  84. {
  85.         uchar i=0;
  86.         write_com(0x80+0x00);
  87.     while(table3[i]!='\0')
  88.     {
  89.     write_data(table3[i++]);
  90.     delay(1);                                                   //显示模块
  91.         }
  92. }

  93. void xianshi2(int b)
  94. {
  95.    uint i;
  96.         write_com(0x80+0x41);
  97.     for(i=0;i<b+1;i++) //显示自定义字符
  98. {
  99. write_data(table4[i]);
  100. delay(5);
  101. }
  102. }

  103. void panduan()
  104. {
  105. uint i,flag;
  106. for(i=0;i<6;i++)
  107. if(mima1[i]==mima[i])
  108. flag=1;
  109. else
  110. flag=0;

  111. if (flag==0)
  112. {
  113. re=0;
  114. delay(1000);
  115. re=1;                                         //判断模块
  116. }
  117. else if (flag==1)
  118. {
  119. rr=0;
  120. delay(1000);
  121. rr=1;
  122. }

  123. }




  124. void key ()
  125. {
  126. uchar zhi,lie,i,j,k=-1,shuzhi=0;
  127. delay(1000);
  128. cle();
  129. xianshi1();
  130. while(1)
  131. {        
  132.     P2=0xf0;
  133.         if(P2!=0xf0)
  134.         {
  135.                 delay(10);
  136.                 if(P2!=0xf0)
  137.                 {                                                                                 
  138.                         lie=P2;
  139.                         P2=0x0f;
  140.                         zhi=lie|P2;
  141.                         for(i=0;i<12;i++)
  142.                         {
  143.                                 if(zhi==jianzhi[i])
  144.                         {   
  145.                                 shuzhi=i;
  146.                                 k++;                                                                                 //按键模块
  147.                                 rd=0;
  148.                                 delay(1000);
  149.                                 rd=1;
  150.                                 break;
  151.                         }
  152.                 }
  153.                 for(j=k;j<k+1;j++)
  154.             mima1[j]=number[shuzhi];
  155.                 xianshi2(k);
  156.                 while(P2!=0x0f);
  157.                 delay(10);
  158.                 }
  159.         }
  160.         
  161.         if(OK==0&&k==6)
  162.         {
  163.         panduan(); //判断调用
  164.         k=-1;
  165.         cle();
  166.         xianshi1();
  167.         }
  168.           if(delete==0)
  169.         {
  170.         for (j=-1;j<k;j++)
  171.         mima[j]=0xc0;
  172.         cle();
  173.         xianshi1();
  174.         k=-1;                //清零调用

  175. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png 0.png

全部设计资料下载:
按键和显示组合pcb电路板.zip (9.92 MB, 下载次数: 47)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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