单片机密码锁设计

发布者:耿高良最新更新时间:2013-04-03 来源: 51hei关键字:单片机  密码锁  AT89S51 手机看文章 扫描二维码
随时随地手机看文章
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次密码输入不正确的情况下发生的。[page]

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)%6;

  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;

                        } [page]

                        else if(funcount>1)

                          {

                            psbuf[funcount-2]=digitcount;

                          }

                    }

                    else

                      {

                        second3=0;

                      }

                  while(P3_7==0);

                }

            }

        }

        else

          {

            cmpflag=0;

            for(i=0;i

              {

                if(ps[i]!=psbuf[i])

                  {

                    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)%6;

  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;

        } [page]

    }

  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;

              }

          }

    }

}

关键字:单片机  密码锁  AT89S51 引用地址:单片机密码锁设计

上一篇:总线智能仪表温度控制系统的设计
下一篇:单片机数字温度计设计

推荐阅读最新更新时间:2024-03-16 13:21

51单片机的13%26#215;14点阵缩码汉卡
我们历时数载,开发成“51单片机13%26;#215;14点阵缩码汉卡”,适用于目前国内外应用最为广泛的MCSX-51及其兼容系列单片机。 与此同时,还开发了13%26;#215;14点阵汉字字模。13%26;#215;14点阵字模,可完全与目前通用的16%26;#215;16点阵汉字字模媲美,其在单片机和嵌入式系统的汉字显示应用中也具有明显的经济价值和实用意义。 1 单片机目前的汉字显示 信息交流的最主要方式之一即文字交流,但由于我国方块汉字数量繁多,构形迥异,使汉字显示一直是我国计算机普及的障碍。随着计算机技术的迅速发展,PC机的汉字显示已不成问题。但对于成本低、体积小、应用灵活且用量极为巨大的单片机而言,因其结构简单,
[单片机]
51单片机入门 - 串口通信实验(模拟串口通信/多机通信实例)
RS232串口应用实例 设计要求: 通过串口发送接收数据(串口工作方式1) 实现思路: 定时器设置 串口设置 工作方式 波特率 开启定时/计数器 串口执行 接收数据 发送数据 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 实现代码: 1 #include reg51.h 2 main() 3 { 4 TMOD = 0x20; 5 SM0
[单片机]
51<font color='red'>单片机</font>入门 - 串口通信实验(模拟串口通信/多机通信实例)
单片机中的_nop_()函数
在keil C51中,直接调用库函数: #include intrins.h // 声明了void _nop_(void); _nop_(); // 产生一条NOP指令 作用:对于延时很短的,要求在us级的,采用 _nop_ 函数,这个函数相当汇编NOP指令,延时几微秒。 NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
[单片机]
MSP430 F5529 单片机 模拟时钟 万年历 数字时钟 OLED Analog clock
做了一块MSP430 F5529转接板看起来漂亮一点,没有就直接用杜邦线接线。 https://blog.csdn.net/x1131230123/article/details/108772807 Analog clock. Starting with the current time, draw a clock face and the hour, minute and seconds hand. Use the RTC module in the MSP430, and move the hands to show the correct time. 1、 模拟时钟 OLED 功能:实时显示时钟;按键修改时钟。 2、
[单片机]
MSP430 F5529 <font color='red'>单片机</font> 模拟时钟 万年历 数字时钟 OLED Analog clock
基于单片机的EV动力蓄电池组电量计量系统
引言 随着汽车工业的迅速发展,解决汽车尾气排放所带来的大气污染问题的较好方案是发展无空气污染的交通工具,电动汽车随之应运而生。以蓄电池作为动力源的电动汽车,无论从技术上还是经济上都是最可行的。 电动汽车用的动力蓄电池通常由多节单体电池串联或者并联构成,一般串联的单体电池数可达到十至几十个,单体电池电压一般是12V,总电压在100V以上, 总容量在100Ah以上。本文所阐述的蓄电池性能检测系统在结构设计上可以根据需要增加或减少被检测电池的数量,具有较高的灵活性,单片机控制使精度可达 1%,利用改进的开路电压法进行数据运算,进一步提高了精度。 由于铅酸蓄电池容量有限并具有腐蚀性,镍镉蓄电池中镉是有污染的重金属,而镍氢
[单片机]
pic 单片机应用问答14篇
1、PIC单片机振荡电路中如何选择晶体 对于一个高可靠性的系统设计,晶体的选择非常重要。尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因是上电时电路有足够的扰动很容易建立振荡;在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。在振荡回路中晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。晶体的选择至少必须考虑谐振频点、负载电容、激励功、率温度特性、长期稳定性 2、如何判断电路中晶振是否被过分驱动? 电阻RS常用来防止晶振被过分驱动。过分驱动晶振会渐渐损耗减少晶振的接触电镀,这将引
[单片机]
单片机选型九大注意事项
电视,洗衣机,咖啡机,遥控器和所有类型的已连接设备都需要人机交互,微控制器(MCU)通过处理使之成为可能。 市场上有无数MCU可以执行这类解决方案,以下总结了九个选型考虑因素,以帮助减少复杂性。 1.安全 安全设计应不仅考虑外界的连接访问,而且还应防止黑客通过物理手段实施潜在的恶意攻击。黑客不仅试图获得控制权或损害设备,还会获得设备记录和用户数据。对安全的全面审查应包括屏蔽层,安全配置硬件,内存保护单元,加密引导加载程序和加速器。 2.性能 大多数MCU应用程序编程均在Arm,MIPS和X86 CPU上运行。适当的规划可确保设计人员选择正确的MCU和相应的处理器,以在现在和将来提供必要的器件和系统性能。MCU的
[单片机]
教你构造一个51单片机的实时操作系统
  目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我国目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度越来越快,也从一个侧面说明了51系列单片机在国内的生命力。   多年来我们一直想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能非常容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,μC/OS—II是不太适合于以上要求的
[单片机]
教你构造一个51<font color='red'>单片机</font>的实时操作系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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