历史上的今天
今天是:2025年02月05日(星期三)
2020年02月05日 | 51单片机+LCD1602电子密码锁程序
2020-02-05 来源:51hei
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) { case 0: {Step_0();break;} case 1:
史海拾趣
|
补充一些内容 (仅针对工包,行货不管这些)一:输出滤波元件 (看不懂的可以不管这一部分)功率稍微大点(250W)的电源,输出的滤波线圈就是2个.再大点(400W以上)的一般都是3个.输出滤波电感通常位于电源的那一大堆出线附近. ...… 查看全部问答> |
|
硬件工程师在硬件开发中要注意的事项 [ 2010-7-5 2:47:00 | By: szdiscuz ] 1 启动一个硬件开发项目 原始的推动力会来自于很多方面,比如市场的需要,基于整个系统架构的 ...… 查看全部问答> |
|
WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。 WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。… 查看全部问答> |
|
======WINCE6.0下这些异常怎么定位解决---Exception 'Undefined Instruction'++++Exception 'Pref ======WINCE6.0下这些异常怎么定位解决---Exception \'Undefined Instruction\'++++Exception \'Prefetch Abort\' ======… 查看全部问答> |
|
Xilinx Spartan-6 FPGA SP605 Embedded Development Kit 试用报告 v1.0 Spartan-6 FPGA 嵌入式套件已试用完成,现已传递给下一位使用者,现在上报告!O(∩_∩)O~Xilinx Spartan-6 FPGA SP605 Embedded Development Kit试用报告 v1.0,目录如下: 报告前三节已基本完成,后三节将在v1.1中更新,谢谢!下载报告,请右击 ...… 查看全部问答> |
|
交流电流过负载时,加在该负载上的交流电压与通过该负载的交流电流产生相位差,人们便从中引出功率因数这一概念。人们生产、生活用电来自电网,电网提供频率为50Hz或60Hz的交流电。作为交流电的负载有电阻、电感、电容三种类型: 1、当交流电通过 ...… 查看全部问答> |
|
请问各位,怎么实现5438和电脑进行网口通信?我用的开发板是BW-DK5438的,上边的网口芯片是ENC28J60,怎么进行连接呢?用网络调试助手还是其他手段呢?在连接的时候,430的端口号和IP地址如何设定呢?谢谢了… 查看全部问答> |




