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-17 11:16

51单片机控制DHT11在1602上显示温湿度的程序
单片机源程序如下: #include reg52.h #define uint unsigned int #define uchar unsigned char typedef bit BOOL; sbit io = P2^0; sbit rs = P2^6; sbit rw = P2^5; sbit ep = P2^7; uchar data_byte; uchar RH,RL,TH,TL; /********延时模块***********/ void delay(uchar ms) { // 延时子程序 uchar i; while(ms--) { for(i = 0;i 250;i++);
[单片机]
51单片机控制的数字触发器
    电力电子技术研究的内容包括三个方面:电力电子器件、变流电路和控制电路。电力电子变流技术在工业化领域有着广泛的应用。家用电器节能灯、电子拖动、电炉控制系统中已采用相控整流技术。但多数触发装置普遍是模拟的,调节十分的不便,触发精度差、故障率高。采用单片机来控制晶阐管的触发,是晶阐管应用的发展趋势。本文介绍了一种由8051单片机组成的触发控制系统,可实现高分辨率的数字触发器。     1 系统硬件组成及其原理     系统硬件组成如图1,被控对象是三相全控桥整流电路。控制电路由8051单片机及其外围电路组成。外围电路主要是由键盘电路、同步脉冲形成电路、驱动输出电路等组成。     1.1 控制角θ     控
[单片机]
<font color='red'>51</font><font color='red'>单片机控制</font>的数字触发器

推荐帖子

【设计工具】Xilinx 常见问题及答案
问:我在ISE4.1中,用fpgaexpressverilog编译的某些文件,用modelsimxe只能前仿,不能后仿,不知5.1i是否有改进?问:和5.1结合比较好的验证工具除了Modelsim外,PC机上可运行的有什么?问:ISE在综合的时候,把很多中间信号、特别是组合逻信号都综合掉了(或改名了),这样在后仿的时候造成了很大的不便,请问如何避免这一问题?问:Data2BRAM可以简化哪些工序?问:毛刺有何比较好的消除方法。实现加法,利用ieee.std_logic_
GONGHCU FPGA/CPLD
HMC1022电子指南针模块51代码
HMC1022电子指南针模块51代码HMC1022电子指南针模块51代码就不能免费下载么就不能免费下载么好东西,学习学习求免费下载啊
saxmcu 51单片机
【NUCLEO-L552ZE测评】+HLK-V20语音识别模块的实验
通过语音控制家电是我本次评测项目的一个重点,这次实验使用的是从某宝购买的语音识别模块,这个模块具有较高的性价比,缺点就是无法改变识别的内容,只能使用其定制好的语音命令。下面是实验过程中的照片:下图是语音识别模块,模块通过串口与单片机进行通讯:为了方便测试,我使用了一块192*64的LCD显示屏来展现相关的信息:输出控制部分暂时使用了一块四路继电器模块,在各个继电器上标注了被控制的家电设备,并没有真正连接器对应的家电设备,在测试过程中可以通过观察对应的L
hujj stm32/stm8
STM32USBLIB里面的一点细节求证!!
/********************************************************************************MacroName:SetEPDblBuffCount/SetEPDblBuf0Count/SetEPDblBuf1Count.*Description:Getsbuffer0/1addressofadoublebufferendpoint.*Input:bEpNum:endpo
vviking stm32/stm8
如何编译这个cm7到u8500去
这个教程没写完善的,过于简陋,而且我还没有检查过,不过我要去写作业去了,先占个位子,下次补全,也许里面有什么错误哦,请及时指正我,毕竟我只是一个普通的linux开发爱好者,不够专业。希望能有懂linux的同学加入编译u8500rom的行列,其实很简单的啦下面主要讲的是如何编译这个cm7到u8500去,方法可能与tooken的不一样,貌似他的不是从源码编译的。。。汗ok,tooken发布了千金版,可能大家对cm7没有什么印象,我以前编译过cm6,不过没有成功移
Wince.Android Linux与安卓
#AI挑战营第一站#pytorch训练MNIST数据集实现手写数字识别
下载MNIST数据集#MNIST数据集,用于训练,一次抓60sizeself._train_loader=torch.utils.data.DataLoader(torchvision.datasets.MNIST('./data/',train=True,download=True,transform=torchvision.transforms.Compose()),batch_si
LitchiCheng 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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