魅4如何设置图库密码锁怎么设置密码

51单片机密码锁制作的程序和流程图(很详细)
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机密码锁制作的程序和流程图(很详细)
一、基本组成:
&&& 单片机小系统+4*4矩阵键盘+1602显示+DC电机
&&& 基本电路:&
键盘和和显示
键盘接P1口,液晶的电源的开、关通过P2.7口控制
电机(控制口P2.4)
&&&&& 小系统就不贴上来了吧。。。
二、基本功能描述:
1.验证密码、修改密码
a)锁的初始密码是123456(密码最长为10位,最短为1位)。
2.恢复初始密码
a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。
3.使系统进入低功耗状态
a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。
b)同时将LCD背光灯关闭
4.DC电机模拟开锁动作。
a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。
1.0 输入将被以字符形式输入,最长为10位。
&&& 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。
2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。
3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。
4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。
5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。
6.0 修改密码键和恢复初始密码键最好置于室内。
这是Proteus仿真结果:
输入密码123456:
显示结果:
密码正确时电机启动、电机将持续5秒:
这是键盘:
开锁键是接INT0引脚接的一个独立按键,用于唤醒CPU工作、进而开启整个系统
密码正确时可以修改密码:
再次输入新密码,两次输入相同时、更改有效
当然你可以随时放弃修改密码
1.0 密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。这使得每次换电池或停电后密码都得恢复一次,给使用带来不便,但是为了要存储一个最多只有十几字节的密码就增加一个存储器、似乎不是很值,最好是所选的单片机自带这样的存储器(容量很小、如32B)。当然如果电源来自市电的话,就不会经常掉电了。
2.0 系统的最好再增加电源监测的设计,在电池电力不够时发出提示。这时还可以增加备用电池,这样就可以保证系统不会掉电。但是这些都要依赖于成本。
3.0 液晶的显示最好采用中文。通过对1602的CGRAM的操作可以实现中文显示,使得用户界面更好。
确认键操作:
确认函数_ confirm()操作:
0_将 '\0' 置于输入table_input[]结尾
(table_input[]的长度返回值在length里面)
根据操作标识选择任务:
1_确认密码:判定输入密码正确与否
2_修改密码:确认第一次输入并保存
&&&&&&&&&&& 要求第二次输入
&&& &&&&& &&&&&&&&&&&比较两次输入是否相同
根据比较结果选择任务:
修改失败,进入输入密码态
修改成功,将输入复制到table_password[]
确认函数_confirm()相关标识位目录:
flag_//根据其值可以确定显示信息
&flag_//确认键根据此标识判定任务,默认为0_即为确定密码状态
flag_//允许修改密码标识,在密码比较正确时置1
flag_//第一/二次输入新密码标识
flag_M;//允许电机开锁标识
sbit M=P3^6;//电机控制口
flag_//操作任务标识位
flag_//比较输入与密码|相等时返回1,否则返回0
&&&&&&&&&&&&&&&&&&&&&&& static flag_//修改密码时的标识
第一次输入前=1,输入后置2
第二次输入前=2,输入后置0
&&&&&&&&& flag_display=0;//确认键操作的返回值根据返回值可以确定显示信息
&&&&&&& flag_//允许改密码标识,在密码比较正确时置1,不正确时置0
&&&&&&&&&&&& process_char()函数::_M;//DC电机控制口
& process_char()函数::_//跟踪记录输入table_input[11]的字符长度( &=10 )
lcd_display()函数中标识位flag_display的值与意义:
=0:不显示|不刷新显示
=1:密码错误
=2:密码正确
=3:请输入新密码
=4:请再次输入新密码
=5:密码修改成功
=6:密码修改失败
=7:显示输入密码状态_The password!
=8:放弃修改密码
流图不怎么清晰、不过下一篇就是程序了,可以从程序推出流图。
程序比较多,所以写成了几个文件,同时应用了相当多的标识位来进行信号传递。
我觉得边看程序边画它的流程图会更好地帮助我们读程序。
1.0 &main.c文件
#include&reg52.h&
#include&string.h&
#include&mydefine_2.h&
static void delay(unsigned int N)//N ms延时_12MHz/准确性高
& unsigned int i=0,j=0;
& for(i=1;i&=N;i++)
& for(j=1;j&=355;j++) ;
void clock()
& key_clock=0;
& delay(15);
& key_clock=1;
void init()
& key_LCD=0;
& init_1602();
& TMOD=0x01;
& TH0=0x3C;//=()/256
& TL0=0xAF;//()%256
& EA=1;//外部中断0唤醒CPU(空闲方式)
& command(0x80);
& lcd_display(7);
void main()
& while(1)
& &temp=keyboard_matrix();//扫描输入
& &if(temp)//有按键输入信息
& & clock();//按键声
& & TR0=0;//关闭计时
& & timer=0;
& & receive(temp);//输入的字符串长度为length( &= 10)
& & if(i!=length)//输入时显示&*&
& & &command(0xC0+length);//为显示密码输入设定位置
& & &display('*');
& switch(temp)//根据按键号调用任务
& & & &//修改密码
& & case 12: if((flag_allow) && (flag_amend==0))//输入密码正确的条件下可以更改
& & & & & & &{
& & & & & & & &table_input[0]='\0';
& & & & & & & &flag_display=3;//请输入新密码
& & & & & & & &flag_confirm=1;//确认键进入确认修改密码功能
& & & & & & & &flag_amend=1;//每次按下修改键时都是第一次输入新密码
& & & & & & & &length=0; & &//重按修改键时也是第一次输入新密码
& & & & & & & &i=0;
& & & & & & &}
& & & & & & else
& & & & & & {
& & & & & & & flag_confirm=0;//恢复初始态
& & & & & & & flag_amend=0;
& & & & & & & lcd_display(1);//密码不正确
& & & & & & & delay(500);
& & & & & & & flag_display=7;
& & & & & & & length=0;
& & & & & & & i=0;
& & & & & &}
& & & & & &
& & case 11: //取消
& & & &command(0xC0+length);//擦出显示
& & & &display(' ');//显示后光标_显示地址又加了1
& & & &command(0xC0+length);//重置光标_显示地址|实为将光标拉回来
& & & &i=0;
& & & &if(length & 0)
& & & & &length--;//input[]位置后退一位
& & case 10: confirm();//确定 & & &
& & & & & & &i=0;
& & & & & & &
& & case 13: //修改密码的过程中取消修改密码|将系统置于初始态即可
& & & &if((flag_amend==1) || (flag_amend==2))
& & & & & flag_amend=0;
& & & & & flag_confirm=0;
& & & & & lcd_display(8);
& & & & & delay(500);
& & & & & flag_display=7;
& & & & & length=0;
& & & & & i=0;
& &lcd_display(flag_display);
& & TR0=1;//开始计时等待
& DC_Moter();
& resume_password();
& if(flag_clear)//恢复密码和开锁键_外部中断有效时重新计时
& & flag_clear=0;
& & timer=0;
& if(timer==100)//10秒后不允许更改密码
& & flag_allow=0;
& & flag_amend=0;
& & flag_confirm=0;
& & length=0;
& & lcd_display(7);//显示初始态,以提示修改超时
& if(timer==1200)//&2分钟后休眠|空闲方式
& & TR0=0;
& & timer=0;
& & clear_system();//恢复初始态
& & key_clock=0;
& & delay(250);
& & key_clock=1;
& & PCON|=0x01;
& & lcd_display(7);//唤醒CPU后显示初始态
void int0() interrupt 0
& key_LCD=0;//开液晶电源
& key_clock=0;
& delay(250);
& key_clock=1;
& flag_clear=1;
void Timer0() interrupt 1 //50ms
& TH0=0x3C;//()/256
& TL0=0xAF;//()%256
& timer++;
2.0 &负责实现具体操作的 process_char.c 文件
#include&reg52.h&
#include&string.h&
#include&mydefine.h&
sbit key_self=P2^1;//独立按键,用于恢复初始密码
sbit key_LED=P2^0;
sbit key_M=P2^4;//DC电机控制口
sbit key_LCD=P2^7;//液晶电源控制口
extern bit flag_//恢复密码和开锁键_外部中断的有效标识
exter//定时器0计数时段标记_50ms一次定时中断
extern unsigned char length=0;//跟踪记录输入table_input[11]的字符长度( &=10 )
extern unsigned char flag_display=0;//根据其值可以确定显示信息
extern unsigned char flag_confirm=0;//确认键根据此标识判定任务,默认为0_即为确定密码状态
extern unsigned char flag_allow=0;//允许修改密码标识,在密码比较正确时置1
extern unsigned char flag_amend=0;//第一/二次输入新密码标识
unsigned char flag_M=0;//允许电机开锁标识
extern void command(unsigned char command);
extern void display(unsigned char date);
//向I2C地址为address处写入数据date
extern void write_I2C(unsigned char address,unsigned char date);
//读出I2C地址为address处的数据
extern unsigned char read_I2C(unsigned char address);
static void delay(unsigned int N)//N ms延时/准确性高
& unsigned int i=0,j=0;
& for(i=1;i&=N;i++)
& for(j=1;j&=355;j++) ;
//休眠前清除table_input中的值
extern void clear_system()
&table_input[0]='\0';//恢复初始态
&length=0;
&flag_allow=0;
&flag_confirm=0;
&flag_amend=0;
&flag_clear=0;
&key_LCD=1;//关液晶电源
//接收键盘输入|以字符形式存入table_input[11]
extern void receive(unsigned char temp)
&//按键在松手时读取按键号,故不会重复读取按键值
&if(temp && length&=9)//如此,则无按键时执行效率高
& switch(temp)
& &case 1:
& &case 2:
& &case 3:
& &case 4:
& &case 5:
& &case 6:
& &case 7:
& &case 8:
& &case 9: table_input[length++]=temp+48;//以字符形式存入table_input[11]
& &case 14: table_input[length++]=48;//字符0
//根据任务选择显示信息
extern void lcd_display(unsigned char temp)
&unsigned char i=0,*p=NULL;
& switch(temp)//选择显示信息
& &case 1: p=table_//密码不正确
& & & & & &
& &case 2: p=table_//密码正确
& & & & & &
& &case 3: p=table_//请输入新密码
& & & & & &
& &case 4: p=table_//请再次输入新密码
& & & & & &
& &case 5: p=table_//密码修改成功
& & & & & &
& &case 6: p=table_//密码修改失败
& & & & & &
& &case 7: p=table_//显示输入密码:The password!
& & & & & &
& &case 8: p=table_//放弃修改密码
& & & & & &
& &case 9: p=table_//锁闭
& & & & & &
& &case 10: p=table_//锁闭
& & & & & &
& command(0x01);
& delay(1);
& command(0x80);
& while(*p!='\0')
& & display(*(p++));
& flag_display=0;//显示后清0,避免重复显示
extern void confirm(void)
&unsigned char flag_compare=0;//用于记录比较输入与密码的结果|相等时返回1,否则返回0
&unsigned char flag_compare_2=0;//用于记录对两次输入的新密码的比较结果|相等时返回1,否则返回0
&unsigned char i=0;
&if(length & 0)//输入不为空
& &table_input[length]='\0';
& &length=0;//输入字符串长度清0
& if(flag_confirm)//修改密码
& &switch(flag_amend)
& & case 1: strcpy(table_newpassword,table_input);//第一次输入新密码
& & & & & & table_input[1]='\0';//避免第一次输入的内容在放弃修改时再次被利用
& & & & & & flag_amend=2;
& & & & & & flag_display=4;//请再次输入密码
& & & & & &
& & case 2: flag_compare_2=strcmp(table_input,table_newpassword);//第二次输入新密码
& & & & & & flag_amend=0;//清0,允许再次修改
& & & & & & flag_confirm=0;//进入初始之确认密码状态
& & & if(!flag_compare_2)//两次输入相同==0
& & & &strcpy(table_password,table_input);
& & & &table_input[1]='\0';//避免修改完成后再次被利用,造成重复修改,同时避免刚修改了就是pass状态
& & & &lcd_display(5);//修改成功
& & & &delay(500);
& & & &flag_display=7;
& & & else
& & & & lcd_display(6);//修改失败
& & & & delay(500);
& & & & flag_display=7;
& else//验证密码
& &flag_compare=strcmp(table_input,table_password);
& &if(!flag_compare)//密码正确==0
& & &flag_allow=1;//允许修改密码
& & &flag_M=1;//允许开锁
& & &flag_display=2;//密码正确信息:Pass!
& & &table_input[1]='\0';//改变输入,使不致出乱
& &else//密码错误
& & &flag_allow=0;//不允许修改密码
& & &lcd_display(1);//密码错误信息:Error!
& & &delay(500);
& & &flag_display=7;
//电机控制
extern void DC_Moter()
&if(flag_M)//允许开锁
& flag_M=0;
& key_M=0;//开锁
& key_LED=0;
& delay(1250);
& key_M=1;
& key_LED=1;
& timer=0;
& lcd_display(7);//进入初始态
//恢复初始密码
extern void resume_password()
&if(!key_self)//==0
& delay(3);
& if(!key_self)//==0
& & while(!key_self) ;//==0
& & strcpy(table_password,table_original);
& & flag_clear=1;
& & lcd_display(10);
& & delay(500);
& & lcd_display(7);
确认函数_ confirm()操作:
0_将 '\0' 置于输入table_input[]结尾
(table_input[]的长度返回值在length里面)
根据操作标识选择任务:
1_确认密码:判定输入密码正确与否
2_修改密码:确认第一次输入并保存
& & & & & & 要求第二次输入
& & & & & & & & & & &比较两次输入是否相同
根据比较结果选择任务:
修改失败,进入输入密码态
修改成功,将输入复制到table_password[]
确认函数_confirm()相关标识位目录:
flag_//根据其值可以确定显示信息
&flag_//确认键根据此标识判定任务,默认为0_即为确定密码状态
flag_//允许修改密码标识,在密码比较正确时置1
flag_//第一/二次输入新密码标识
flag_M;//允许电机开锁标识
sbit M=P3^6;//电机控制口
flag_//操作任务标识位
flag_//比较输入与密码|相等时返回1,否则返回0
& & & & & & & & & & & & static flag_//修改密码时的标识
第一次输入前=1,输入后置2
第二次输入前=2,输入后置0
& & & & & flag_display=0;//确认键操作的返回值根据返回值可以确定显示信息
& & & & flag_//允许改密码标识,在密码比较正确时置1,不正确时置0
& & & & & & process_char()函数::_M;//DC电机控制口
&process_char()函数::_//跟踪记录输入table_input[11]的字符长度( &=10 )
lcd_display()函数中标识位flag_display的值与意义:
=0:不显示|不刷新显示
=1:密码错误
=2:密码正确
=3:请输入新密码
=4:请再次输入新密码
=5:密码修改成功
=6:密码修改失败
=7:显示输入密码状态_The password!
=8:放弃修改密码
3.0 &定义各个数组的头文件mydefine.h
extern unsigned char table_input[11]={0}; &//接收键盘输入
unsigned char table_password[11]=&123456&; &//密文
unsigned char table_newpassword[11]=&456&; &//接收新密码
unsigned char code table_original[11]=&123456&; //初始密码
//显示信息
unsigned char code table_pass[]=&Pass!&; &//成功进入
unsigned char code table_error[]=&Operate Error!&; &//密码错误信息
unsigned char code table_enter[]=&The password:&; &//输入密码
unsigned char code table_new[]=&New password:&; &//输入新密码
unsigned char code table_again[]=&Enter again:&; &//再次输入新密码
unsigned char code table_changed[]=&Changed!&; &//密码修改成功
unsigned char code table_fail[]=&Fail changce!&; &//密码修改失败
unsigned char code table_abandon[]=&Abandon changce!&;//放弃修改密码
unsigned char code table_close[]=&Locked!&;//锁闭
unsigned char code table_resume[]=&Resumed!&;//恢复初始密码
4.0 &头文件mydefine_2.h
& & &定义了各个外部文件向主函数用到的操作函数和外部变量
#ifndef _mydefine_2_h_
#define _mydefine_2_h_
sbit key_LED=P2^0;
sbit key_clock=P3^3;//蜂鸣器
sbit key_LCD=P2^7;//液晶电源控制口
extern bit flag_clear=0;//恢复密码和开锁键_外部中断的有效标识
extern unsigned int timer=0;//定时器0计数时段标记_50ms一次定时中断
static unsigned char i=0;//显示*用变量
unsigned char temp=0;//用于接收键盘输入(按键在松手时读取按键号)
extern unsigned int table_input[11];//接收输入
extern unsigned char flag_//允许改密码标识,在密码比较正确时置1
extern unsigned char flag_//确认键根据此标识判定任务,默认为0_即为确定密码状态
extern unsigned char flag_//确认键操作的返回值,根据返回值可以确定显示信息
extern unsigned char flag_//第一/二次输入新密码标识
extern //输入input的字符长度(length &= 16)
//1602液晶:extern_1602.c *****************************************************************
extern void init_1602();
extern void command(unsigned char command);
extern void display(unsigned char date);
//键盘:extern_keyboard_no_T0_2.c *********************************************************
//矩阵键盘.无按键动作时其返回值num_key=0,否则返回按键号num_key
extern unsigned char keyboard_matrix();//(在松手时读取按键号****检测高四位)
//密码处理:process_char.c ****************************************************************
//电机控制
extern void DC_Moter();
//接收键盘输入|以bit形式存入input__返回值为输入的字符串长度length(length &= 10)
extern void receive(unsigned char temp);//涉及文件间变量length
//确认按键操作
extern void confirm(void);//涉及跨文件调用的变量flag_confirm,flag_allow,flag_amend
//根据任务选择显示信息
extern void lcd_display(unsigned char flag_display);//涉及跨文件调用的变量flag_display
extern void clear_system();//恢复初始态
extern void resume_password();//恢复初始密码
//****************************************************************************************
键盘和1602显示的程序见其他文章。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
密码锁设计(含全套图纸).doc18页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:400 &&
你可能关注的文档:
··········
··········
全套CAD图纸或资料,联系qq
当今市场上的密码锁很多,有机械式的,有单片机控制的,也有电脑控制的、还有PLC控制的。这些密码锁的用处也很广泛,如保险箱、安全门、还有一些大型企业的库房等。机械式的密码锁大多用天保险箱等小门上,易于安装,机械密码锁的机械结构复杂,制造工艺复杂,造价高且保密性也不是很好。单片机的密码锁,易于实现,便于控制,在批量生产时成本低,但是在单个生产是成本就高了,单片机的知识结构复杂不易学,对使用者来说操作有困难。PLC控制的密码锁主要用PLC的逻辑功能来实现,PLC还包含有计数和定时功能,这些功能都可能用到密码锁里面去,从增加密码的复杂程度,这对财产的保密性有了很大的提高。单片机也有这些功能,但是它需要多个芯片共同合作来完成,增设扩展槽和接口。而且单片机是一块一块的芯片,没有一个固定和整体结构,还要增加一些电路板。PLC就不同了,PLC是一个整体结构,在PLC里面包含了很多的功能块,且它的对环境的要求也不高,在环境比较特殊的情况下也能正常工作(如潮湿、温度较高、粉尘、磁场大等)。单片机与它相比就逊色多了,因为以上的工作环境都会引起单片机的工作不稳定,易出现事故(如线路短路、老化、干拢强等)。PLC的结构不难,易学、易操作。
PLC的I/O接口众多,可以控制多个输入输出口,且能正常工作,用PLC设计的密码锁可用于一般家庭里的门控制,用PLC的输出端接一个中间继电器,利用继电器来控制一个电磁锁的线圈与电源的通断,通电时线圈产生强大的电磁力,电磁力克服弹簧力,即可以打开门。再在PLC的输出端接一个继电器,用来控制电铃的与电源的通断。当有人盗取密码而使控制电铃的继电器动作,电铃响即为报警。也可以
正在加载中,请稍后...如何设置手机密码锁,图形的。_百度知道
如何设置手机密码锁,图形的。
忽略,系统会再叫你再重新输入一次确认一致://jingyan。步骤阅读5然后出现的菜单是如何设置图案锁的教程,点继续(画错就点重试)?picindex=2" target="_blank">http.html://jingyan!,现在九点处划一个你喜欢的图案锁,那么怎么办,懂了,没内容的。 步骤阅读6跟设置数字密码锁一样、在屏幕上划图案,以后我们每次唤醒屏幕后!方法&#47,直接点击“下一步”,如下图。步骤阅读4随后弹出的提示窗口,当然最拉风的就是图案图形锁啦.baidu。步骤阅读3再选择“图案”。步骤阅读8如果不想用图案锁的话.com/album/cbf0e500ed8e622eaa289334,进入“位置和安全”,没留意给人家拿去玩了,有时候临时走开放在桌子上.com/album/cbf0e500ed8e622eaa289334;步骤1点击手机设置!可以密码锁啊!。第二遍输入无误的话就点确定退出,给手机上锁,有时候会尴尬的.html,才能开锁.baidu,就下一步,选择”无“一栏就可以取消图案锁了,必须跟我们设置的一致。步骤阅读步骤阅读7屏幕图案锁设置成功后?picindex=2手机里面有我们太多的隐私!马上来看看怎么设置,就重新进入第二步中的”设置屏幕锁定“。步骤阅读2选择“设置屏幕锁定”,看看也不错,就要用手指<a href="http
其他类似问题
按默认排序
其他4条回答
安全和隐私
选择图形密码就行了
在设置里,安全,图形锁
设置—安全—设置屏幕锁定—图案
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁电子密码锁电路图_百度知道
电子密码锁电路图
/zhidao/pic/item/b0ba61e6f0a314e5980如图
其他5条回答
&#47: k=4; /
/ delay(500);已开锁信号清零
relay_open=1: k=1,没错一次error_num增一
pw_error=0;有键按下则开定时器,处于计时15秒状态;
init_variant():
定时器计数溢出数
cnt_val_15s;
delay(60000); /输入错误次数超过3次
{ alarm_out=0;报警输出sbit
open_lock=P3^3;&#47,清除输入的内容
open_lock=1;/
/ P0=led_seg_code[show_val[2]]; EA=1,cnt_val_5s;清除所有输入.0-P1;2-三次密码错误;/ P3=0led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00数码管不显示任何内容/&#47:
error_i++)
switch (i)
/初始化51的寄存器 TMOD=0x20;&#47,按键P1;
/ delay(500); delay(500);
/---------
pw_error=1; P2=03999;/i++)
show_val[i]=10!=2)
/--------延时程序----------------void delay(unsigned int i)/char code led_seg_code[11]=; P0=led_seg_code[show_val[1]];已开锁信号灯亮
&#47,有键按下key_val为0-7;/
if (i==0xff && cnt_state,error_led_seg_code[10]=0x00表示数码管不显示任何内容 key_index=0;&#47,cnt_ P0=led_seg_code[show_val[4]];/// P2=0xf7;
delay(50000);&#47,保存当前键的位置}/ //电磁锁开锁驱动sbit
pw_error=P3^1;-------------
pw_error=1;
delay(60000),清除输入的内容
open_lock=1;/ P2=0xdf:
密码初始值
key_i&}}/1-密码正确,计时15秒;长鸣声报警
delay(60000);*说明key0=P1^0;/
case 0x7f;密码输入错误次数清零
&#47,超过6位视为输入无效
{ show_val[key_index]=key_停止计时
{error_num++;密码输入错误3次;
led_show();esc=P1^7;/
{ cnt_val_15s=0;密码正确
error_num=0;按键输入;&#47,需要计时5s
if(cnt_val_5s&lt:
if (key_6,计时4s状态 :
led_seg_/待机计时到5秒时;下一状态处于4秒计时的状态
TR0=1; / cnt_state=0;停止计时
delay(50000);---------
cnt_state=1;-----------
delay(20000);
relay_open=P3^0; break:数码管7段码*//
//unsigned int
delay(60000);密码错误指示灯亮
//密码错误指示灯亮
error_num=0;
delay(100);
for(i=0; /key5=P1^5;//
case 0 delay(500);4)
{ cnt_val_4s=0:
case 3;/enter=P1^6;5)
{ cnt_val_5s=0;
if(check_input_pw())
{///T1中断{ T1_cnt++;
delay(60000);reg51;
if(T1_cnt&gt, 计时1s
T1_cnt=0!=key_val_old)
{ key_val_old=key_/---------主程序----------------main(){ / delay(500);/开中断 ET1=1;
delay(60000);
/--------定时器T1中断服务程序-----------------void
timer1() interrupt 3
/6) /密码输入正确;&#47: /
delay(50000);
/开锁信号清零
cnt_state=0。 T1_cnt=0;
if(key_index&lt:
当前按键是哪一位密码
T1_cnt: k=0;6;////0-待机计时5s状态; for(i=0,发光二极管接P3; key1=P1^1;/已开锁指示信号sbit
audio_out=P3^4;延时去抖动
audio_out=1;/unsigned char data state_有源蜂鸣器unsigned char data cnt_val_15s,启动待机计时
cnt_val_5s=0;
{ audio_out=0;--------判断键盘输入内容与密码是否一致------unsigned char check_input_pw(){
cnt_state=0;
delay(60000);key2=P1^2,清除输入的内容
TR1=0; break.3;有键按下
{ delay(500);---------数码管显示---------------void led_show(){P0=led_seg_code[show_val[0]];/
i=P1;/unsigned char data key_
&#47.0592MHz;
key_index++;
}}/---------
delay(50000):/如果计数& TR1=0;// P0=led_seg_code[show_val[3]];下一状态处于15秒计时的状态
break,无键按下key_val为255;开锁驱动信号灯亮
open_lock=0; error_num=0;/*/
case 0xfd.0-P3; /11;#include &/报警灯亮
pw_error=0: k=5;
// 清除所有指示和报警
relay_open=1://---------按键扫描---------------unsigned char scan_key(){
case 0停止计时
audio_out=1;密码输入正确; key3=P1^3,cnt_val_4s;启动定时
{ if (error_num& key_val_old=255;/ x=19 TL1=0x19,需要计时4s
if(cnt_val_4s&&#47,key_/
switch (cnt_state)
{ case 0;/&#47:
alarm_out=1;/
audio_out=0;/----------
audio_out=0; P0=led_seg_code[show_val[5]];
init_variant();////密码错误指示灯灭
relay_open=0;&#47,key_val_
switch (key_val)
{ case 0; delay(500);
case 2;&#47.0592 -&
case 7;开定时器T1 while(1) { key_val=scan_key();
k=1,k;用T1计时 8位自动装载定时模式 TH1=0x19: /3999)
/unsigned char data show_val[6];无键按下
case 0/&#47,p3;//
/ &#47: k=7!=P1)
{ TR1=1,T1每250微秒中断;/ init_variant();/ }延时去抖动
audio_out=1;}/
/i&三次密码错误时;-----------
init_variant();key4=P1^4;
/晶振11;/ P2=0}//--------清除输入内容----------void init_variant(){unsigned char i:
case 2; //
case 0xf7;两声短“滴”声
audio_out=0,计时15s
if(cnt_val_15s&*变量的定义;500微秒溢出一次;没有任何输入或清除所有输入时; &#47:
case 1;待机; cnt_val_15s=0: k=6;取消键
init_variant();&#47: k=2; P2=0xef:
返回按键的值 255-表示无按键按下
key_&#47,等待下一次输入
&#47!=255&& cnt_state,提示错误
audio_out=0: /
delay(60000);
case 6: 显示的值
init_val[6]:
待机时间计时
cnt_val_4s;}/
audio_out=1;
init_variant();/初始化各变量audio_out=1.4/打开定时器计时
cnt_state=2;/
delay(60000); /
case 0/密码为6位;
delay(60000);/&#47:
show_val[6]; cnt_val_4s=0;一声长“滴”声;/
audio_out=1;&#47见;
250=(256-x)*12/char code init_val[6]=:程序/ cnt_val_5s=0:
报警计时的数值
cnt_val_5s,等待4秒清除开锁信号
cnt_输入错误次数小于3次时,计时到4秒时;延时&#47: k=3;/&#47,k;/密码输入错误次数清零
/密码错误信号sbit
alarm_out=P3^2
留下扣扣号给你发去。
深圳元坤锁业——最具“性价比”的酒店锁、电子锁、桑拿衣柜锁等,欢迎全国采购、代理!!!
use ieee.std_logic_1164.use ieee.std_logic_unsigned.entity lock is
port(clk_1k:in std_
--1024HZ频率输入管脚enter_2,enter_1: in std_
--设密码确认及输入密码确认
datain:in std_logic_vector(3 downto 0);
--密码数据输入
speaker:out std_
led_g,led_r:out std_logic);
--绿灯及红灯architecture behave of lock issignal ram:std_logic_vector(3 downto 0);signal judge:std_signal clk:std_signal turn_on,turn_off:std_beginprocess(Clk_1k)variable clk_count:std_logic_vector(8 downto 0):=&&; begin if clk_1k&#39;event and clk_1k=&#39;1&#39; then
if clk_count&511 then
clk_count:=clk_count+1;
clk_count:=&&;
process(datain,enter_1)
--设置密码beginif enter_1&#39;event and enter_1=&#39;1&#39; thenram&=process(clk_1k)
--判断第一位密码按下时开始计时beginif clk_1k&#39;event and clk_1k=&#39;1&#39; then
if enter_1=&#39;0&#39; then
judge&=&#39;0&#39;;
if judge=&#39;0&#39; and enter_1=&#39;1&#39; then
if datain/=ram then judge&=&#39;1&#39;;process(judge,clk,enter_2)variable count:std_logic_vector(4 downto 0):=&00000&;
--判断自第一个按键开始的时间是否超30秒variable judge_sh:std_logic_vector(1 downto 0):=&00&;
--判断输入错误密码次数variable switch:std_logic:=&#39;0&#39;;
--判断是否锁定键盘
if clk&#39;event and clk=&#39;1&#39; then
if enter_1=&#39;0&#39; then
--数据复位
count:=&00000&;judge_sh:=&00&;switch:=&#39;0&#39;;
if switch=&#39;0&#39; then
if judge=&#39;1&#39; then
if count&&11110& then
--30 秒计时
count:=count+1;
if enter_2=&#39;1&#39; then
if datain = ram then
turn_on&=&#39;1&#39;;turn_off&=&#39;0&#39;;switch:=&#39;1&#39;;
if judge_sh&&10& then
judge_sh:=judge_sh+1;turn_on&=&#39;1&#39;;turn_off&=&#39;1&#39;;switch:=&#39;0&#39;;
turn_on&=&#39;0&#39;;turn_off&=&#39;1&#39;;switch:=&#39;1&#39;;
turn_on&=&#39;0&#39;;turn_off&=&#39;0&#39;;switch:=&#39;0&#39;;
--等待下次输入
turn_on&=&#39;0&#39;;turn_off&=&#39;1&#39;;switch:=&#39;1&#39;;process(clk,clk_1k,turn_on)variable count:std_logic_vector(3 downto 0):=&0000&;
--长报警时间 variable count_sh:std_logic_vector(1 downto 0):=&00&;
--短报警时间variable temp,temp_sh:std_logic:=&#39;0&#39;;
--判断是短报警或长报警
if clk&#39;event and clk=&#39;1&#39; then
if enter_1=&#39;0&#39; then
--数据复位
count:=&0000&;count_sh:=&00&;temp:=&#39;0&#39;;temp_sh:=&#39;0&#39;;
if turn_on=&#39;0&#39; and turn_off=&#39;1&#39; then
if count&&0101& then
count:=count+1;
temp:=&#39;1&#39;;
led_g&=&#39;0&#39;;led_r&=&#39;1&#39;;
temp:=&#39;0&#39;;
elsif turn_on=&#39;1&#39; and turn_off=&#39;0&#39; then
led_g&=&#39;1&#39;;led_r&=&#39;0&#39;;
elsif turn_on=&#39;1&#39; and turn_off=&#39;1&#39; then
temp_sh:=&#39;1&#39;;
elsif turn_on=&#39;0&#39; and turn_off=&#39;0&#39; then
led_g&=&#39;0&#39;;led_r&=&#39;1&#39;;temp_sh:=&#39;0&#39;;speaker&=(temp or temp_sh) and clk_1k;
--驱动喇叭
电子密码锁的相关知识
等待您来回答
您可能关注的推广回答者:
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 密码锁设置 的文章

 

随机推荐