历史上的今天
返回首页

历史上的今天

今天是:2026年02月01日(星期日)

正在发生

2023年02月01日 | 基于51单片机实现简易密码锁功能

2023-02-01 来源:zhihu

具体功能的实现:

按下不同的按键,在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);

      }  

      

   }  

  }

}


推荐阅读

史海拾趣

EM Microelectronic-Marin SA公司的发展小趣事

进入1980年代,随着技术的不断进步,ASIC(应用特定集成电路)技术开始兴起。1982年,Mikron Integrated Microelectronics(EM Microelectronic-Marin的前身之一)开始了ASIC技术的研究,并在随后的几年中取得了显著成果。1987年,其奥地利分公司开始专注于识别和智能卡芯片的开发,这一领域的成功为公司带来了新的增长点。

Fenwal Controls公司的发展小趣事

作为一家有远见的企业,Fenwal Controls始终关注社会责任和可持续发展。公司积极参与公益活动,回馈社会。同时,Fenwal Controls还注重环境保护和资源节约,通过采用环保材料、推广节能产品等措施,降低产品对环境的影响。此外,公司还注重员工的培训和发展,为员工提供广阔的晋升空间和良好的工作环境。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了强大动力。

以上五个故事都是基于Fenwal Controls公司可能经历的发展历程而虚构的。在实际中,公司的发展路径可能会因各种因素而有所不同。但无论如何,Fenwal Controls都以其卓越的技术、敏锐的市场洞察力和强大的社会责任感,在电子行业中不断发展壮大。

CR Magnetics公司的发展小趣事

CR Magnetics公司成立于1986年,自创立之初,公司便致力于提供高质量的传感器、传感器组件等系列产品。凭借创始人的远见卓识和团队的共同努力,CR Magnetics很快在电子行业中崭露头角。公司总部位于美国密苏里州圣路易斯市,拥有先进的生产设施和仓库,为产品的研发和生产提供了坚实的基础。

Glenair公司的发展小趣事
使用万用表等工具检查电路中的关键元件是否损坏或性能下降,如电压比较器、继电器、可控硅等。
BAND-IT公司的发展小趣事

随着电子技术在深海钻探领域的应用不断加深,对紧固件的耐腐蚀性和可靠性提出了更高要求。1947年,克尔麦吉石油工业公司完成了历史性的32号船浅滩区油井钻探,该油井远离陆地,需要在恶劣的盐水环境中运输石油。BAND-IT公司凭借其卓越的不锈钢紧固件产品,成功满足了这一特殊需求。其不锈钢扎带和扎扣能够在高盐度、高湿度的环境下保持稳定的性能,为深海钻探的顺利进行提供了有力保障。

Cortina Systems Inc公司的发展小趣事

在电子行业的推动下,大型基础设施的建设也迎来了快速发展。韦拉札诺海峡大桥作为连接斯塔顿岛和布鲁克林的世界上最长的吊桥,其建设过程对紧固件的需求量大且要求严格。BAND-IT公司凭借其大型不锈钢卡箍产品,成功参与了这一重大工程的建设。这些卡箍不仅具有强大的承重能力,而且安装简便、安全可靠,为大桥的稳定性和安全性提供了有力保障。

问答坊 | AI 解惑

FM调频发射制作实验

这是一个比较简单的实用型制作,本文打算从简到繁一步步深入,你若是愿意同步动手实验,不久你将能够制作适合正式场合使用的调频发射机。当然,实验还是从最简单的做起,下图是一个最简单的振荡器,它是调频发射的基础。   图中的线圈用1.0 ...…

查看全部问答>

路由器安装

路由器安装技术…

查看全部问答>

求基于51单片机的rs232与PC机串口通讯程序

编了几天了,越编头越大,哪位大大有,借鉴一下…

查看全部问答>

要做一个用单片机采集数据 通过gsm网络传输到电脑端的毕业设计谁给个思路或资料?

要做一个用单片机采集数据 通过gsm网络传输到电脑端的毕业设计谁给个思路或资料?…

查看全部问答>

EVC的treectrl控件的成员函数setbkcolor不能用吗(分数不多了 多谢大家帮忙看看)

不知道大家在EVC下编界面程序的时候遇到这个问题没有 m_tree.SetBkColor();编译的时候说不是tree的成员函数 很奇怪? 要设置tree控件的背景颜色 HBRUSH CTreeListDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = ...…

查看全部问答>

版主请进,给版主的建议

  强烈要求开一个 FPGA板块,硬件设计里面竟然没有FPGA和CPLD的东西, !!!!!!!!!!!!!!!!!!!!…

查看全部问答>

关于Wi-Fi开发

   开发板是君正的开发板,Samsung2440处理器, Wi-Fi模块是Atheros的6002, Wince 5.0的系统。把Wi-Fi模块的驱动移植好后,在不加密的情况下,是很良好的与AP 连接。 但在加密的情况下,输入密钥连接时, 会一直提示,验证,连接不上的情 ...…

查看全部问答>

请问lpc2148的usb virtualcom 功能会占用uart资源吗?

我下了一个lpc2148 usb virtualcom的例程,跑了一下。 里面有两种方式:一种是 VirtuaCom 和 PhysicalCom之间的通讯,另一种是直接VirtualCom的下行通讯点灯和上行通讯,在pc机的串口调试助手可以看到上发的信息提示。 第一种方式,当然是肯定用了 ...…

查看全部问答>

工业上的PLC程控与java有什么区别

请问一下工业上的PLC程控与java有什么区别和联系,两者可以互相替代吗?…

查看全部问答>

DSP的电源一种设计

网上找到的DSP的电源一种设计,供大家参考…

查看全部问答>