51单片机控制的万能密码锁

发布者:lidong4069最新更新时间:2022-01-18 来源: eefocus关键字:51单片机控制  74LS164  锁存器 手机看文章 扫描二维码
随时随地手机看文章

初始密码:12345678

此程序用51单片机控制74LS164锁存器来实现

单片机与存储器之间通过IIC 通讯来建立密码系统通讯

仿真启动开始设置密码

万能密码锁参考程序源代码:


#include

#include"intrins.h"

#include"key.h"

#include"xsh.h"

#include"24c02.h"

#define ulong unsigned long

bit BJCB=0;//报警标志

XG=0,//修改密码标志位

BJ=0,//报警标志位

SJ=0;//锁键盘标志位

// xg=0;//修改密码标志位

uchar PSWD0_0[16]={0};//密码输入缓存存储单元

//uchar code PSWD0_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//用户初始密码存储单元

//uchar PSWD1_0[16]={0};//读出密码缓存存储单元

uchar PSWD1_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};管理员初始密码存储单元

sbit OUT=P3^5;//输出端口

sbit L1=P0^2;//上电指示

sbit L2=P0^1;//开锁指示

sbit L3=P0^0;//报警指示

uint mg=0,//密码个数

KSC=0,//开锁次数

BJC=0,//报警次数

TCNTY=0,//用户按键定时次数累加

TCNTG=0,//管理员输入密码定时次数

yhsh,//用户输入标志位

glsh,//管理员输标志位

shw;//密码输完标志位

void yhmimaxig();//密码修改程序

void glmimaxig();//管理员修改程序

void bjyin(ulong t)

{

ulong c;

uint n;

for(c=0;c{

for(n=0;n<50;n++); //延时

BEEP=~BEEP; //取反输出到喇叭的信号

}

}

void delay_10ms(void)

{

uint i = 1000;

while(i–);

}

//定时中断服务函数//

void timer0() interrupt 1

{

uint i;

TH0=(65536-50000)/256; //对TH0 TL0赋值50MS定时

TL0=(65536-50000)%256; //重装计数初值

if(yhsh1)

{

TCNTY++;//用户定时计数

if(shw1)

{

TR0=0;

TCNTY=0;

}

if(TCNTY400)

{

TR0=0;//关闭T0定时器

TCNTY=0;

mg=0;//密码个数清零

L1=1;

for(i=0;i<2;i++)//声光报警电路

{

L3=0;

bjyin(1000);

L3=1;

delay(1000);

}

L1=0;

}

}

else if(glsh1)

{

TCNTG++;//管理员定时计数

if(shw1)

{

TR0=0;

TCNTG=0;

}

if(TCNTG400)

{

TR0=0;//关闭T0定时器

TCNTG=0;

mg=0;//密码个数清零

L1=1;

for(i=0;i<2;i++)//声光报警电路

{

L3=0;

bjyin(1000);

L3=1;

delay(1000);

}

L1=0;

}

}

}


void main()

{

uint i;

TMOD=0x01; //定时器工作在方式1

ET0=1;

EA=1;

TH0=(65536-50000)/256; //对TH0 TL0赋值

TL0=(65536-50000)%256; //使定时器0.05秒中断一次

//Read_page24c02(0x00,PSWD1_1,16);//向24c02里读用户初始密码

//i2cWrite24LC16B(0,0X20);

/第一次向24c02里写入初始管理员密码、用户密码、开锁次数/

for(i=0;i<16;i++) //用一次写一个向24c02里写

{

i2cWrite24LC16B(PSWD1_1[i],i);

delay_10ms;

}

for(i=0;i<16;i++) //用一次写一个向24c02里写

{

i2cWrite24LC16B(PSWD1_1[i],0x10+i);

delay_10ms;

} //proteus仿真时用,烧程序时,第一次用,第二次不用。

KSC=i2cRead24LC16B(0X20);

loop: L1=0;//上电红灯亮

L2=1;//开锁成功后绿灯亮

L3=1;//输错时黄灯亮报警

OUT=0;//开信号关闭

display_0(KSC);//开锁前显示


///密码输入/

if(SJ0)//锁键盘标志位为0

{

do

{

flag=0;//键盘标志位

key();

if(flag1&&num12) //判断是否为管理员功能键按下

{

goto gl;

}

if(flag1&&num<=9)

{

PSWD0_0[mg]=num;

mg++;//密码个数

}

if(flag1&&num14&&mg>=1)//输入错误删除

{

mg=mg-1;

}

if(mg1) //有密码键按下开定时器限时

{

TR0=1;

yhsh=1;

}

}

while(num!=15);

if(mg!=16)

{

for(i=mg;i<16;i++)

{

PSWD0_0[i]=0;

}

}

/密码比较电路

if(flag1&&num==15)

{ flag=0;

yhsh=0;

shw=1;

num=0;

for(i=0;i<16;i++) //从24c02里读出16个密码

{

PSWD1_1[i]=i2cRead24LC16B(i);

delay_10ms;

}

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

{

if(PSWD1_1[i]!=PSWD0_0[i])

{

BJCB=1;

break;

}

else

BJCB=0;


}

}

if(BJCB!=0)

{

BJC++;

if(BJC!=3)

{

BJCB=0; //第一次和第二次报警

delay(500);

mg=0;//密码个数清零

L1=1;

for(i=0;i<3;i++)//声光报警电路

{

L3=0;

display_3();

bjyin(1000);

L3=1;

delay(1000);

}

goto loop;

}

else if(BJC3)

{

BJC=0;

BJCB=0;

display_5();//三次输入密码失败,自锁

SJ=1;//锁键盘标志位

mg=0;//密码个数清零

L1=1;

for(i=0;i<2;i++)//声光报警电路

{

L3=0;

bjyin(1000);

L3=1;

delay(1000);

}

goto loop;

}

}

else

if(BJCB0)

{

KSC++;

display_1(KSC);

i2cWrite24LC16B(KSC,0X20);

if(KSC100)

{

SJ=1;

}

L2=0;

L1=1;

OUT=1;

mg=0;//密码个数清零

loop1:do //键盘扫描等待功能键按下

{

flag=0;

key();

if(flag)

{

flag=0;

switch(num)

{

case 13:

{

display_2();

do

{

flag=0;//键盘标志位

key();

if(flag1&&num<=9)

{

PSWD0_0[mg]=num;

mg++;//密码个数

}

if(flag1&&num14&&mg>=1)//输入错误删除

{

mg=mg-1;

}

if(mg16)

{

do //键盘扫描等待功能键按下

{

flag=0;

key();

}

while(num!=15);

}

}

while(num!=15);

if(mg!=16&&num15)

{

for(i=mg;i<16;i++)

{

PSWD0_0[i]=0;

}

}

if(flag1&&num15)

{

flag=0;

mg=0;

for(i=0;i<16;i++) //用一次写一个向24c02里写

{

i2cWrite24LC16B(PSWD0_0[i],i);

delay_10ms;

}

display_1(KSC);

do //键盘扫描等待功能键按下

{

flag=0;

key();

}

while(num!=11); //按下返回键,锁锁返回

{

goto loop;

}

}

};break;


case 11: {

goto loop;

//break;

}

}

}

}

while(flag!=0);//如果设置密码键按下

goto loop1;

// i2cWrite24c02_page(0x00,PSWD1_1,mg);

}

}

else

{

do

{

flag=0;

key();

}

while(num!=12);//判断是否为管理员功能键按下

gl:do//管理员输入密码

{

flag=0;

key();

if(flag1&&num<=9)

{

PSWD0_0[mg]=num;

mg++;//密码个数

}

if(flag1&&num14&&mg>=1)//删除键按下

{

mg=mg-1;

}

if(mg1)

{

TR0=1;

}//开定时器TO限5秒开锁

}

while(num!=15);

if(mg!=16&&num15)

{

for(i=mg;i<16;i++)

{

PSWD0_0[i]=0;

}

}

//管理员密码比较///

//Read_page24c02(0x10,PSWD0_1,16)

for(i=0;i<16;i++) //从24c02里读出16个密码

{

PSWD1_1[i]=i2cRead24LC16B((0x10+i));

delay_10ms;

}

if(flag1&&num==15)

{ flag=0;

shw=1;

num=0;

for(i=0;i{

if(PSWD1_1[i]!=PSWD0_0[i])

{ BJCB=1;

break;

}

else

BJCB=0;

}

}

if(BJCB!=0)

{

BJC++;

if(BJC!=3)

{

BJCB=0; //第一次和第二次报警


mg=0;//密码个数清零

L1=1;

for(i=0;i<2;i++)//声光报警电路

{

L3=0;

display_3();

bjyin(1000);

L3=1;

delay(1000);

}

display_1(KSC);

goto loop;

}

else

{

BJCB=0;

display_5();//三次输入密码失败,自锁

mg=0;//密码个数清零

delay(10000);

display_1(KSC);

goto loop;

}

}

else

{

SJ=0;

display_4();//管理员开锁显示

mg=0;

L2=0;

L1=1;

L3=0;//密码个数清零

do //键盘扫描等待功能键按下

{

flag=0;

key();

}

while(flag0); //如果设置密码键按下

if(flag1&&num13)

{

flag=0;

display_2();

do

{

flag=0;//键盘标志位

key();

if(flag1&&num<=9)

{

PSWD0_0[mg]=num;

mg++;//密码个数

}

if(flag1&&num14&&mg>=1)//输入错误删除

{

mg=mg-1;

}

if(mg16)

{

do //键盘扫描等待功能键按下

{

flag=0;

key();

}

while(num!=15);

}

}

while(num!=15);

if(mg!=16&&num15)

{

for(i=mg;i<16;i++)

{

PSWD0_0[i]=0;

}

}

if(flag1&&num15)

{

flag=0;

mg=0;

for(i=0;i<16;i++) //用一次写一个向24c02里写

{

i2cWrite24LC16B(PSWD0_0[i],(0x10+i));

delay_10ms;

}

display_4();

do //键盘扫描等待功能键按下

{

flag=0;

key();

}

while(num!=11); //按下返回键,锁锁返回

{

goto loop;

}

}

}

if(flag1&&num10)

{

KSC=0;

i2cWrite24LC16B(KSC,0X20);

display_1(KSC);

do //键盘扫描等待功能键按下

{

flag=0;

key();

}

while(num!=11);//按下返回键,锁锁返回

goto loop;

}

if(flag1&&num11)//按下返回键,锁锁返回

{

goto loop;

}

}

}

}

关键字:51单片机控制  74LS164  锁存器 引用地址:51单片机控制的万能密码锁

上一篇:51单片机控制的手机蓝牙遥控小车设计
下一篇:基于STC51单片机超声波测距

推荐阅读最新更新时间:2024-11-11 11:57

51单片机控制电机正反转
正反转可控的直流电机proteus仿真原理图: 单片机源程序如下: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit K1=P3^0; sbit K2=P3^1; sbit K3=P3^2; sbit P1_0=P1^0; sbit P1_1=P1^1; void motor_start(); void motor_turn(); void motor_pause(); void delay(uint x) { uchar i; while(x--) { for(i=0;i 120;i++);
[单片机]
<font color='red'>51</font><font color='red'>单片机控制</font>电机正反转
项目实战:51单片机控制交通信号灯
51单片机控制交通信号灯 说明:最近接了一个小项目,要在一个十字路口用单片机实现交通信号灯的控制 我试着用仿真软件做了一下,效果还可以,希望和大家一起学习 总体设计仿真图 单片机仿真设计部分 公路信号灯显示仿真部分 四个方向仿真设计部分 启动仿真后开始计时 C语言参考源代码: /***************************************************** 十字路口交通灯控制 C 程序 ******************************************************/ #define uchar unsigned char #define uint uns
[单片机]
项目实战:<font color='red'>51</font><font color='red'>单片机控制</font>交通信号灯
纳芯微推出车规级、耐高压、三线霍尔开关/锁存器NSM101x系列
纳芯微推出全新三线制车规霍尔效应开关/锁存器NSM101x系列,为数字位置检测提供高精度的解决方案,可被广泛应用于汽车执行器等的位置检测。 NSM101x产品系列包含了3个产品型号,即NSM1011(单极霍尔开关)、NSM1012(全极霍尔开关)、NSM1013(霍尔锁存器)。考虑不同的开关点、工作磁极、输出相位、常规功耗与低功耗模式、磁铁材料的温度补偿系数、封装形式等多个维度,NSM101x系列可以全面覆盖各个应用场景下的不同系统需求。各产品型号均有车规和工规型号,其中车规级别产品满足AEC-Q100 Grade 0的可靠性要求,可在-40~150℃的严苛环境下胜任工作。 宽工作电压范围,高温度稳定性 NSM1
[汽车电子]
纳芯微推出车规级、耐高压、三线霍尔开关/<font color='red'>锁存器</font>NSM101x系列
基于8051单片机控制的热源自动测试仪
在药品质量监测过程中,热源反应的测温是一项重要内容。药品检测有其特殊性,对测试系统的精度、稳定性、一致性和线性度等指标有着较高的要求。传统老式仪器大多是各类温度计,测试效率和精度都难如人意。根据现场监测要求,研制了基于单片机控制的热源自动测试仪,实现了在实验室内自动巡回测试30路热源,满足了现场测温准确稳定的高标准要求,成功地完成了药检实验室测试仪器的更新换代。 1 测试仪器系统组成与工作原理   本测试仪器的工作原理图如图1所示,对多点测试的热源数据经多路转换开关,送入仪器放大器实现差值放大后,用V/F转换器将电压信号转换成一定频率的脉冲信号,送入8051单片机的T0口,T0为计数器,T1作为定时器,在定时
[单片机]
基于80<font color='red'>51</font><font color='red'>单片机控制</font>的热源自动测试仪
单片机控制继电器_51单片机控制继电器详解
  单片机控制继电器   51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。   很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。      控制继电器是一种自动电器,它适用于远距离接通和分断交、直流小容量控制电路,并在电力驱动系统中供控制、保护及信号转换用。控制继
[单片机]
<font color='red'>单片机控制</font>继电器_<font color='red'>51</font><font color='red'>单片机控制</font>继电器详解

推荐帖子

VxWorks下的FTP服务器支持断点续传吗?
RT,我看到关于断点续传都是说服务器要支持REST命令,可我看VxWorks下FTP服务器的源码,好像没有REST命令,那是不是VxWorks下的FTP服务器就不支持断点续传呢?VxWorks下的FTP服务器支持断点续传吗??up反正vxworks5.5是不支持的,但不知道最新的vxworks6.9是否支持ftp的断点续传
aphonline 实时操作系统RTOS
提问+msp430中断矩阵键盘 有时无响应求破
本帖最后由lingergz于2014-3-1217:36编辑 小弟最近学习msp430,写了两个矩阵键盘的程序,都是用中断方式实现的——一个是直接定时器中断,另一个I/O口中断。(使用I/O口线中断方式有延时消除抖动的过程,而使用定时器中断查键盘则没有延时去抖动细节。因为定时器的定时时间就是消抖动的时间,比如10毫秒)定时器中断的没有问题,可是I/O口中断的开始响应还好,多摁几次后会出现无响应情况,除非重启。我的程序流程是这样的,如下图,后面
lingergz 微控制器 MCU
请教:串口接收不对??
各位大侠,我用51单片机的串口接收数据在开始的几秒内接收是正确的,可是过一会就接收不正确了,为甚呢??串口以9600的波特率一直在接收数据,是不是接收时间长波特率就乱了?voidserial()interrupt4using1{RI=0;if(SBUF==0x40)a++;if((a==2)&&(SBUF==0x48))b++;if((b==1)&&(SBUF==0x61))
wgmdsf 嵌入式系统
关于protues房子MSP430单片看门狗不能复位的问题!
我是新手,MSP430的新手。因为板子还没有到手,所以先用protues仿真学习一下。我仿真的是MSP430F235。程序如下:#include\"io430.h\"voiddelay(intt){intx,y;for(x=0;xt;x++){for(y=0;yt;y++);}}intmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW
xsy_86 微控制器 MCU
赛普拉斯PSO6亮相之后,把ST、siliconlabs、Nordic、NXP、dialo都拉出来比了比
赛普拉斯PSO6亮相之后,把ST、siliconlabs、Nordic、NXP、dialo都拉出来比了比总结了下赛普拉斯的PSOC6蓝牙SOC芯片,比较强大,有BGA-116和MCSP-104两种封装1.1.7-3.6供电、超低功耗22uA/MHZ2.触摸指纹识别3.蓝牙5.0并且集成了巴伦电路,免去繁琐的阻抗匹配调试4.能扛住12KV的ESD静电测试5.M4与M0+双核MCU,M4跑算法,最高150MHz主频;M0+处理BLE升级、省电6.1Mflash,28
QWE4562009 单片机
《人工智能实践教程——从Python入门到机器学习》阅读报告(3)
本书的第三部分,作者深入探讨了神经网络的构建与应用,这一部分是全书的精华所在。以下是对书中核心内容的简要介绍: 感知机:作者首先从感知机的原理出发,详细阐述了其从逻辑电路到多层神经网络的演变过程。书中不仅介绍了基础的激活函数,还深入探讨了如何通过这些函数构建更为复杂的神经网络结构; 反向传播算法:通过链式法则和计算图,作者清晰地推导了反向传播算法的理论基础。书中不仅涵盖了常见的激活函数,还特别介绍了Softmax等复杂函数的推导过程,为读者揭示了误差反向传播在神
Aclicee 编程基础
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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