历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2020年09月10日 | 单片机电子密码锁代码+Proteus仿真(24C02+LCD1602显示)

2020-09-10 来源:51hei

基于51单片机的电子密码锁按键设置6位密码,输入密码若密码正确,则锁打开。显示open!
密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。
1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open!
2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。
3.若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。
4.24C02有复位、掉电保存密码功能
按键排列方式:     1  2 3  A

  4 5  6  B

  7 8  9  C

  * 0  #  D

ABC无定义、 *号键为取消当前操作、#号键为确认、D键为修改密码自己焊接的电路,首次使用时输入:131420,对密码进行初始化,当显示:initpassword,证明密码初始化完成,此时的密码为:000000。然后可以改密了

按下 * 键或复位键,可以关锁并退出。当输入密码错误后,报警并锁定键盘3秒钟。

修改密码:在开锁状态下,再次输入正确的密码并按下 # 键,此时听到两声提示,输入新的六位密码并按 D 键,再重复输入一次新密码并按 D ,会听到两声提示音,表示重设密码成功,内部保存新密码并存储。如两次输入的新密码不一样,则重设密码失败。


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序如下:

//包含头文件

#include

#include

//宏定义

#define LCM_Data  P0                  //将P0口定义为LCM_Data

#define uchar unsigned char

#define uint  unsigned int

//1602的控制脚

sbit lcd1602_rs=P2^5;

sbit lcd1602_rw=P2^6;

sbit lcd1602_en=P2^7;


sbit Scl=P3^4;                        //24C02串行时钟

sbit Sda=P3^5;                        //24C02串行数据


sbit ALAM = P2^1;                //报警       

sbit KEY = P3^6;                //开锁


bit  pass=0;                        //密码正确标志

bit  ReInputEn=0;                //重置输入允许标志       

bit  s3_keydown=0;                //3秒按键标志位

bit  key_disable=0;                //锁定键盘标志


unsigned char countt0,second;        //t0中断计数器,秒计数器


void Delay5Ms(void);                //声明延时函数


unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                 //控盘扫描控制表

//液晶显示数据数组

unsigned char code start_line[]        = {"password:       "};

unsigned char code name[]                  = {"===Coded Lock==="};        //显示名称

unsigned char code Correct[]         = {"     correct    "};                //输入正确

unsigned char code Error[]           = {"      error     "};          //输入错误

unsigned char code codepass[]        = {"      pass      "};

unsigned char code LockOpen[]        = {"      open      "};                //OPEN

unsigned char code SetNew[]         = {"SetNewWordEnable"};

unsigned char code Input[]           = {"input:          "};                //INPUT

unsigned char code ResetOK[]         = {"ResetPasswordOK "};

unsigned char code initword[]        = {"Init password..."};

unsigned char code Er_try[]                = {"error,try again!"};

unsigned char code again[]                = {"input again     "};


unsigned char InputData[6];                                                                        //输入密码暂存区

unsigned char CurrentPassword[6]={0,0,0,0,0,0};                         //读取EEPROM密码暂存数组

unsigned char TempPassword[6];

unsigned char N=0;                                //密码输入位数记数

unsigned char ErrorCont;                        //错误次数计数

unsigned char CorrectCont;                        //正确输入计数

unsigned char ReInputCont;                         //重新输入计数

unsigned char code initpassword[6]={0,0,0,0,0,0};                        //输入管理员密码后将密码初始为000000

unsigned char code adminpassword[6]={1,3,1,4,2,0};                        //输入管理员密码后将密码初始为000000



//=====================5ms延时==============================

void Delay5Ms(void)

{

        unsigned int TempCyc = 5552;

        while(TempCyc--);

}


//===================400ms延时==============================

void Delay400Ms(void)

{

unsigned char TempCycA = 5;

unsigned int TempCycB;

while(TempCycA--)

{

  TempCycB=7269;

  while(TempCycB--);

}

}


//=============================================================================================

//================================24C02========================================================

//=============================================================================================


void mDelay(uint t) //延时

{

        uchar i;

           while(t--)

           {

                   for(i=0;i<125;i++)

                   {;}

           }

}

   


void Nop(void)                  //空操作

{

        _nop_();                  //仅作延时用一条语句大约1us

        _nop_();

        _nop_();

        _nop_();

}


/*****24c02程序参照24c02时序图*****/

/*起始条件*/


void Start(void)

{

        Sda=1;

        Scl=1;

        Nop();

        Sda=0;

        Nop();

}



/*停止条件*/

void Stop(void)

{

        Sda=0;

        Scl=1;

        Nop();

        Sda=1;

        Nop();

}


/*应答位*/

void Ack(void)

{

        Sda=0;

        Nop();

        Scl=1;

        Nop();

        Scl=0;

}


/*反向应答位*/

void NoAck(void)

{

        Sda=1;

        Nop();

        Scl=1;

        Nop();

        Scl=0;

}


/*发送数据子程序,Data为要求发送的数据*/

void Send(uchar Data)

{

           uchar BitCounter=8;

           uchar temp;

           do

           {

                   temp=Data;                                           //将待发送数据暂存temp

                   Scl=0;

                   Nop();

                   if((temp&0x80)==0x80)                   //将读到的数据&0x80

                   Sda=1;

                   else

                   Sda=0;

                   Scl=1;

                   temp=Data<<1;                                   //数据左移

                   Data=temp;                                           //数据左移后重新赋值Data

                   BitCounter--;                                   //该变量减到0时,数据也就传送完成了

           }

           while(BitCounter);                                   //判断是否传送完成

           Scl=0;

}


/*读一字节的数据,并返回该字节值*/

uchar Read(void)

{

    uchar temp=0;

        uchar temp1=0;

        uchar BitCounter=8;

        Sda=1;

        do

        {

                Scl=0;

                Nop();

                Scl=1;

                Nop();

                if(Sda)                                   //数据位是否为1

                        temp=temp|0x01;           //为1 temp的最低位为1(|0x01,就是将最低位变为1)

推荐阅读

史海拾趣

Holt Integrated Circuits公司的发展小趣事

自成立以来,Holt Integrated Circuits便专注于为航空电子行业提供高性能的集成电路解决方案。四十多年来,Holt始终站在技术前沿,为全球超过400家制造商提供模拟和混合信号IC数据总线解决方案。从F-16到A-350等先进飞行器,Holt的IC产品已成为飞行控制、导航、发动机管理、通信、安全系统及机上娱乐系统的核心部件。这种长期且稳定的合作关系,不仅奠定了Holt在航空电子领域的领导地位,也推动了整个行业的技术进步。

DB Unlimited公司的发展小趣事

DB Unlimited始终将技术创新作为公司发展的核心驱动力。公司不断投入大量资源进行技术研发和创新,推出了多项具有行业领先水平的音频技术。这些技术的推出不仅提升了公司的竞争力,也推动了整个音频行业的发展。DB Unlimited的技术创新能力和成果得到了业界的广泛认可。

Arcolectric公司的发展小趣事

Arcolectric始终坚持品质至上的原则,对产品的每一个环节都进行严格的质量控制。公司不仅通过国际制造架构的合作来确保产品的高品质,还积极引进先进的生产设备和技术人才,不断提升产品的性能和可靠性。这种对品质的执着追求使得Arcolectric的产品在全球范围内得到了广泛的认可和赞誉。

Display Engineering Services公司的发展小趣事

随着技术的不断进步和市场需求的日益多样化,Arcolectric开始积极拓展其产品线,并逐渐将产品应用于电脑、电源设备及家用电器等多个领域。公司通过不断创新和研发,成功推出了一系列符合市场需求的新产品,进一步扩大了市场份额。

Chemi-Con公司的发展小趣事

随着电子行业的快速发展,Chemi-Con公司不断加大对研发的投入,致力于技术创新和产品升级。公司研发团队在铝电解电容器的基础上,不断推出性能更优、体积更小、寿命更长的产品,满足了市场对于高效、可靠电容器的迫切需求。此外,Chemi-Con还积极拓展产品线,涉足了多层陶瓷电容器、薄膜电容器等多个领域,为客户提供更加丰富的选择。

Fuji Teminal Industry Co Ltd公司的发展小趣事

Chemi-Con公司的历史可以追溯到XXXX年,当时铝电解电容器在日本首次成功实现产品化。这不仅是电子行业的一个里程碑,也是Chemi-Con公司传奇故事的起点。公司创始人凭借对技术的深刻理解和市场的前瞻性,敏锐地捕捉到了铝电解电容器的巨大潜力,并决定将其作为公司的主营业务。在创业初期,Chemi-Con面临着资金、技术和市场等多方面的挑战,但创始人凭借着坚定的信念和不懈的努力,带领公司逐步攻克难关,奠定了在铝电解电容器领域的领先地位。

问答坊 | AI 解惑

关于PLL的用法?

关于PLL的用法?altera PLL 这些管脚 怎么与FPGA实际硬件的管脚相连接 …

查看全部问答>

请教WINCE下GPRS拨号上网遇到问题

WINCE5.0下GPRS拨号上网遇到如下问题: 在:开始->设置->网络和拨号连接      中建立新连接,建好后连接时弹出窗口:已与您拨叫的远程计算机断开。请验证“波特率”设置并重试连接。 确定波特率设置没有问题。请问这个是什么 ...…

查看全部问答>

NRF24L01无线模块发射程序

最近从网上下了一NRF24L01无线模块发射程序,改了一下,准备用AT89S51单片机控制,但是运行之后没有反应(不知道模块是否正常运行)。麻烦大家给看一下问题出在哪,程序如下: #include #include #include \"api.h\" /********************** ...…

查看全部问答>

做linux驱动的迷茫啊!(不是技术问题)希望前人指引方向!

    我今年毕业,去了一家很大的公司去做嵌入式Linux驱动,公司很好、很大,但是当我去实习时发现,公司的驱动已经做得很成熟了,而且公司的产品更新换代很慢,几乎驱动是不用改的,所以感觉进这样的公司没办法去得到实践,是不是在这样 ...…

查看全部问答>

GSM TC35的问题

西门子的TC35模块,有没有集成SIM插槽,收发天线等等呢? 如果我想用单片机对其编程,使其能够发短信到一特定号码上,是不是只要一个RS232的串口线和其连接就够了呢? 有用单片机控制TC35发送短信到特定号码的实例源代码吗?  刚刚学习 ...…

查看全部问答>

远程视频监控的PCB设计问题

请问各位大大,关于DSP远程无线视频监控的的6层PCB电路板设计,其中多层电路板如何分层,在另外想询问一下,哪里能下到TI公司的TMS320DM647的电路原理图和元件封装!…

查看全部问答>

重金请高手帮忙 嵌入式数据

本人急需嵌入式数据应用程序。需要实现下列功能: 基于Windows CE的应用程序可以捕获来自于用户串口数据,并将它们存储在设备上的SQL Server CE数据库中,然后应用程序可以周期性地将SQL Server CE 数据库中的数据通过http上载到SQL Server上的数 ...…

查看全部问答>

贴片电容 没标容值怎么判断其大小?谢谢!!!越详细越好最好附图

贴片电容 没标容值怎么判断其大小?谢谢!!!越详细越好最好附图…

查看全部问答>

如何得到某个usb接口上的U盘的盘符?

举个例来说明这个问题,假设一台PC上有编号1、2、3、4的4个usb port,分别插入4支u盘,我如何用程序来实现:得到编号x的usb port上U盘盘符?    因为插入u盘的次序不同,某个usb port上的U盘盘符可能会变化,如果按顺序插入U盘,编号1、 ...…

查看全部问答>