基于51单片机实现简易密码锁功能

发布者:Harmonious222最新更新时间:2023-02-01 来源: zhihu关键字:51单片机 手机看文章 扫描二维码
随时随地手机看文章

具体功能的实现:

按下不同的按键,在LCD1602显示屏中可以出现不同的数字密码,如果输入错误,会显示ERR,反之显示ON;如果密码输错3次,则蜂鸣器报警30s同时在此期间无法输入密码。按键的功能有重置密码,取消,确认三种功能。

器件:AT89C51,排阻,LCD1602,若干电阻,电源,按键,蜂鸣器,三极管

Proteus仿真原理图:

知识介绍:

①存储器介绍:

存储器主要芯片AT24C02:

AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。

②为什么蜂鸣器要接NPN晶体管?

NPN型三极管进行驱动,因为单片机的引脚驱动能力有限,蜂鸣器的功率比较大,所以需要通过三极管来驱动。

③为什么P0口接上拉电阻

因为P0口是准双向口,即是开漏输出的,当P0口作为并行口使用时,只能输出低电平,不能输出高电平,需要接一个上拉电阻才能输出高电平。

主要代码(C语言)KEIL5实现:

主函数代码:

#include

#include "Delay.h"

#include "LCD1602.h"

#include "MatrixKey.h"

#include "Beep.h"

#include "AT24C02.h"


unsigned char KeyNum;

unsigned int password,count; 

unsigned int scount; 

unsigned int rightpass ; 

sbit led = P3^0;

sbit P22 = P2^2;


void main()

{  

  P22 = 0;

  rightpass = 2001;

  LCD_Init(); 

  while(1)

  {

      

      KeyNum = MatrixKey();

      LCD_ShowString(1,1,"PASSWORD");

      if(KeyNum)

    {

      

        if(KeyNum <= 10) 

      {

        

            led = 1;

            if(count < 4)

          {

            password*=10; 

            password += KeyNum % 10; 

            count++;    

          }

        LCD_ShowNum(2,1,password,4); 

      }

        if(KeyNum == 13)

      {

        rightpass = password;

        password = 0;

        count = 0;   

        LCD_ShowNum(2,1,password,4);

      }    

        if(KeyNum == 11) 

      {

      

            if(password == rightpass)   

          {

              LCD_ShowString(1,14,"ON "); 

              led = 0;

              password = 0;

              count = 0;  

              LCD_ShowNum(2,1,password,4);

          }else{                       

              LCD_ShowString(1,14,"ERR"); 

              scount++;

                if(scount == 3)  

              {

                int i = 60;   

                while(i--)    

                {

                  Beep();

                }

                Delay(30000); 

                scount = 0; 


              }

                password = 0;

                count = 0;  

                LCD_ShowNum(2,1,password,4);

          }

        

      }

        if(KeyNum == 12)

      {

        password = 0;

        count = 0;

        LCD_ShowNum(2,1,password,4);

      }  

      

   }  

  }

}


关键字:51单片机 引用地址:基于51单片机实现简易密码锁功能

上一篇:基于51单片机实现继电器控制照明设备
下一篇:基于51单片机实现LED模拟交通灯

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved