×
单片机 > 单片机程序设计 > 详情

51单片机+LCD1602电子密码锁程序

发布时间:2020-12-22 发布时间:
|

24c02采用IIC与单片机通信,其详细通信时序参考24C02数据手册。我们只需使用At24c02Read(unsigned char addr)和At24c02Write(unsigned char addr,unsigned char dat)即可。


一、实验现象

将线连接好并将程序下载后,可以看到1602上显示:

              

此时可以按下任意键继续

在这里我们可以“1”或“9”选择开锁或者是修改密码。如果这里选择的开锁,按下确定键,此时会提示输入密码,初始密码默认为888888,输入密码

然后按下确定键,如果密码正确则会显示:

并且可以看到继电器模块指示灯亮并可以听到继电器闭合的声音。

如果密码错误则会提示:Error.


如果需要修改密码,则选择Change password

这里会提示输入密码:

输入原密码

按下确认键,如果密码正确会提示输入新密码,

输入密码后按下确认键,会提示OK并返回到待机画面。


单片机源程序如下:

/**************************************************************************************

*                              电子密码锁                                                                                                  *

实现现象:下载程序输入正确密码,会听到继电器吸合的声音

硬件连接:

           P1 -->矩阵键盘

                                         P20--> EEPROM模块SDA

                                         P21--> EEPROM模块SCL

                                         P22-->继电器模块J15

                                         

                                         矩阵键盘:

                                         0      1      2       3

                                         

                                         4      5      6       7

                                         

                                         8      9    返回    确定

                                         

                                         [        DISCUZ_CODE_22        ]nbsp;     [        DISCUZ_CODE_22        ]nbsp;     [        DISCUZ_CODE_22        ]nbsp;      $

注意事项:无                                                                                                                                                                  

***************************************************************************************/


#include "reg52.h"                       //此文件中定义了单片机的一些特殊功能寄存器

#include "lcd.h"

#include "key.h"

#include "i2c.h"


#define u16 unsigned int           //对数据类型进行声明定义

#define u8 unsigned char


sbit AS=P2^2;               //继电器


/*****************************************************************************/


/*****************************************************************************/

u8 pw_num,Error_Num,PassWord_Length=6;

u8 PASSWORD[]={8,8,8,8,8,8,0,0,0,0};

u8 INPUT_PW_Tab[10];

u8 key_num,Step,Step5,Load_first_flag=0;

/*****************************************************************************/


/*******************************************************************************/

bit result_flag,Input_suc_flag;

bit List1=0;

/*****************************************************************************/


/*******************************************************************************/

void Step_0();

void Step_1();

void Step_2();

void Step_3();

void Step_4();

          

void Step_5();

                 void Step5_0();

           void Step5_1();

           void Step5_2();

           void Step5_3();

           void Step5_4();

           void Step5_5();

void Step_6();

/********************************************************************************/


/*******************************************************************************/

void CipherComparison();

void input_password(bit m);

void Read_Password();




/*******************************************************************************

* 函 数 名       : main

* 函数功能                 : 主函数

* 输    入       : 无

* 输    出             : 无

*******************************************************************************/

void main()

{        

        u8 data1,a;

        //        ShowString(0x00," Pechin Science ");  

        //        At24c02Write(0,0);                                                //开机显示密码

        LcdWriteCom(0x01);  //清屏

        for(data1=0;data1

        {

                a=At24c02Read(data1)+0x30;

                 LcdWriteData(a);        

          delay(1000);        

  }

        

        delay(1000);

        LcdInit();

        delay(1000);

        Step=0;

        Step5=0;

        Error_Num=0x00;

  Read_Password();

        

    //保存 密码长度

//                for(j=0;j<10;j++)

//                {

//                        At24c02Write(j,j);

//                        delay(100);        

//                }

//        


        

        while(1)

                                {        

                                                                key_num=KeyDown();                   //读取输入值


                                                                                switch(Step)

                                                                                {


关键字:51单片机  LCD1602  电子密码锁 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法