简易四苹果5手机按键密码锁锁设计

查看: 3436|回复: 0
独立按键密码锁程序+流程图
本帖最后由 daniu 于
16:55 编辑
这是流程图
//===============================================================
//程序编写人:兰建文
//编写地点
//时间7月9日晚上&&星期四
//功能:本程序实现任意四个按键长按3S,连按3次(两次按键间隔不得等
//于1S),再按一下密码确认键,正确显示“GOOD”,不正确显示“BAD”,
//实现独立按键密码锁功能。利用定时器实现按键消抖。数码管为共阳极,
//低电平点亮.
//===============================================================
#include &reg51.h&& && &//定义8051单片机所有I/O口
#define&&uchar&&unsigned char
#define&&Key& & P1& && &//定义按键输入口
#define&&OutPut P2& && &//定义输出口
#define&&PianXuan P3& && && && &&&//定义片选口
bit& & Bt0;& && && && &&&//节拍标志位
bit& & AnJian1;& && & //按键标志位
bit& & AnJian2;& && & //有按键按下标志位
bit& & ChangAn;& && & //长按标志位
bit& & LianAn;& && & //连按标志位& && &
uchar&&TimeCount1;& && &//长按计时1S变量
uchar&&TimeCount2;& && &//连按间隔计时1S变量
uchar&&LianAnC& && &//连按次数变量
uchar code&&tempt1[]={0x0c0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90};//共阳数据代码
uchar code&&tempt2[]={0x90,0xc0,0xc0,0xa1};& && && &&&//“GOOD”代码
uchar code&&tempt3[]={0x83,0x88,0xa1};& && && && &//“BAD”代码
void DeLayMS(uchar N);& & //声明延时函数
main()& && &&&//主函数
{& && && && && && &
TMOD=0x01;& && && && && && && & //开定时器及开定时器中断
TH0=0xb1;
TL0=0xe0;
& & TR0=1;
& & EA=1;
& & ET0=1;& && && &
LianAn=0;& && &//标志位复位
ChangAn=0;
Bt0=0;
TimeCount1=150;
TimeCount2=50;
AnJian1=0;
AnJian2=0;
LianAnCount=0;& && &
while(1)& && &//死循环
{
&&if((Key&0x10)==0x10)&&//判断确认密码按键是否按下
&&{
& &OutPut=0& &//没按下就显示“------”
& &PianXuan=0
&&}
&&else
&&{
& &if(ChangAn&&LianAn)&&//按下了,判断是否有长按和连按
& &{
& & while(1)& & //有长按和连按,则显示“GOOD”
& & {
& &&&uchar i,b=0x02;
& &&&for(i=0;i&4;i++)
& &&&{
& && &OutPut=tempt2;
& && &PianXuan=b;
& && &DeLayMS(1);
& && &PianXuan=0x00;
& && &b=b&&1;
& &&&}
& & }
& &}
& &else& && & //没长按和连按,则显示“BAD”
& &{
& & while(1)
& & {
& &&&uchar i,b=0x02;
& &&&for(i=0;i&3;i++)
& &&&{
& && &OutPut=tempt3;
& && &PianXuan=b;
& && &DeLayMS(1);
& && &PianXuan=0x00;
& && &b=b&&1;
& &&&}
& & }
& &}
&&}
&&if(Bt0==1)& && &&&//等待节拍
&&{& && && &
& &Bt0=0;& && &&&//节拍标志位清零
& &if(AnJian2==1)& && &//判断是否有键按下
& &{
& & if(TimeCount2--==0)& & //判断下一次按键间隔是否为1S
& & {
& &&&LianAnCount=0;& & //为1S,复位
& &&&TimeCount2=50;
& &&&AnJian2=0;
& & }
& & else
& & {
& &&&if(LianAnCount==3) //不为1S,则判断是否连续按键3次
& &&&{
& && &LianAn=1;&&//有3次则连按标志位置1
& && &TimeCount2=50;
& && &AnJian2=0;
& && &LianAnCount=0;
& &&&}
& & }
& &}
& &if((Key&0x0f)!=0x0f)&&//判断是否有键按下
& &{
& & if(AnJian1==0)& &//有键按下,判断按键标志位是否为0,20MS消抖作用
& & {
& &&&AnJian1=1;& &//为1,则按键标志位置1
& &&&AnJian2=1;& &//有键按下标志位置1
& &&&TimeCount2=50;&&//连按计时复位
& &&&LianAnCount++;& &&&//按键次数加1
& & }
& & else& &
& & {
& &&&if(TimeCount1--==0)&&//为1判断按键是否一直按了3S
& && &ChangAn=1;& &//按了3S,则长按标志位置1
& &&&if((Key&0x0f)==0x0f) //判断按键是否还按着
& &&&{
& && &TimeCount1=150;&&//抬起了,则长按计时复位
& && &AnJian1=0;& &//按键标志位清0
& &&&}
& & }
& &}
& &else
& &{
& & if((Key&0x0f)==0x0f)
& & {
& &&&TimeCount1=150;
& &&&AnJian1=0;
& & }
& &}
&&}
}
}
void T0Ser(void) interrupt 1 using 0& &//定时器服务函数
{
TH0=0xb1;
& & TL0=0xe0;
Bt0=1;
}
void DeLayMS(uchar N)& && & //延时函数
{
uchar i,j;
for(i=N;i&0;i--)
&&for(j=50;j&0;j--);&&
} 复制代码
Powered by按键密码锁说明书_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
按键密码锁说明书
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢技术小站:
& 参加直播现场,与专家互动,学最新知识
& 学习业内最热门知识,还有好礼送
& 看视频,填问卷,拿好礼
& 海量精华技术资源 限时阅读下载
张飞电子工程师速成全集
10天掌握PCB AD画板
教你高速PCB项目整体设计
如何设计STM32单片机系统?
物联网操作系统从写到用
讲师:华清远见
讲师:林超文
讲师:郑振宇
讲师:李述铜
移入鼠标可放大二维码
带自锁功能的简易密码锁电路
来源:不详
作者:佚名日 23:19
[导读] 本密码锁的特点是,如果按错了密码键顺序或按下了任何一个非密码键,电路即锁定为关断状态,各按键均失效,大大增加了开锁难度。&&&&电路见图。
本密码锁的特点是,如果按错了密码键顺序或按下了任何一个非密码键,电路即锁定为关断状态,各按键均失效,大大增加了开锁难度。&&&&电路见图。可控硅SCR5、SCR6、SCR7为该密码锁的主控元件。当按照正确顺序按下三位密码键(本例为AN2、AN5、AN7)时,可控硅SCR2、SCR3、SCR4依次导通,从而触发可控硅SCR5、SCR6、SCR7依次导通,VT1饱和导通,电磁铁DL动作,实现开锁。与此同时,AN7键按下后SCR4导通,进而VT2饱和导通,使各按键在开锁后不再起作用。若按错密码键顺序,不但不能开锁,还会使电路处于关断状态,图中R3、VT3的作用是否决定按键顺序AN5、AN2、AN7的可开锁性。如先按AN5,则SCR3导通,VT3基极有了偏置电流,再按下AN2,则VT3饱和导通,使SCR2无触发电压而不能导通,因而不能开锁。先按AN7也不能开锁已如上述。本密码锁的按键顺序只能是AN2、AN5、AN7。当按下任何一个非密码键时,SCR1导通,使VT2饱和导通,各按键失效,电路锁定为关断状态。这时必须断开开关K再合上,电路才复位。
密码锁相关文章
密码锁相关下载
技术交流、积极发言! 发表评请遵守相关规定。
随着物联网技术的突飞猛进,生活中越来越多的家庭设备将会联上网络,变得“智慧”起来,智慧家庭的概念成了这几年媒体、企业、用户关注的焦点,而...
研华IoT嵌入式平台事业群总经理许杰弘表示,工业物联网 2009年就开始提出,至今缺乏临门一脚,现在是打开大门的时候了。研华WISE-PaaS物智联软件平台和...
创新实用技术专题
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-十二、数字密码锁设计
本文由山东大学研友袁卓贡献,特此感谢
实现数字密码锁设计,要求矩阵按键输出且数码管显示输入密码,密码输入正确与否均会有相应标志信号产生。
芯航线FPGA核心板、数码管_VGA_PS2模块、矩阵按键模块
随着生活质量的提高,当代人们也认识到了安全的重要性,已经不再满足于老式的机械钥匙。近年来越来越多的技术开始在安全领域应用,例如普通的按键输入、指纹输入或者虹膜输入等。
本节设计一款按键输入式密码锁,用矩阵键盘输入密码,输入完成后进行密码比对,如密码输入正确则输出开门信号以及灯光指示,如密码输入错误则蜂鸣器进行报警以及灯光指示。
综合以上要求可以看出此处系统框图如图1所示。
图1 系统框图
其中各模块功能描述如表1所示。
表1 各模块功能描述
矩阵按键模块
现在分开介绍,矩阵按键输入控制模块的框图及其接口列表如下所示,详细内容可以参考芯航线关于矩阵按键的教程,此处不再详述。
图2 矩阵按键模块框图
表2 矩阵按键模块接口列表
密码比较模块:
现介绍密码检测模块,其主要功能即比较输入与预设的密码是否一致,
图2 密码检测模块框图
表2 密码检测模块列表
这里先将密码设置为4位十进制数1234,如下所示
parameter PASSWORD = <span style="color: #'b11_0100;
通过计数矩阵按键按下标志信号,依次将数据暂存到寄存器mima_r中。
always@(posedge Clk or negedge Rst_n) begin
if(!Rst_n)
key_cnt &= <span style="color: #'b0;
else if(key_flag) begin
if(key_cnt == <span style="color: #'d3)
key_cnt &= <span style="color: #'b0;
key_cnt &= key_cnt + <span style="color: #'b1;
key_cnt &= key_
always@(posedge Clk or negedge Rst_n) begin
if(!Rst_n)
mima_r &= <span style="color: #'b0;
else if(key_flag)
case(key_cnt)
<span style="color: #'d0: mima_r[15:12] &= key_value[3:0];
<span style="color: #'d1: mima_r[11:8]
&= key_value[3:0];
<span style="color: #'d2: mima_r[7:4]
&= key_value[3:0];
<span style="color: #'d3:
mima_r[3:0]
&= key_value[3:0];
default: mima_r &= <span style="color: #;
mima_r &= mima_r;
这里通过一个独立按键来控制比较信号,用到了按键消抖模块,详细内容可以参考芯航线有关章节。
wire key_startbj_wire key_startbj_
key_filter key_filter_start(
.Clk(Clk),
.Rst_n(Rst_n),
.key_in(start_bj),
.key_flag(key_startbj_flag),
.key_state(key_startbj_state)
当开始比较后,根据实际情况判断后输出正确与否。
always@(posedge Clk or negedge Rst_n)begin
if(!Rst_n) begin
error &= <span style="color: #'b0;
&= <span style="color: #'b0;
else if(key_startbj_flag && !key_startbj_state)begin
if(mima_r == PASSWORD) begin
right &= <span style="color: #'b1;
error &= <span style="color: #'b0;
else begin
&= <span style="color: #'b0;
error &= <span style="color: #'b1;
else begin
error &= <span style="color: #'b0;
&= <span style="color: #'b0;
控制模块:
现在介绍模块的控制单元。本模块主要功能是根据密码检测模块的输出确定,开关门信号以及声光信号。其模块接口列表及功能描述如下所示。
图3 控制模块框图
表3 控制模块接口列表
在这里使用三段式状态机进行描述。
= <span style="color: #'b001,
= <span style="color: #'b010,
ALARM = <span style="color: #'b100;
第一个always块:
always@(posedge Clk or negedge Rst_n) begin
if(!Rst_n)
current_state &= IDLE;
current_state &= next_
第二个always块:
always@(current_state or error or right or cnt_2s) begin
case(current_state)
IDLE: begin
next_state = PASS;
else if(error)
next_state = ALARM;
next_state = IDLE;
PASS: begin
if(cnt_2s) //door_close
next_state = IDLE;
next_state = PASS;
ALARM: begin
if(cnt_2s)
next_state = IDLE;
next_state = ALARM;
default: next_state = IDLE;
第三个always块:
always@(posedge Clk or negedge Rst_n) begin
if(!Rst_n) begin
door_open_r
&= <span style="color: #'b0;
led_alarm_r
led_right_r
&= <span style="color: #'b0;
beep_En &= 1'b0;
else begin
case(next_state)
IDLE: begin
door_open_r
&= <span style="color: #'b0; led_alarm_r
led_right_r
&= <span style="color: #'b0; beep_En &= 1'b0;
PASS: begin
if(cnt_2s)begin
door_open_r
&= <span style="color: #'b0; led_alarm_r
beep_En &= <span style="color: #'b0;
led_right_r
else begin
door_open_r = <span style="color: #'b1;led_right_r = 1'b1;
ALARM: begin
if(cnt_2s) begin
led_alarm_r = <span style="color: #'b0; beep_En = 1'b0;
else begin
led_alarm_r = <span style="color: #'b1;
beep_En = 1'b1;
door_open_r
&= door_open_r;
led_alarm_r
&= led_alarm_r;
beep_En &= beep_En;
led_right_r
&= led_right_r;
数码管显示模块:
Hex8为数码管显示模块,其框图以及其接口列表如下所示,具体功能介绍可参见芯航线相关内容。
图4 数码管显示模块框图
表4 数码管显示模块接口列表
顶层设计:
最后在顶层例化各模块即可,分配引脚后全编译无误后即可下载到芯航线开发板中观测到对应现象。
图5 顶层文件RTL Viewer
如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:
芯航线电子工作室
关于学习资料,小梅哥系列所有能够开放的资料和更新(包括视频教程,程序代码,教程文档,工具软件,开发板资料)都会发布在我的云分享。(记得订阅)链接:http://yun.baidu.com/share/home?uk=&view=share#category/type=0
赠送芯航线AC6102型开发板配套资料预览版下载链接:链接:http://pan.baidu.com/s/1slW2Ojj 密码:9fn3
赠送SOPC公开课链接和FPGA进阶视频教程。链接:http://pan.baidu.com/s/1bEzaFW 密码:rsyh
阅读(...) 评论()去购物车结算
搜索到5件相关商品
自定义:-确定
微信二维码

我要回帖

更多关于 按键密码锁怎么改密码 的文章

 

随机推荐