单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

隆重推出LCD12864 F16位密码锁(单片机源码+Proteus仿真)

  [复制链接]
跳转到指定楼层
楼主
分享一个51单片机和12864液晶屏做的密码锁设计,开机后显示一个兔子和锁型标志,输入密码5次错误后会提示
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
   

单片机源码:
#include<reg51.h>
#include<12864.h>
#include<keypad.h>
#include<24C01.h>
#include<HZF.H>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^5;
sbit LED2=P1^6;
sbit spk=P1^7;
uchar idata key[16]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
uchar idata iic[16]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
void press(uchar *s);
void Delay10ms(void);
void main()
{
        uchar dat;
        uchar i=0,j=0,k;
        uchar x;
        LED1=1;
        LED2=1;
        spk=0;           
        LCD12864init();
        qiping();
        tpdisp(0, 0, tupian1);
        delay(50000);delay(50000);
        x=ReadB(iic,0x50,16);
        
        //----若密码不正确,循环执行do{}while()
        do{
                LED1=1;
                System();                  //显示:"请输入密码"字幕  
                press(key);
                if( (key[0]==iic[0]) && (key[1]==iic[1]) && (key[2]==iic[2]) && (key[3]==iic[3]) &&
                        (key[4]==iic[4]) && (key[5]==iic[5]) && (key[6]==iic[6]) && (key[7]==iic[7]) &&
                        (key[8]==iic[8]) && (key[9]==iic[9]) && (key[10]==iic[10])&&(key[11]==iic[11])&&
                        (key[12]==iic[12])&&(key[13]==iic[13])&&(key[14]==iic[14])&&(key[15]==iic[15]))
                        
                {
                        true();        
                        do
                        {
                                P3=0xf0;                                                        //键入1或2继续执行下面语句,否则等待
                                while(P3==0xf0);                                                
                                dat=key_scan();
                        }
                        while(dat!=0x01&&dat!=0x02);
                        if(dat==1)                                                       //开锁
                        {
                                LED1=0;
                                tpdisp(0, 0, tupian3);
                                delay(1000);
                                tpdisp(0, 0, tupian2);
                                delay(8000);
                                
                                for(i=0;i<120;i++){Delay10ms();}
                                continue;
                        }
                        
                        if(dat==2)//修改密码
                        {
                                do{
                                        System();
                                        press(key);
                                        again();
                                        press(iic);
                                        if( (key[0]==iic[0]) && (key[1]==iic[1]) && (key[2]==iic[2]) && (key[3]==iic[3]) &&
                                                (key[4]==iic[4]) && (key[5]==iic[5]) && (key[6]==iic[6]) && (key[7]==iic[7]) &&
                                                (key[8]==iic[8]) && (key[9]==iic[9]) && (key[10]==iic[10])&&(key[11]==iic[11])&&
                                                (key[12]==iic[12])&&(key[13]==iic[13])&&(key[14]==iic[14])&&(key[15]==iic[15]))
                                        {
                                                succeed();//修改密码成功
                                                for(i=0;i<100;i++){Delay10ms();}
                                                Delay10ms();
                                                x=SendB(iic,0x50,16);
                                                Delay10ms();        
                                                x=ReadB(iic,0x50,16);break;
                                        }
                                        else                             //修改密码不成功,重新修改
                                        {
                                                repeat();
                                                for(i=0;i<100;i++){Delay10ms();}
                                        }
                                }while(1);   
                        }        
                }
               
                else                                                                           //密码不正确,重新输入密码
                {
                        j++;
                        if(j==5)
                        {
                                for(i=0;i<8;i++)
                                {
                                        LED2=0;
                                        for(k=0;k<5;k++){Delay10ms();}
                                        LED2=1;
                                        for(k=0;k<5;k++){Delay10ms();}
                                }
                                j=0;
                        }
                        error();
                        for(i=0;i<50;i++){Delay10ms();}
                }
        }  
        while(1);                     
}

void Delay10ms(void)           //延时10ms
{
        uint i,j,k;
        for(i=5;i>0;i--)
                for(j=4;j>0;j--)
                        for(k=248;k>0;k--);
                        
}

void press(uchar *s)
{
    uchar dat;
        
        P3=0xf0;                                                                //保存第一位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {  
                   *s=dat;
                   Left();
                   star_12864(star,0x05,0);
           }
           s++;                  
           
           P3=0xf0;                                                          //保存第二位密码
           while(P3==0xf0);                                                
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {  
                   *s=dat;
                   Left();
                   star_12864(star,0x05,8);
           }
           s++;        
           
           P3=0xf0;                                                          //保存第三位密码
           while(P3==0xf0);                                                
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {   
                   *s=dat;
                   Left();
                   star_12864(star,0x05,16);
           }
           s++;        
           
           P3=0xf0;                                                          //保存第四位密码
           while(P3==0xf0);                                                
           dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {  
                   *s=dat;
                   Left();
                   star_12864(star,0x05,24);
           }
           s++;        
           
           P3=0xf0;                                                          //保存第五位密码
           while(P3==0xf0);                                                
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {  
                   *s=dat;
                   Left();
                   star_12864(star,0x05,32);
           }
           s++;        
           
           P3=0xf0;                                                          //保存第六位密码
           while(P3==0xf0);                                                
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {  
                   *s=dat;
                   Left();
                   star_12864(star,0x05,40);
           }
           s++;
           
           P3=0xf0;                                                                //保存第7位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {  
                   *s=dat;
                   Left();
                   star_12864(star,0x05,48);
           }
           s++;
           
           P3=0xf0;                                                                //保存第8位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
           {
                   *s=dat;
                   Left();
                   star_12864(star,0x05,56);
           }
           s++;
           
           P3=0xf0;                                                                //保存第9位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))        
           {  
                   *s=dat;
                   Right();
                   star_12864(star,0x05,0);
           }
           s++;
           
           P3=0xf0;                                                                //保存第10位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))        
           {  
                   *s=dat;
                   Right();
                   star_12864(star,0x05,8);
           }
           s++;
           
           P3=0xf0;                                                                //保存第11位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))        
           {  
                   *s=dat;
                   Right();
                   star_12864(star,0x05,16);
           }
           s++;
           
           P3=0xf0;                                                                //保存第12位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))        
           {   *s=dat;
           Right();
           star_12864(star,0x05,24);
           }
           s++;
           
           P3=0xf0;                                                                //保存第13位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))        
           {   *s=dat;
           Right();
           star_12864(star,0x05,32);
           }
           s++;
                                   P3=0xf0;                                                                //保存第14位密码
                                  while(P3==0xf0);
                                  dat=key_scan();
                                  if((dat!=0x0a)&&(dat!=0x0b))        
                                  {   *s=dat;
                                  Right();
                                  star_12864(star,0x05,40);
                                  }
                                  s++;
                                 
                                  P3=0xf0;                                                                //保存第15位密码
                                  while(P3==0xf0);
                                  dat=key_scan();
                                  if((dat!=0x0a)&&(dat!=0x0b))        
                                  {   *s=dat;
                                  Right();
                                  star_12864(star,0x05,48);
                                  }
                                  s++;
                                 
                                  P3=0xf0;                                                                //保存第16位密码
                                  while(P3==0xf0);
                                  dat=key_scan();
                                  if((dat!=0x0a)&&(dat!=0x0b))        
                                  {   
                                          *s=dat;
                                          Right();
                                          star_12864(star,0x05,56);
                                  }
                                  do
                                  {
                                          P3=0xf0;                                                        //键入Enter键盘继续执行下面语句,否则等待
                                          while(P3==0xf0);                                                
                                          dat=key_scan();
                                  }while(dat!=0x0b);
}

全部资料51hei下载地址:
16位LCD12864密码锁.rar (34.63 KB, 下载次数: 42)    
Proteus8.6及以上版本打开

评分

参与人数 9黑币 +177 收起 理由
Trump1438 + 10 赞一个!
yoxi + 12 绝世好帖!
zhengchong60 + 10 绝世好帖!
areyouok + 12 赞一个!
jinsheng7533967 + 35 绝世好帖!
刀刀见红 + 10
#include51.h + 10 绝世好帖!
Sawardeakar + 8 很给力!坛子最安全的密码锁了!没有之一!
admin + 70 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
jinsheng7533967 发表于 2019-1-16 04:50 | 只看该作者
哇塞!真的是16位的密码锁,还能改密码!顶起来!

评分

参与人数 1黑币 +15 收起 理由
areyouok + 15 很给力!

查看全部评分

回复

使用道具 举报

板凳
风花雪月@ 发表于 2019-1-16 13:40 来自手机 | 只看该作者
有点多啊。。。。
回复

使用道具 举报

地板
 楼主| shuisheng 发表于 2019-1-16 16:16 | 只看该作者

多多才益善!多才能更好的起到密码保护的效果。

评分

参与人数 5黑币 +83 收起 理由
就你?呸! + 10
站着说话不腰疼 + 15
钻牛尖滴刘尖尖 + 15
jinsheng7533967 + 35 赞一个!
#include51.h + 8 赞一个!

查看全部评分

回复

使用道具 举报

5#
hs88 发表于 2019-1-17 03:29 来自手机 | 只看该作者
缺少那么多文件
回复

使用道具 举报

6#
 楼主| shuisheng 发表于 2019-1-17 13:26 | 只看该作者
hs88 发表于 2019-1-17 03:29
缺少那么多文件

仿真文件不能用吗?

评分

参与人数 1黑币 +35 收起 理由
Sawardeakar + 35

查看全部评分

回复

使用道具 举报

7#
刀刀见红 发表于 2019-1-17 13:42 | 只看该作者
很好很好!很有借鉴作用!自己正在试着写,希望也能写出来!光会下学不到什么东东!

评分

参与人数 2黑币 +50 收起 理由
jinsheng7533967 + 35 很给力!
yoxi + 15 很给力!

查看全部评分

回复

使用道具 举报

8#
jinsheng7533967 发表于 2019-1-17 15:02 | 只看该作者
就是就是,学东西不能太偷懒了!只有勤练的人才能提高

评分

参与人数 4黑币 +45 收起 理由
#include51.h + 15
刀刀见红 + 10 很给力!
Sawardeakar + 15 赞一个!
yoxi + 5 很给力!

查看全部评分

回复

使用道具 举报

9#
Sawardeakar 发表于 2019-1-20 14:29 | 只看该作者
谢谢楼主的分享!这正在找的好东西

评分

参与人数 2黑币 +50 收起 理由
jinsheng7533967 + 35 赞一个!
yoxi + 15 很给力!

查看全部评分

回复

使用道具 举报

10#
zxq9781 发表于 2019-1-20 20:49 | 只看该作者
谢谢楼主的分享,学习一下。
回复

使用道具 举报

11#
zxq9781 发表于 2019-1-20 21:06 | 只看该作者
楼主不厚道吧,缺少那么多包含文件、、
回复

使用道具 举报

12#
 楼主| shuisheng 发表于 2019-1-21 04:37 | 只看该作者
zxq9781 发表于 2019-1-20 21:06
楼主不厚道吧,缺少那么多包含文件、、

仿真文件不能用吗?
回复

使用道具 举报

13#
L119157 发表于 2019-1-21 11:54 | 只看该作者
非常感谢楼主分享。另外楼上几位说的应该是程序里面包含了非keil自带头文件,每个人用的头文件不一样吧。
回复

使用道具 举报

14#
zxq9781 发表于 2019-1-21 12:11 | 只看该作者
shuisheng 发表于 2019-1-21 04:37
仿真文件不能用吗?

lcd 驱动文件没有, 不算完整资料,也不算完整源码吧  。
回复

使用道具 举报

15#
zxq9781 发表于 2019-1-21 12:14 | 只看该作者
也不会为了验证你的hex文件在去把仿真原理图给画一边
回复

使用道具 举报

16#
 楼主| shuisheng 发表于 2019-1-21 12:30 | 只看该作者
别人验过就好了!

评分

参与人数 1黑币 +8 收起 理由
#include51.h + 8 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

17#
刀刀见红 发表于 2019-1-21 12:33 | 只看该作者
zxq9781 发表于 2019-1-21 12:14
也不会为了验证你的hex文件在去把仿真原理图给画一边

为什么要给你源码?自己写不出来反怪别人了咯!能给你一个提示就很不错了!别人又没欠着你什么。

评分

参与人数 4黑币 +80 收起 理由
jinsheng7533967 + 35 很给力!
Trump1438 + 15 很给力!
yoxi + 15 赞一个!
Sawardeakar + 15 赞一个!

查看全部评分

回复

使用道具 举报

18#
jinsheng7533967 发表于 2019-1-21 12:43 | 只看该作者
zxq9781 发表于 2019-1-20 21:06
楼主不厚道吧,缺少那么多包含文件、、

明明是你自己不厚道,还真把自己当个人似的。别人能将做好的仿真文档共享出来给大家学习就是很好的。验不验证同你一毛钱关系也没有。我们也验证过!很好,很安全!超棒!本论坛独一无二!不服自己编去!

评分

参与人数 2黑币 +50 收起 理由
刀刀见红 + 35 很给力!
areyouok + 15 很给力!

查看全部评分

回复

使用道具 举报

19#
#include51.h 发表于 2019-1-22 04:38 | 只看该作者
shuisheng 发表于 2019-1-21 12:30
别人验过就好了!

验证过了,真的很好!很安全!

评分

参与人数 3黑币 +42 收起 理由
sheng7533967 + 15
Sawardeakar + 15 很给力!
yoxi + 12 很给力!

查看全部评分

回复

使用道具 举报

20#
ifree8 发表于 2019-1-22 12:07 | 只看该作者
非常不错!
回复

使用道具 举报

21#
jinsheng7533967 发表于 2019-1-26 18:46 | 只看该作者
这个密码锁真的杠杠的!

评分

参与人数 3黑币 +85 收起 理由
areyouok + 35 共享资料的黑币奖励!
shuisheng + 35 很给力!
刀刀见红 + 15 绝世好帖!

查看全部评分

回复

使用道具 举报

22#
areyouok 发表于 2019-1-27 22:04 | 只看该作者
很好!很棒!

评分

参与人数 3黑币 +40 收起 理由
yoxi + 15
Sawardeakar + 15 很给力!
刀刀见红 + 10 很给力!

查看全部评分

回复

使用道具 举报

23#
zhengchong60 发表于 2019-1-28 16:39 | 只看该作者
真的很好,谢谢了!

评分

参与人数 2黑币 +20 收起 理由
还有谁? + 8
找人PK + 12

查看全部评分

回复

使用道具 举报

24#
Sawardeakar 发表于 2019-2-3 00:40 | 只看该作者
这么好的东东终于抢到手了

评分

参与人数 1黑币 +35 收起 理由
jinsheng7533967 + 35

查看全部评分

回复

使用道具 举报

25#
shuisheng60 发表于 2019-2-3 21:20 | 只看该作者
很好用,么么哒!
回复

使用道具 举报

26#
yoxi 发表于 2019-2-6 21:56 | 只看该作者
51有你分享更精彩!

评分

参与人数 2黑币 +51 收起 理由
Trump1438 + 16
jinsheng7533967 + 35

查看全部评分

回复

使用道具 举报

27#
sheng7533967 发表于 2019-2-7 00:42 | 只看该作者
最好的密码锁让我给发现了

评分

参与人数 1黑币 +35 收起 理由
就你?呸! + 35

查看全部评分

回复

使用道具 举报

28#
Trump1438 发表于 2019-2-7 11:52 | 只看该作者
非常不错资料,收下了!

评分

参与人数 4黑币 +97 收起 理由
areyouok + 35
找人PK + 12
Sawardeakar + 35
#include51.h + 15

查看全部评分

回复

使用道具 举报

29#
#include51.h 发表于 2019-2-7 15:13 | 只看该作者
绝对是本论坛精品

评分

参与人数 6黑币 +142 收起 理由
jinsheng7533967 + 10
zhengchong60 + 15
站着说话不腰疼 + 12
shuisheng60 + 35
刀刀见红 + 35
yoxi + 35

查看全部评分

回复

使用道具 举报

30#
找人PK 发表于 2019-2-7 20:55 | 只看该作者
#include51.h 发表于 2019-2-7 15:13
绝对是本论坛精品

赞同!支持!膜拜!顶起!

评分

参与人数 1黑币 +35 收起 理由
shuisheng60 + 35

查看全部评分

回复

使用道具 举报

31#
站着说话不腰疼 发表于 2019-2-7 23:34 | 只看该作者
同赞!顶起!

评分

参与人数 2黑币 +24 收起 理由
钻牛尖滴刘尖尖 + 12
找人PK + 12

查看全部评分

回复

使用道具 举报

32#
钻牛尖滴刘尖尖 发表于 2019-2-8 17:01 | 只看该作者
最好最强最安全无敌的密码锁
回复

使用道具 举报

33#
站着说话不腰疼 发表于 2019-2-9 14:01 | 只看该作者
最棒的密码锁咯!
回复

使用道具 举报

34#
还有谁? 发表于 2019-2-10 21:02 | 只看该作者
不错资料,收下了!

评分

参与人数 1黑币 +35 收起 理由
shuisheng60 + 35

查看全部评分

回复

使用道具 举报

35#
就你?呸! 发表于 2019-2-11 13:31 | 只看该作者
这么强大的密码锁!收下!
回复

使用道具 举报

36#
277563114 发表于 2019-2-11 16:39 | 只看该作者
小白进来学习
回复

使用道具 举报

37#
cvi670 发表于 2019-2-13 09:50 | 只看该作者
不错的程序   
回复

使用道具 举报

38#
sheng7533967 发表于 2019-2-13 16:39 | 只看该作者

棒棒的程序  
回复

使用道具 举报

39#
春风十里吹死你 发表于 2019-2-19 19:15 | 只看该作者
不错的程序   

评分

参与人数 2黑币 +30 收起 理由
sheng7533967 + 15
zhengchong60 + 15

查看全部评分

回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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