找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于stc89c52单片机开发的2个串口通信的密码锁仿真

[复制链接]
跳转到指定楼层
楼主
功能基本完善,就差一个显示时钟的。
新人第一次发帖请多多支持!


单片机源程序如下:

  1. #include<reg52.h>       
  2. #include"lcd.h"
  3. #include"eeprom.h"
  4. sbit LED=P1^7;
  5. sbit KEY1=P1^0;
  6. sbit KEY2=P1^1;
  7. sbit DOOR=P1^2;
  8. sbit CLOSE=P1^3;
  9. bit off;
  10. unsigned char code Init[13] = "Set password:";
  11. unsigned char code Save[13] = "Do you save? ";
  12. unsigned char code CnCh[15] = "Input password:";
  13. unsigned char code Titl1[16]="password error! ";
  14. unsigned char code Titl2[18]="password correct!";
  15. unsigned char code Titl3[10]="Loading...";                           //password error  password correct
  16. unsigned char MM[6];
  17. unsigned char SMM[6];
  18. unsigned char i1,j,flag2,flag1,flag3,flag4,flag5,flag,flag6,a;
  19. int num;
  20. void delay(uchar c)  
  21. {
  22.     uchar a,b;
  23.     for(b=4*c;b>0;b--)
  24.     for(a=113;a>0;a--);
  25. }

  26. void comout(uchar com)
  27. {
  28. SBUF=com;
  29. while(!TI);
  30. TI=0;
  31. }

  32. void InitUART(void)
  33. {
  34.     TMOD = 0x20;
  35.     SCON = 0x50;
  36.     TH1 = 0xFD;
  37.     TL1 = TH1;
  38.     EA = 1;
  39.     ES = 1;
  40.     TR1 = 1;
  41. }

  42. void mima()
  43. {
  44.     if(num<=9&&num>=0)
  45.         {
  46.         if(i1==5)
  47.         {comout(1);}
  48.         if(i1!=5)
  49.         {comout(0);}
  50.            MM[i1]=num;
  51.           
  52.            flag1=0;
  53.         }
  54.         if(i1==6&&SBUF=='A')
  55.         {flag3=1;}
  56.         if(num<=9&&num>=0&&flag4==3)
  57.         {
  58.          SMM[j]=num;
  59.          flag5=0;
  60.         }
  61.          

  62. }

  63. void LCD_w()
  64. {
  65. unsigned char i;
  66.                 if(flag2==0&&flag3==0&&flag==0)
  67.                 {
  68.                         LcdWriteCom(0x02);
  69.                         delay(5);
  70.                          for(i=0; i<13; i++)
  71.                         {
  72.                                 LcdWriteData(Init[i]);       
  73.                         }
  74.                 }
  75.                    if(flag3==0)
  76.                    {
  77.                         LcdWriteCom(0xC0);
  78.                         for(i=0;i<6;i++)
  79.                         {        flag2=1;
  80.                                 LcdWriteData('0'+MM[i]);
  81.                         }
  82.                         }
  83.                
  84.                 if(flag3==1)
  85.                 {
  86.                         LcdWriteCom(0x02);
  87.                         delay(5);                               
  88.                        
  89.                                   for(i=0; i<13; i++)
  90.                         {
  91.                                 LcdWriteData(Save[i]);       
  92.                         }
  93.                                 flag4=1;
  94.                                 flag3=2;
  95.                          }
  96.                   if(flag4!=2&&flag4!=3&&flag==0) {
  97.                         LcdWriteCom(0xC0);
  98.                         for(i=0;i<6;i++)
  99.                         {
  100.                                 LcdWriteData('0'+MM[i]);          //
  101.                         } }
  102.                  if(flag4==2)
  103.                  {          LcdInit();
  104.                                   LcdWriteCom(0x02);
  105.                                 delay(5);                               
  106.                        
  107.                                   for(i=0; i<15; i++)
  108.                         {
  109.                                 LcdWriteData(CnCh[i]);       
  110.                         }
  111.                        
  112.                         delay(5);
  113.                         flag4=3;
  114.                  }
  115.                  if(flag4==3)                  //
  116.                 {        LcdWriteCom(0xC0);
  117.                          delay(5);
  118.                         for(i=0;i<6;i++)
  119.                         {
  120.                                 LcdWriteData('0'+SMM[i]);        //
  121.                         }
  122.                         }
  123.                 /////////////////////////////////////////////////////






  124. }

  125. void display()
  126. {
  127. uchar n,bb,i,y;
  128. if(j==6)
  129. {EA=0;
  130.   for(n=0;n<6;n++)
  131.           {
  132.           bb=0;
  133.            delay(5);
  134.            if(At24c02Read(n)!=SMM[n]&&bb==0)
  135.                 {
  136.                   y++;
  137.                  
  138.                 }
  139.           }
  140.           
  141.          if(y==0)
  142.          {
  143.           flag4=4;
  144.           LcdWriteCom(0x01);
  145.                         delay(5);
  146.                   for(i=0; i<18; i++)
  147.                         {
  148.                                 LcdWriteData(Titl2[i]);       
  149.                         }
  150.                    LcdWriteCom(0xC0);
  151.                         for(i=0;i<10;i++)
  152.                         {
  153.                                 LcdWriteData(Titl3[i]);
  154.                         }
  155.                         KEY1=0;
  156.                         KEY2=1;
  157.                         for(a=0;a<6;a++)
  158.                         {SMM[j]=0;}

  159.                         a=0;
  160.                
  161.                
  162.                 }
  163.                                                
  164.          
  165.           if(y>0)
  166.           {
  167.            flag4=4;
  168.           LcdWriteCom(0x01);
  169.                         delay(5);
  170.                   for(i=0; i<16; i++)
  171.                         {
  172.                                 LcdWriteData(Titl1[i]);       
  173.                         }
  174.                   
  175.                   delay(100);
  176. //                  flag4=2;
  177. //                  LcdWriteCom(0x01);
  178.                   for(i=0;i<6;i++)
  179.                   {SMM[i]=0;}
  180.                   i=0;
  181.                   flag6=1;
  182.                   j=0;
  183.                   y=0;
  184.           }       
  185.           j=0;          

  186. }

  187. EA=1;
  188. comout(1);
  189. }                         


  190. void main()
  191. {

  192. LcdInit();
  193. InitUART();
  194. while(1)
  195. {
  196. if(DOOR==0&&CLOSE==0)
  197. {display();
  198. mima();
  199. LCD_w();
  200.        if(flag4==1&&num=='B')
  201.            {
  202.                 EA=0;
  203.                 for(i1=0;i1<6;i1++)
  204.                 {
  205.                 delay(10);
  206.                    At24c02Write(i1,MM[i1]);
  207.                  delay(5);
  208.                 }
  209.                 for(a=0;a<6;a++)
  210.                         {MM[a]=0;}
  211.                 a=0;
  212.                 flag=1;                                                           //
  213.                 if(At24c02Read(5)!=0)
  214.                    {LED=0;
  215.                            flag1=10;
  216.                         flag2=10;
  217.                         flag3=10;
  218.                         i1=0;
  219.                    }
  220.                 flag4=2;

  221.            }
  222.           EA=1;
  223. }
  224.   }

  225. }

  226. void UARTInterrupt(void) interrupt 4
  227. {

  228. RI=0;

  229. num=SBUF;
  230.   
  231.   if(num=='A'&&flag1==0&&flag==0)
  232.   {
  233.    i1++;
  234.    num=-1;
  235.    flag1=1;

  236.   }
  237.        
  238.   if(num=='C'&&flag4!=2&&flag4!=3&&flag6==0)        //
  239.   {
  240.   i1=0;
  241.   flag3=0;
  242.   flag2=0;
  243.   comout(0);
  244.   }


  245.     if(num=='A'&&flag4==3&&flag5==0&&flag==1)
  246.   {
  247.    j++;
  248.    num=-1;
  249. //  flag1=1;
  250.    flag5=1;
  251.   }
  252.     if(num=='C'&&flag5==0&&flag6==0)          //
  253.   {
  254.   j=0;
  255. //  i1=0;
  256.    flag5=1;

  257.   }


  258.         if(num=='C'&&flag6==1)          //
  259.   {          
  260.           
  261.                                      for(a=0;a<6;a++)
  262.                   {SMM[a]=0;}
  263.                   LcdWriteCom(0x02);
  264.                   delay(10);
  265.                   a=0;
  266.                    flag4=2;
  267.                   flag6=0;

  268.   }

  269.    if(CLOSE==0&&DOOR==1)
  270.    {
  271.            KEY1=0;
  272.         KEY2=0;
  273.    }
  274.       if(CLOSE==1&&DOOR==1)
  275.    {
  276. ……………………

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

所有资料51hei提供下载:
密码锁.zip (118.04 KB, 下载次数: 44)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:939359 发表于 2021-6-20 21:01 | 只看该作者
兄弟这个怎么运行啊  修改密码啥的  那个电机的作用是什么
回复

使用道具 举报

板凳
ID:959883 发表于 2021-8-22 20:35 | 只看该作者
介绍一下功能呗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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