基于8051单片机的电子密码锁设计_第1页
基于8051单片机的电子密码锁设计_第2页
基于8051单片机的电子密码锁设计_第3页
基于8051单片机的电子密码锁设计_第4页
基于8051单片机的电子密码锁设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业目 录 TOC o 1-3 h z u 一、引言1.1问题的提出在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。眼下假冒伪劣的机械锁泛滥成灾,互开率非常之高。机械锁的这些弊端为一种新型的锁-电子密码锁,提供了发展的空间。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这

2、种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。但较实用的还是按键式电子密码锁。随着单片机的问世,出现了带微处理器的智能电子密码锁,它除了具有一般电子密码锁的功能外,还引入了智能化管理,专家分析系统等功能,从而使密码锁具有很高的安全性,可靠性。当今安全信息系统应用越来越广泛,特别在保护机密、维护隐私和财产保护

3、方面起到重大作用,而基于电子密码锁的安全系统是其中的组成部分,因此研究它具有重大的现实意义。1.2国内外的研究现状20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,只适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。目前,在西方发达国家,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子密码锁的成本还很高,应用还不广泛。目前市场上的按键密码锁主要有以下两类,但都存在不同程度的缺陷。固定键盘式电子密码锁:这类密码锁使用固定键盘输入门锁密码。用

4、户密码可以在18位任意设定,密码量极大,尝试法输入密码时,系统会出现保护性自锁,同时具有自动报警功能。这种密码锁成本不高,操作非常简单,常与机械弹子锁配合使用。类密码锁有以下缺陷:需要安装固定键盘,数字按键的位置固定不变,用户在操作时没有隐蔽性,其他人可以通过记住密码输入人员的手势推测出输入的密码,或被他人偷拍输入过程而得到密码。随机键盘式密码锁:为了防止用户在利用固定键盘输入密码的过程被偷窥或偷拍,研制出了随机键盘系统。用这种键盘输入密码时,每输入一个数字,键盘上的数字键的摆放顺序会随机变化,用户利用变化后的键盘输入下一位数字,使得利用偷窥或偷拍的方式记住密码的企图无法奏效。但它的缺点也是显

5、著的:由于随机键盘对硬件要求较高,要采用触摸屏幕,键盘与显示器就必须合二为一,因此成本较高,难于应用到保险柜上。二、设计方案2.1硬件设计方案本设计主要由单片机、矩阵键盘、液晶显示器、复位电路和晶振以及蜂鸣器等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与预先保存的密码进行对比,从而判断密码是否正确。通过单片机控制输出到喇叭及继电器的电信号,从而实现错误报警与正确打开电子锁的操作。本设计中采用继电器上接LED灯来表示锁的开关状态。系统整体设计框图如图2-1所示。电源 电源键盘输入模块键盘输入模块晶振电路复位电路

6、AT89C52显示模块报警电路开锁电路 图2-1各模块主要功能如下:1键盘输入模块:分为密码输入按键与几个功能按键,用于完成密码的输入功能。2显示模块:用于完成对系统状态显示及操作提示功能。3报警电路:用于完成输错密码时候的警报功能。4复位电路:完成系统的复位。5开锁电路:应用继电器及发光二极管模拟开锁,完成开锁及开锁提示。6晶振电路:外接晶振,使系统具有需要的机器周期,对开锁时间的决定有很大用处。7. 电源:提供5V电压值的直流供电。2.2软件设计方案利用51 单片机,设计密码锁电路和控制程序。其基本功能实现如下: 1、 使用LCD 显示器来显示密码输入的相关信息。 2、 可以设置4 位数字

7、和符号(0-9,*)密码。 3、 内定一组4 位数字密码“1234”4、 键盘设置以下5 个功能键: A:设置新的密码 B:输入密码 C:清除按键 D:返回按键初始态按键 #:密码输入完成确认 R:系统复位键 5、 密码输入正确则继电器启动2 秒。输入错误则发出警报声。 程序开始执行,LCD 显示器显示如下: PASSWORD A OR B KEY 按下键A:设置新的4 位数字或符号(0-9,*)密码。 按下键B:输入4 位数字或符号(0-9,*)密码并做检查。 当输入4 位数字密码,正确时,LCD 显示:PASSWORD OK 。继电器启动2,用以仿真电子门锁开启。 错误时,LCD 显示:P

8、ASSWORD ERROR ,同时蜂鸣器产生声响报警。Y密码为4位Y密码为4位YYNN开始程序初始化B:开锁密码正确密码正确出错报警开锁继电器器吸合2s输入修改的密码N修改密码返回zA:修改密码 图2-2三、 硬件电路设计3.1单片机AT89C52简介3.1.1 主要特性AT89C52单片机是一个低功耗,高性能CMOS 8位单片机,片内含8K Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和I

9、SP Flash存储单元,功能强大的微型计算机的AT89CAT89C52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。表3-1中列出了AT89C5表3-1 AT89C52主要特性兼容MCS-51指令系统8k

10、可反复擦写(1000次)ISP Flash ROM32个双向I/O口4.5-5.5V工作电压3个16位可编程定时/计数器时钟频率0-33MHz全双工UART串行中断口线256x8bit内部RAM2个外部中断源低功耗空闲和省电模式中断唤醒省电模式3级加密位看门狗(WDT)电路软件设置空闲和省电功能灵活的ISP字节和分页编程双数据寄存器指针 3.1.2 管脚说明AT89C52的管脚分布如图3-1P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。P1口是一个内部提供上拉电阻的

11、8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P3口作

12、为AT89S52的一些特殊功能管脚备选功能,P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)图3-1 P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为

13、振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密

14、方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3.2 44矩阵键盘图3-2 图3-3由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清除功能等。键盘的每个按键功能在程序

15、设计中设置。如图所示,本系统采用44矩阵键盘,16个按键分为输入字符和数字键:*、0、#、1、2、3、4、5、6、7、8、9;功能键A、B、C、D。矩阵键盘内部原理图如图3-2所示,外观图如图3-3所示。3.3复位电路单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。复位后PC0000H,使单片机从第个单元取指令。单片机复位后重装初始密码。时钟电路工作后,在REST管脚上加两个机器周期的高电平,芯片内部开始进行初始复位(如图34)。图3-4 这是一个不仅可上电自动复位,同时也可按键脉冲复位的双功能复位电路。复位键名称为R,对应于软件设计中的复位功能按键。

16、3.4 振荡电路AT89C52引脚XTAL1和XTAL2与晶体振荡器及电容连接。晶振、电容及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容的容量有关,但主要由晶振频率决定,范围在033MHz之间,电容取值范围在535pF之间。本设计晶振选择频率为12MHZ,电容选择33pF如图35。经计算得单片机工作胡机器周期为:12(112M)=1us。图3-53.5 液晶显示屏LCD现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0

17、D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。如图3-6所示。接口信号说明:1602型LCD的接口信号说明如表3-2所示。表3-2 1602型LCD的接口信号说明第1脚VSS 电源地第9脚D2双向数据线第2脚VDD +5V电源第10脚D3双向数据线第3脚VEE 液晶显示偏压信号第11脚D4双向数据线第4脚RS 数据/命令选择端第12脚D5双向数据线第5脚R/ W 读/写 选择端第13脚D6双向数据线第6脚E 使能端第14脚D7双向数据线第7脚D0双向数据线第15脚BLA 背光源正极第8脚D1 双向数据线第16脚BLK 背光源负极主要技术参数:1602型

18、LCD的主要技术参数如表3-3所示。表3-3 1602型LCD的主要技术参数显示容量162个字符芯片工作电压4.55.5V工作电流2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.954.35(WXH)mm基本操作程序:读状态:令RS=L,RW=L, E=H 输出:D0D7=状态字读数据:令RS=H,RW=H, E=H 输出:无写指令:令RS=L,RW=L,D0D7=指令码,E=高脉冲 输出:D0D7=数据写数据:令RS=H,RW=L, D0D7=数据, E=高脉冲 输出:无LCD中D0D7这8个引脚在设计时接到了P0口。P0口输出级有个锁存器,一个数据选择器还有两个场效应管。当P0口

19、做IO口使用时,如果IO口实际输出为0,下拉场效应管导通,外界可以通过场管检测到低电平。而如果实际输出为1,这个场效应管是截止的,如果没有上拉电阻,P0口就没有办法知道确切的值,处于一种实际上悬空的状态。这时应加上上拉电阻,同时也提高了驱动能力。 图3-63.6 开锁电路设计开锁控制电路的功能是当输入正确的密码后将锁打开。本系统使用单片机的P3.6口线发出信号,经PNP三极管放大后,通过继电器驱动电磁阀动作将锁打开2秒钟。在电路中设置有两盏LED灯:绿灯亮时,锁是闭合的,而红灯亮时将锁打开。本电路中采用PNP而不用NPN型三极管,是因为P3.6口低电平时提供的灌电流经PNP放大后比高电平NPN

20、放大的电流大,拉动能力更强。电动锁的开锁电路图如图3-7所示。 图3-73.7 报警电路报警电路的功能是由系统发出报警信号控制报警装置的发声。当输入密码错误时启动报警装置。报警部分由一个发声装置及外围电路组成,正常情况下不发声,只有当密码输入错误时,单片机的P3.7口线输出高电平信号并经三极管放大后,使喇叭发出声音报警。当密码正确时,喇叭不发声报警,而是直接开锁。当然,喇叭的发声也可用脉冲信号来实现。图3-8四、软件程序设计4.1软件设计流程图设计功能概述:开始时LCD显示提示“PASSWORD A OR B KEY”。按下A键:设置新密码,LCD第2行显示“A:”提示当前为A修改密码模式。需

21、要先正确输入原始密码,再输入所要改成的密码。若原始密码错误则蜂鸣器报警,显示“Password Error”这时可再按A键进行重新的设置,直到正确输入了初始密码。正确输入了初始密码后,LCD的第一行提示“NEW PASSWORD”,这时输入可输入4位数新密码,按#键确认。若新密码不足4位,程序返回到“NEW PASSWORD”的设置初始态,直到输入了4位数字密码并按下#键,才将密码修改完成。按下B键:输入密码并检查,系统会将所输入的密码与系统密码进行比对。若输入密码正确则在LCD第二行显示“Password OK”,同时继电器启动2s,用以仿真电子门锁开启。若输入密码错误则显示“Passwor

22、d Error”, 同时蜂鸣器产生声响报警。按下C键:可以清除输入错误的密码,前提是要已经输入了数字,若没有数字输入则无输入可清除。按下D键:返回初始态即LCD第一行显示“PASSWORD”第二行显示“A OR B KEY”。该按键与系统复位键R的区别在于,系统复位键R按下时密码锁内部的密码将变为初始密码“1234”,而当D键按下时修改后的密码不会被归于初始密码“1234”,即可记住修改的密码。数字键和*键:作为密码使用,按下对应按键,LCD显示屏第二行显示对应的按键值,并将其记入于一个输入密码数组中。当输入数目大于4个时,再按输入将没有反应,这时可以按C键清除错误位后再次写入。软件设计的总流

23、程图如图4-1所示。NN数字键开始LCD显示及相关处理键盘扫描,是否有键输入功能键(A、B、C、D、#)还是数字(含*键)键功能键模块程序处理功能键Y数字键模块程序处理图4-14.2 具体功能软件实施说明:该部分将对主要涉及的功能模块进行详细的叙述。4.2.1 如图3-2,本系统使用44矩阵键盘当没有键按下时,行线和列线之间是不相连的,若第N行与第M列的键被按下,那么第N行与第M列的线就被接通。根据上述原理,本系统的键盘扫描方法是利用P1口的低四位作为行扫描线,P1口的高四位作为列回扫线。具体实施方法为:先使P1.0口输出低电平,P1口其他口输出高电平,然后对P1.4、P1.5、P1.6、P1

24、.7四个口分别作判断。若此四口都为高电平,则没有键按下;若有键按下,P1.4、P1.5、P1.6、P1.7四个口必定有一个口输入为低电平,再判断P2.4、P2.5、P2.6、P2.7哪个口为低电平则可判断按键在哪列上。如P1.4、P1.5、P1.6、P1.7没有低电平,再使P1.1为低电平,其他口为高电平,依次扫描下去,找到按键所在的行,再判断P1口的高四位哪一位为低,便可知道键在哪一列上。流程图见图4-2,主要过程如下:判断有无键按下;延时后判断是否确实有键按下。如果有,确认有键按下,如果没有,那么确认为键抖动;判断是哪个键被按下(键扫描获得闭合键的行、列值);是是是否输入行扫描信号行扫描信

25、号移位读入列信号是否有键输入?按照行列计算键值返回特征码释放按键扫描端口否是开始是否有列信号输入延时去抖动否是否有键输入?图4-24.2.2 分为3个子程序:LCD1602 命令字写入、LCD1602 初始化、LCD1602 字符写入LCD1602 命令字写入子程序作用是将数据端的值,写入LCD中。程序如下:void lcd_command_write(uchar command) lcd_data_port = command; lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; delay_1ms(1); lcd_en_port = 1;

26、lcd_en_port = 0; LCD1602 初始化主要作用是设定LCD的工作模式。程序如下:void lcd_system_reset() lcd_command_write(0 x01); lcd_command_write(0 x38);lcd_command_write(0 x0c);LCD1602 字符写入主要作用是在显示屏的第x_pos行第y_pos列写入字符lcd_dat。程序如下:void lcd_char_write(uchar x_pos,y_pos,lcd_dat) x_pos &= 0 x0f; /* X位置范围 015 */ y_pos &= 0 x01; /*

27、Y位置范围 0 1 */ if(y_pos=1) x_pos += 0 x40;/*第2行的附加数*/ x_pos += 0 x80; lcd_command_write(x_pos); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat;lcd_en_port = 1; lcd_en_port = 0; 4.2.3 主程序数字键处理部分以数字键1为例说明。switch(key_value_buff) /*显示按键对应的丝印*/case 0 x18: if(n4&s=0) lcd_char_wri

28、te(k,1,1); inputwordn=1; k+; n+; break; 0 x18是数字键1的键盘扫描特征码。n用于记录密码位数,n的初值为0,n4即确保只能输入4位密码,每输入一位密码n加1。s用于输入错误密码时的按键输入锁定,当n=1时数字键无法输入,s=0时才能输入密码。k用于记录显示数字的位置,每输入一位密码,k加1即下移一位。lcd_char_write(k,1,1);在第2行的第k位写字符1inputwordn=1;在记录密码的数组第n位记录键值14.2.4 主程序功能键处理部分返回按键D:按下该键时LCD第一行显示“PASSWORD”,第二行显示“A OR B KEY”n

29、=0; k=6; d=0; j=0; s=1; 的作用是参数的初始化。case 0 x81: /*返回按键,对应键盘上的D*/ for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i6&n0) lcd_char_write(k-1,1, ); k-; n-; inputwordn= ;break;密码输入按键B:将s参数设为0,数字按键才能输入;而后在第二行写提示符“B:” k=6; d=0; j=0; s=0; 的作用是参数的初始化设定。SSR=1;表示锁是关的。case 0 x84: /*输入密码按键对应键盘上的B*/s=0;

30、for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); lcd_char_write(0,1,B);lcd_char_write(1,1,:); for(i=2;i16;i+) lcd_char_write(i,1, ); /*显示标题*/ k=6; d=0; s=0; j=0; SSR=1; break;密码修改按键A: 将s参数设为0,数字按键才能输入;而后在第二行写提示符“A:” 参数初始化中d=1;表示处于密码修改模式中。(d=0是开锁模式;d=2是输入了正确密码后的开锁模式)case 0 x88:/*修改密码按键对应键盘上的A*/s=0;f

31、or(i=0;i16;i+) lcd_char_write(i,0,key_table_1i);lcd_char_write(0,1,A);lcd_char_write(1,1,:); for(i=2;i16;i+) lcd_char_write(i,1, ); n=0; s=0; k=6;d=1; /*修改密码按键,按下时的状态初始化*/ break;确认按键#:根据具体的参数条件执行相应的语句,主要有:密码匹配状态检查;密码错误处理;开锁模式(d=0)处理;修改密码模式(d=1)处理;正确输入初始密码后的修改密码模式(d=2)处理;case 0 x41:/*确认按键对应键盘上的#*/s=0

32、;/*密码匹配状态检查*/if(d!=2) for(j=0,n=0;n4;n+) if(passwordn=inputwordn) j+;/*j!=4 输入密码错误不开锁,并报警*/if (j!=4) for(i=0;i16;i+) lcd_char_write(i,1,key_error_tablei); Speaker_output(); /*喇叭发出声音*/n=0;k=6;s=1; /*d=0对应输入密码状态,输入了正确的初始密码后开锁*/if (j=4&d=0) for(i=0;i16;i+) lcd_char_write(i,1,key_pass_tablei); for(i=0;i

33、4;i+) inputwordi= ;/*清空存储的密码*/ SSR=0;/*开锁了*/ for(i=0;i20;i+) delay_1ms(100); SSR=1; n=0;k=6;s=1; /*d=1对应修改密码状态,当输入了正确的初始密码后d=2*/if (j=4&d=1)d=2; n=0; k=6; for(i=0;i16;i+) lcd_char_write(i,0,key_table_3i); for(i=6;i10;i+) lcd_char_write(i,1, ); /*d=2对应修改密码状态下,已经输入正确的初始密码;当n=4时新密码输入完成*/if(d=2&n=4) n=0

34、;k=6;d=0; for(i=0;i4;i+) passwordi=inputwordi; for(i=0;i16;i+) lcd_char_write(i,0,key_modify_tablei); /*d=2对应修改密码状态下,已经输入正确的初始密码;当n!=4时新密码重新输入*/if(d=2&n!=4) n=0; k=6; for(i=0;i16;i+) lcd_char_write(i,0,key_table_3i); for(i=6;i10;i+) lcd_char_write(i,1, ); break;五、设计原理图图5-1六、设计程序/* 程序说明: #键为确认键,程序中*键

35、当密码使用 R键设定为图中的复位键 C为清除键 D为返回 LCD显示中没用忙等待 用延时确保数据的写入*/*头文件*/#include #include #define uint unsigned int#define uchar unsigned char#define scan_key_port P1 /*定义矩阵按键端口*/sbit lcd_rs_port = P20; /*定义LCD控制端口*/sbit lcd_rw_port = P21; /*定义LCD控制端口*/sbit lcd_en_port = P22; /*定义LCD控制端口*/#define lcd_data_port P

36、0 /*定义LCD控制端口*/sbit SSR = P36; /*继电器端口*/sbit Speaker_port = P37; /*喇叭控制端口*/uchar password = 1234;/*初始密码*/uchar inputword4;/*输入的密码存放*/*1MS为单位的延时程序*/void delay_1ms(uchar x) uchar j; while(x-) for(j=0;j125;j+); /*喇叭发声简单程序*/void Speaker_output()uchar i;for(i=0;i100;i+)Speaker_port = 0;delay_1ms(3);Speak

37、er_port = 1;delay_1ms(1);/*矩阵按键扫描程序*/uchar key_scan() uchar sccode,recode; scan_key_port=0 xf0; /* 发全 0 的行扫描码,列线输入 */ if(scan_key_port&0 xf0)!=0 xf0) /* 若有键按下 */ delay_1ms(2); /*延时去抖动*/ if(scan_key_port&0 xf0)!=0 xf0) /* 若有键按下 */ sccode=0 xfe; /*逐行扫描初值*/ while(sccode&0 x10)!=0) scan_key_port=sccode;

38、 /* 输出行扫描码 */ if(scan_key_port&0 xf0)!=0 xf0) /* 本行有键按下 */ recode=(scan_key_port&0 xf0)|0 x0f; scan_key_port=0 xf0;scan_key_port = 0 xff; /*释放按键扫描端口*/ return(sccode)+(recode);/* 返回特征码 */ else sccode=(sccode1)|0 x01; /* 行扫描左移一位 */ scan_key_port = 0 xff; /*释放按键扫描端口*/ return(0); /* 无键按下,返回值为0 */void lc

39、d_command_write(uchar command) /*LCD1602 命令字写入*/ lcd_data_port = command; lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0;delay_1ms(1); lcd_en_port = 1; lcd_en_port = 0; void lcd_system_reset() /*LCD1602 初始化*/lcd_command_write(0 x01); lcd_command_write(0 x38);lcd_command_write(0 x0c);void lcd_char

40、_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/ x_pos &= 0 x0f; /* X位置范围 015 */ y_pos &= 0 x01; /* Y位置范围 0 1 */ if(y_pos=1) x_pos += 0 x40; x_pos += 0 x80; lcd_command_write(x_pos); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat;delay_1ms(1); lcd_en_port = 1; lcd_en_po

41、rt = 0; uchar key_table_1 = PASSWORD ;uchar key_table_2 = A OR B KEY ;uchar key_table_3 = NEW PASSWORD ;uchar key_pass_table = Password OK ;uchar key_error_table = Password Error ;uchar key_modify_table = PasswordModified;void main() uchar key_value_buff;uchar i,n=0, /*n用于记录密码位数*/ k=6,/*k用于记录显示数字的位置

42、*/ d=0, /*d用于记录确认按键的状态*/ j=0,/*j用于密码匹配,=4时密码正确*/ s=1; /*s用于输入错误密码时的按键输入锁定,使其不能输入*/lcd_system_reset();for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i16;i+) lcd_char_write(i,1,key_table_2i); /*显示标题*/while(1)key_value_buff = key_scan();if(key_value_buff != 0)switch(key_value_buff) /*显示按键对应的

43、丝印*/case 0 x18: if(n4&s=0) lcd_char_write(k,1,1); inputwordn=1; k+; n+;break;case 0 x28:if(n4&s=0) lcd_char_write(k,1,2); inputwordn=2; k+;n+;break;case 0 x48:if(n4&s=0) lcd_char_write(k,1,3); inputwordn=3; k+;n+;break;case 0 x44: if(n4&s=0) lcd_char_write(k,1,4); inputwordn=4; k+;n+;break;case 0 x2

44、4: if(n4&s=0) lcd_char_write(k,1,5); inputwordn=5; k+;n+;break;case 0 x14: if(n4&s=0) lcd_char_write(k,1,6); inputwordn=6; k+;n+;break;case 0 x12: if(n4&s=0) lcd_char_write(k,1,7); inputwordn=7; k+;n+;break;case 0 x22: if(n4&s=0) lcd_char_write(k,1,8); inputwordn=8; k+;n+;break;case 0 x42: if(n4&s=0) lcd_char_write(k,1,9); inputwordn=9; k+;n+;break;case 0 x21: if(n4&s=0) lcd_char_write(k,1,0); inputwordn=0; k+;n+; break;case 0 x11: if(n4&s=0) lcd_char_write(k,1,*); inputwordn=*; k+;n+;break;case 0 x81: /*返回按键对应键盘上的D*/ for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i6&n0) lc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论