32. 电子密码锁设计

发布者:as8849402最新更新时间:2016-09-22 来源: eefocus关键字:电子密码锁  单片机系统 手机看文章 扫描二维码
随时随地手机看文章
1.实验任务 
根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。 
2.电路原理图 
 
图4.32.1
3.系统板上硬件连线 
(1).            把“单片机系统”区域中的P0.0/AD0用导线连接到“音频放大模块”区域中的SPK IN端子上; 
(2).            把“音频放大模块”区域中的SPK OUT端子接喇叭和; 
(3).            把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“四路静态数码显示”区域中的任一个ABCDEFGH端子上; 
(4).            把“单片机系统“区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L1端子上; 
(5).            把“单片机系统”区域中的P3.6/WR、P3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2端子上; 
4.程序设计内容 
(1).            密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。 
(2).            密码的输入问题: 
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。 
(3).            按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。 
5.C语言源程序 
#include  
unsigned char code ps[]={1,2,3,4,5}; 
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 
                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; 
unsigned char pslen=9; 
unsigned char templen; 
unsigned char digit; 
unsigned char funcount; 
unsigned char digitcount; 
unsigned char psbuf[9]; 
bit cmpflag; 
bit hibitflag; 
bit errorflag; 
bit rightflag; 
unsigned int second3; 
unsigned int aa; 
unsigned int bb; 
bit alarmflag; 
bit exchangeflag; 
unsigned int cc; 
unsigned int dd; 
bit okflag; 
unsigned char oka; 
unsigned char okb; 
void main(void) 

  unsigned char i,j; 
  P2=dispcode[digitcount]; 
  TMOD=0x01; 
  TH0=(65536-500)/256; 
  TL0=(65536-500)%256; 
  TR0=1; 
  ET0=1; 
  EA=1; 
  while(1) 
    { 
      if(cmpflag==0) 
        { 
          if(P3_6==0) //function key 
            { 
              for(i=10;i>0;i--) 
              for(j=248;j>0;j--); 
              if(P3_6==0) 
                { 
                  if(hibitflag==0) 
                    { 
                      funcount++; 
                      if(funcount==pslen+2) 
                        { 
                          funcount=0; 
                          cmpflag=1; 
                         } 
                       P1=dispcode[funcount]; 
                    } 
                    else 
                      { 
                         second3=0; 
                      } 
                  while(P3_6==0); 
                } 
            } 
          if(P3_7==0) //digit key 
            { 
              for(i=10;i>0;i--) 
              for(j=248;j>0;j--); 
              if(P3_7==0) 
                { 
                  if(hibitflag==0) 
                    { 
                      digitcount++;                       
                      if(digitcount==10) 
                        { 
                          digitcount=0; 
                        } 
                      P2=dispcode[digitcount]; 
                      if(funcount==1) 
                        { 
                          pslen=digitcount; 
                          templen=pslen; 
                        } 
                        else if(funcount>1) 
                          { 
                            psbuf[funcount-2]=digitcount; 
                          } 
                    } 
                    else 
                      { 
                        second3=0; 
                      } 
                  while(P3_7==0); 
                } 
            } 
        } 
        else 
          { 
            cmpflag=0; 
            for(i=0;i               { 
                if(ps!=psbuf
                  { 
                    hibitflag=1; 
                    i=pslen; 
                    errorflag=1; 
                    rightflag=0; 
                    cmpflag=0; 
                    second3=0; 
                    goto a; 
                  } 
              } 
            cc=0; 
            errorflag=0; 
            rightflag=1; 
            hibitflag=0; 
a:          cmpflag=0; 
          } 
    } 

   
void t0(void) interrupt 1 using 0 

  TH0=(65536-500)/256; 
  TL0=(65536-500)%256; 
  if((errorflag==1) && (rightflag==0)) 
    { 
      bb++; 
      if(bb==800) 
        { 
          bb=0; 
          alarmflag=~alarmflag; 
        } 
      if(alarmflag==1) 
        { 
          P0_0=~P0_0; 
        } 
      aa++; 
      if(aa==800) 
        { 
          aa=0; 
          P0_1=~P0_1; 
        } 
      second3++; 
      if(second3==6400) 
        { 
          second3=0; 
          hibitflag=0; 
          errorflag=0; 
          rightflag=0; 
          cmpflag=0; 
          P0_1=1; 
          alarmflag=0; 
          bb=0; 
          aa=0; 
        } 
    } 
  if((errorflag==0) && (rightflag==1)) 
    { 
      P0_1=0; 
      cc++; 
      if(cc<1000) 
        { 
          okflag=1; 
        } 
        else if(cc<2000) 
          { 
            okflag=0; 
          } 
          else 
            { 
              errorflag=0; 
              rightflag=0; 
              hibitflag=0; 
              cmpflag=0; 
              P0_1=1; 
              cc=0; 
              oka=0; 
              okb=0; 
              okflag=0; 
              P0_0=1; 
            } 
      if(okflag==1) 
        { 
          oka++; 
          if(oka==2) 
            { 
              oka=0; 
              P0_0=~P0_0; 
            } 
        } 
        else 
          { 
            okb++; 
            if(okb==3) 
              { 
                okb=0; 
                P0_0=~P0_0; 
              } 
          } 
    } 
}
关键字:电子密码锁  单片机系统 引用地址:32. 电子密码锁设计

上一篇:35. DS18B20数字温度计使用
下一篇:34. 带有存储器功能的数字温度计

推荐阅读最新更新时间:2024-03-16 15:11

基于C语言STC89C52单片机电子密码锁的设计与仿真
摘要:介绍一种通过Protues软件成功仿真的电子密码锁的实现过程。它采用高可靠性的STC89C52单片机来实现开锁和密码的识别,采用具备I2C总线接口的E2PROM芯片来完成密码的存储,通过1602液晶显示器提示程序运行状态和使用步骤,利用蜂鸣器模拟报警,发光二极管模拟锁的开关。该系统用C语言编写程序,与汇编语言相比具备更好的移植性和可读性,便于修改和增减功能。 关键词:Protues;密码锁;单片机;C语言 O 引言 电子密码锁是现代生活中常用的加密工具。它克服了机械式密码锁密码量少、安全性能差的缺点,尤其是微控制器的智能电子密码锁,不仅具有电子密码锁的功能,还可引入智能化管理功能,从而使密码锁具有更高的安全性和可靠性。
[单片机]
基于C语言STC89C52单片机<font color='red'>电子密码锁</font>的设计与仿真
单片机系统设计与C51编程实践分享
1.1 了解单片机的能力 【规则1】设计满足要求的最精简的系统。正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。我们应该有这样一个认识,即单片机的处理能力是非常强大的。早期的PC机,其CPU(8086)处理能力和8051 相当,却能处理相当复杂的任务。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。1.2 系统可靠性至关重要 【规则2】使用看门狗。看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由
[单片机]
单片机系统中什么是数据、地址、指令
数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的──数字,或者说都是一串 0 和 1 组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不能由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元能由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的对象,在各种不一样的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况: 1 地址(如MOV DPTR,#1000H),即地址1000H送入D
[单片机]
Proteus在单片机系统设计中的应用
1 引言 单片机是电子类等相关专业的一门重要课程,在实际工程中有着广泛应用。全国各大中专院校开设了不同类型的单片机课程及相关的实验和综合设计。在这些专业的课程设计、毕业设计及大学生电子竞赛中,单片机也是一种非常重要的开发工具。 随着计算机技术的迅速发展,使用EDA软件进行电路仿真与设计已经成为一种趋势。众多院校在电路实践教学改革中引入了EDA技术,并建立了EDA实验室。配备了EWB、Pspice、Multisim、Protel、MaxPlus II、SystemView等相关软件及配套硬件。但这些设备对仿真单片机却无能为力。本文介绍的一款EDA软件——Proteus,则有很大的不同,它的最大特点就是能仿真单片机。 目前Pr
[单片机]
Proteus在<font color='red'>单片机系统</font>设计中的应用
基于51单片机 毕业设计 电子密码锁程序 含电路图
#include reg52.h #include intrins.h #include string.h #define uchar unsigned char #define uint unsigned int uchar code table = Input Password: ; uchar code table1 = Input Error! ; uchar code table2 = You are welcome! ; uint ucSendBuffer ={0,0,0,0,0,0}; uint mima ; sbit lcdrs=P2^0; sbit lcdrw=P2^1;
[单片机]
单片机系统抗干扰措施应从哪些方面设计
  1 引言   目前,开关电源模块单片机系统在星载仪器中担负着非常重要的任务,星载仪器往往处于复杂的空间环境之中,存在着大量的干扰源,如高能带电粒子主要通过单粒子效应对单片机系统构成影响,使其发生单粒子翻转事件,将导致程序走向混乱,使系统无法正常工作。因此,在系统设计上充分考虑MTD2002抗干扰设计,提高系统的可靠性尤为重要。对于单片机系统而言,干扰有两种,一是来源于系统外部环境和其它电气设备产生的干扰,通过传导和辐射等途径影响单片机系统正常工作;二是来源于系统内部,由系统结构、制造工艺等决定以及内部元器件在工作时产生干扰,通过地址、电源线、信号线、分布电容等传输,影响开关电源模块系统工作状态。MTD2002单片机系统抗干扰
[单片机]
单片机系统的低功耗设计策略
在嵌入式应用中,系统的功耗越来越受到人们的重视,这一点对于需要电池供电的便携式系统尤其明显。降低系统功耗,延长电池的寿命,就是降低系统的运行成本。对于以单片机为核心的嵌入式应用,系统功耗的最小化需要从软、硬件设计两方面入手。 随着越来越多的嵌入式应用使用了实时操作系统,如何在操作系统层面上降低系统功耗也成为一个值得关注的问题。限于篇幅,本文仅从硬件设计和应用软件设计两个方面讨论。 1 硬件设计 选用具有低功耗特性的单片机可以大大降低系统功耗。可以从供电电压、单片机内部结构设计、系统时钟设计和低功耗模式等几方面考察一款单片机的低功耗特性。 1.1 选用尽量简单的CPU内核 在选择CPU内核时切忌一味追求性能。8位
[嵌入式]
PROTEUS VSM单片机系统的PROTEUS设计与仿真
1 简 述 随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。 然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。如图1所示,用户程序需要在硬件完成的情况下才能进行联调,如果在调试过程中发现需修改硬件,则要重新制板。因此无论从硬件成本还是开发周期来看,其高风险、低效率的特性显露
[单片机]
PROTEUS VSM<font color='red'>单片机系统</font>的PROTEUS设计与仿真
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved