单片机电子密码锁-论文(1).doc_第1页
单片机电子密码锁-论文(1).doc_第2页
单片机电子密码锁-论文(1).doc_第3页
单片机电子密码锁-论文(1).doc_第4页
单片机电子密码锁-论文(1).doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

单片机电子密码锁-论文【Abstract】This article introduced a design system which using the AT89S51 monolithic manufactures integrated circuit which a simple password locks. In this article, the design mentality and the design proposal of this design is introduced at first, it mainly divides into three big modules: Keyboard control module, digital tube demonstration module, password comparison module. Then it makes the detailed introduction to the main chip. Finally, it comprehensively narrates the system hardware partially,software are partial.This system uses the C language to carry on the software design, realizing the edition, the translation,as well as each piecemeal schematic diagram by PROTEL 99 SE, and encloses detailed programming diagram, flow chart,concrete procedure. This design may realize its function, causing the system to have the practical application, the human nature,intellectualization.【Keywords】 MCU; Determinant keyboard; Digital tube单片机电子密码锁设计【摘要】本文介绍了利用AT89S51单片机制作一个简单密码锁的设计系统。文中首先介绍了本设计的设计思路及设计方案,它主要分为三大模块:键盘控制模块,数码管显示模块,密码比较模块。然后对主要芯片做了详细介绍。最后全面地叙述了系统的硬件部分,软件部分。本系统采用C语言进行软件设计,以及运用PROTEL 99 SE设计的各个分块原理图,并附上了详细的程序设计框图,流程图,具体的程序。本设计可实现其功能,使系统更具实用化,人性化,智能化。【关键词】单片机;行列式键盘;数码管目 录单片机电子密码锁(摘要)1单片机电子密码锁(英文摘要)2第一章 课题任务与系统方案设计3第二章 系统主要芯片介绍9第三章 硬件电路设计13第四章 软件设计及实现16结 束 语18致 谢19参 考 文 献20附 录22第一章 课题任务与系统方案设计一、课题任务介绍 计一个简单的电子密码锁,用4*4键盘组成0-9数字键以及确认键、取消功能键,用6位7段数码管组成显示电路提示信息,其工作过程如下:加电后,显示“888888”。输入密码时,只逐位显示“F”,以防止泄露密码。输入密码过程中,如果不小心出现输入错误,可按“取消”键清除屏幕,取消次此输入,此时显示“888888”。再次输入需要重新输入所有6位密码。当输入密码完毕按下“确认”键时,单片机将输入的密码与设定的密码比较,若密码正确,则发光二极管亮1秒钟(以此表示密码锁打开);若密码不正确,则红色发光二极管亮1秒钟。二、系统方案设计论证与比较方案一:采用数字电路控制。其原理方框图如图11所示。715单片机电子密码锁图11 数字密码锁电路方案采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。 方案二:采用一种是用以AT89S51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口。其原理如图12所示。图12单片机控制方案 通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。三、设计思路分析经过分析,设计具备上面所述功能的电子密码锁主要需要解决3个问题。 键盘输入。 数码管显示。 单片机电路以及密码比较与处理的有关程序设计。1、键盘输入键盘是一组按键的集合,它是最常用的单片机输入设备.键盘可以分为两类:独立连接式和矩阵式。独立连接式键盘是最简单的键盘电路,每个按键独立地接入一根数据线。平时所有的数据输入线都被连接成高电平,当任何一个键按下时,与之相连的数据输入线将被拉成低电平。要判断是否有键按下,只要用位处理指令即可。这种键盘的优点是结构简单,使用方便,但随着键数的增多占用I/O口线也增加。矩阵式键盘,也即通常所讲的行列式键盘,由行线和列线组成,按键位于行、列的交叉点上,行列分别连接到按键开关的两端,行线通过上拉电阻接到高电平。无按键按动作时行线处于高电平状态;有按键按下时,交点的行线和列线相通,行线电平状态将由与此行线项链的列线电平决定。列线电平如果低,则行线电平为低;列线电平如果为高,则行线电平也为高。这是识别矩阵式键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。矩阵式键盘节省了好多的I/O口,适用于按键数量比较多的场合。本设计的4*4键盘即采用矩阵式键盘,如图1-3。图1-3 4*4键盘矩阵式键盘通过行列键盘扫描的方法可获取键盘输入的键值,从而得知按下的哪个键,具体过程如下。(1)查询是否有键按下。单片机向行扫描口输出全为“0”的扫描码,然后从列检测口检测信号,只要有一列信号不为“1”,则表示有键按下,且不为“1”的列即对应为按下的按键所在的列。(2)查询按下按键所在的行、列位置。前面已经取得了按下键的号,接下来要确定按键所在的行,这需要进行逐行扫描,单片机首先使第1行为“0”,其余各行为“1”,接着进行行列检测,若为全 “1”,表示不在第1行,否则即在第1行;然后使第2行为全 “0”,其余各行为“1”,再进行列检测,若为全“1”,表示不在第2行;这样逐行检测,直到找到按键所在的行。当各行都扫描以后仍没有找到,则放弃扫描,认为是键的错误动作。(3)对得到的行号和列号译码,得到键值。对于4*4的行列式键盘,因为按键的位置由行号和列号唯一确定,且行列各4位,所以用一个字节(8位)来对键值编码是很合适的。本设计中,将字节的高4位(D7、D6、D5、D4)表示列号(4、3、2、1),低4位(D3、D2、D1、D0)表示行号(4、3、2、1),比如11H(00010001)表示第1行第1列,21H(00100001)表示第1行第2列,24H(00100100)表示第3行第2列。在扫描键盘过程中,应该注意以下问题。(1)当按下或松开按键时,按键会产生机械抖动。这种抖动经常发生在按下或松开瞬间,一般持续几到十几秒,抖动时间随按键的结构不同而不同,。在扫描键盘过程中,必须想办法消除按键,否则会引起错误。消除按键抖动可以用硬件电路来实现,例如,利用R-S触发器来锁定按键状态。以消除抖动的影响。也可以用现成的专用消抖电路,如MC14490就是六路消抖电路。较为简单的方法就是用软件延时方法来消除按键的抖动,也就是说,一旦发现有键按下,就延时20ms以后再测按键的状态。这样就避开按键发生抖动的那一段时间,使CPU能可靠地读按键状态。在编制键盘扫描程序时,只要发现按键状态有变化,即无论是按下还是松开,程序都延时20ms以后再进行其他操作。(2)在键盘扫描中,应防止按一次键而有多个对应键值输入的情况。这种情况的发生是由于键扫描速度和键处理速度较快,当某一个键按下还未松开时键扫描程序和键处理程序已执行了多遍。这样,由于程序执行和按键动作不同步而造成按一个键有多个键值输入的错误状态。为避免发生这种情况,必须保证按一次键,CPU只对该键做一次处理。为此,在键扫描程序中不仅要检测是否有键按下,在有键按下的情况,做一次处理,而且在键处理完毕后,还应检测按下的键否松开,只有当按下的键松开以后,程序才往下执行。这样每按一个键,只做一个键处理,使二者达到同步,消除按一次键有多个键值输入的错误情况。根据需要,本设计的4*4键盘设定10个数字键(0-9)和2个功能键(ENTER和CANCEL),键盘布局如图1-4。图1-4 键盘布局方框图图中第4行暂时不用,可以作以后扩充所用。因此根据上面提到的4*4键盘的键值编码方法,各按键及其编码对应关系如表1-1。单片机电子密码锁按键行号列号键值编码01111H(00010001)11221H(00100001)21341H(01000001)31481H(10000001)42112H(00010010)52222H(00100010)62342H(01000010)72482H(10000010)83114H(00010100)93224H(00100100)确认3344H(01000100)取消3484H(10000100)表1-1 4*4键盘的键值编码2、数码管显示7段是数码管由8个发光二极管组成,其中包括7个细长型的LED和一个小数点形的LED,每个LED称为一个字段,共8段:a、b、c、d、e、f、g、dp,其中dp为小数点,如图1-5。图1-5 数码管7段数码管可以显示包括小数点的0-9数字和部分的英文字母。为了获得不同的字型,数码管各段所加的电平也不同,编码也不一样。字型、字段和编码关系如表1-2(共阴极)字型D7D6D5D4D3D2D1D0编码dpgfedcba0001111113F100000110062010110105B3010011114F401100110665011011006D6011111017D700000111078011111117F9011011116FA011101116FB011111007CC0011100139D010111105EE0111100179F0111000171表1-2 7段数码管的字型、字段和编码关系 单片机驱动LED数码管有静态显示和动态扫描显示两种方法,其中后者较为常用。动态扫描方法是用其接口电路把所显示的8个笔画字段(a-g和dp)同名端连接在一起,而每一个显示器的公共极COM各自独立的接受I/O线控制。CPU向字段输出端口输出字型码时,所有显示器接收到相同的字型码,但究竟使用哪个显示器,则取决于COM端,而这一端是由I/O控制的,由单片机决定何时显示哪一位。动态扫描用分时的方法轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二极管的余辉效应,给人的印象就是一组稳定的显示数据。动态显示需要分时显示,需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,站用的CPU时间多,但是使用的硬件少,可以大幅度地降低硬件成本和电源的功耗,还可以接生线路板空间。第二章 系统主要芯片介绍一、 AT89S51的简介AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域,如图2-1。图2-1 二、主要性能参数:与MCS-51产品指令系统完全兼容。4k字节在系统编程(ISP)Flash闪速存储器。1000次擦写周期。4.05.5V的工作电压范围。全静态工作模式:0Hz33MHz。三级程序加密锁。1288字节内部RAM。32个可编程IO口线。2个16位定时计数器。6个中断源。全双工串行UART通道。低功耗空闲和掉电模式。中断可从空闲模唤醒系统。看门狗(WDT)及双数据指针。掉电标识和快速编程特性。灵活的在系统编程(ISP字节或页写模式)。三、功能特性概述:AT89S51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32个IO 口线,看门狗(WDT),两个数据指针,两个16 位定时计数器,一个5 向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。四、AT89S51方框图,如图2-2单片机电子密码锁图2-2 AT89S51方框图五、引脚功能说明Vcc:电源电压。GND:地。P0口:P0口是一组8位漏极开路型双向I0口,也即地址数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在F1ash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:Pl 是一个带内部上拉电阻的8位双向IO口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,Pl接收低8位地址。端口引脚第二功能P1.5MOSI(用于ISP犏程)P1.6MISO(用于ISP犏程)P1.7SCK (用于ISP犏程)表2-1 P1口功能脚说明P2 口:P2 是一个带有内部上拉电阻的8 位双向IO 口,P2 的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOV X Ri 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。ALEPROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的16 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的. 要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。EAVPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。XTALl:振荡器反相放大器及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。六、AT89S51各模块介绍1、动态数码显示模块该设计中采用8位的动态数码显示,控制数码显示的数据由两部分组成,一部分为笔段亮灭控制的信号输入由“ABCDEFGH”端口输入,而控制位显示的控制信号由“S1S2S3S4S5S6S7S8”端口输入,同时该动态数码显示采用共阴数码管;具体的电路原理图如图2-3所示:图2-3 动态数码显示电路原理图第三章 硬件电路设计一、结构框图,如图3-1图3-1二、主要器件(1)单片机选用Atmel公司的芯片AT89S51,它接收键盘输入并作出判断,控制6位7段数码管和LED指示灯的显示。AT89S51完全可以满足本设计的功能需求。(2)4*4行列式键盘。用户通过键盘输入6位新密码及确认、取消功能键。(3)7段数码管。共6位数码管,对应于6位密码。(4)LED指示灯。红、绿两个LED指示灯,红灯表示输入密码错误告警,绿灯表示输入密码正确,锁打开。(5)CMOS六反相驱动器CD4069UB。CD4069UB对单片机的P2.0-P2.5进行反相操作以提供正确的数码管位选择信号,它可以提供足够的驱动电流。三、电路原理图及说明1、电子密码锁单片机及键盘电路原理图系统的电路原理图分为3部分:一是单片机及键盘电路原理图(如图3-2);二是驱动及指示灯电路原理图(如图3-3);三是6位7段数码管显示电路原理图(如图3-4)。U1为单片机芯片AT89S51,它是整个电路的核心部件联系着输入和输出。P1口用于键盘操作,P1.0-P1.3与行列线相连,R2-R5为行线的上拉电阻,P1.4-P1.7与列线相连。P0口用做7段数码管的字段选择信号,控制数码管的字段LED发光,RP1220欧姆的上拉排阻。P2口的P2.0-P2.5用于产生6位数码管的的位选信号,控制应该显示的7段数码管发光,位选择信号C1-C6需由P2.0-P2.5经过6反相器CD4069UB反相驱动。P3.0、P3.1作普通I/O口使用,前者控制绿色发光二极管,指示密码输入正确状态,后者控制红色发光二极管,指示密码输入错误状态。单片机电子密码锁1)单片机及键盘电路原理图,如图3-2图3-2单片机及键盘电路原理图2)电子密码锁6位7段数码管显示电路原理图,如图3-3 图3-3电子密码锁6位7段数码管显示电路原理图3)电子密码锁位驱动及指示灯电路原理图,如图3-4图3-4电子密码锁位驱动及指示灯电路原理图第四章 软件设计及实现一、软件环境介绍本次毕业设计软件部分采用在KEIL编译器环境下进行编程,KEIL C-51软件是众多单片机开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM,C等多种程序设计语言,界面友好。二、程序设计及说明软件设计可分为两部分。(1)键盘输入。通过行列键盘扫描程序获取所按键的行、列号,并根据表得到其键值编码。在键盘扫描时需要惊醒消抖处理。(2)数码管显示和指示灯输出。根据获取的键值编码,选择相应的功能,驱动数码管和指示灯显示。三、程序流程图,如图4-1图4-1程序流程图四、源程序1) 头文件#ifndef_PWLOCK_H / 防止PWLock.h被重复引用#define_PWLOCK_H#include #include #include #include #define uchar unsigned char#define uint unsigned intuchar digbit; / 字位uchar wordbuf6; / 字型码缓冲区uchar t1count; / 定时器1由50ms累积到1s所用的计数器uchar count; / 密码位计数uchar pw6; / 初始密码存储区uchar pwbuf6; / 输入密码存储区bit enterflag; / 确认键按下与否标志bit pwflag; / 密码正确与否标志bit showflag; / 数码管显示与否标志sbit green=P30;sbit red=P31;void display(void); / 显示函数#endif 2)主程序(见附录)结 束 语在本次毕业设计中,由于时间的关系,我只完成了基本任务部分, 系统复习了PROTEL 99 SE,硬件的设计和检测和软件的编写,单片机的有关知识。使大学三年的学习有了很好的联系。以上为本次毕业设计的单片机电子密码锁电路,它经过多次修改,但因为水平有限,此电路中也存在一定的问题,譬如说电路的密码不能遗忘,一旦遗忘,就很难打开,这可以通过增加电路解决,但过于复杂,本次设计未在其中;用开关作74LS112的CLK脉冲,不是很稳定,可以调换其它高速开关或计数脉冲;电路密码只有16种可供修改,但由于他人不知道密码的位数,而且还要求在规定的时间内按一定的顺序开锁,所以他人开锁的几率很小;电路未设声音报警系统,需要在芯片的某一端口增加一音频放大模块,这需要一段时间的进一步改进. 另外设计方案是在始终通电的前提下设计的,若是遇到断电问题则密码锁也很难打开,可以通过增加备用电源来实现,同样因为知识有限,只能做到这一步。如果有好的意见,希望老师给以支持。在整个过程中懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力, 使自己充分体会到了在设计过程中的成功喜悦。虽然这个设计做的不怎么好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。单片机电子密码锁致 谢本设计电子密码锁的工作是在我的毕业导师尹梅老师的精心指导和悉心关怀下完成的,在我的学业和设计的工作中无不倾注着导师辛勤的汗水和心血。导师的严谨治学态度、渊博的知识、无私的奉贤精神使我深受的启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意。在多年的学习生活中,还得到了许多学院领导、系领导和老师的热情关心和帮助。谢谢你们。在日常学习和生活中,班级的同学也给予了我很大帮助。最后,向所有关心和帮助过我的领导、老师、同学和朋友表示由衷的谢意!衷心地感谢在百忙之中评阅我的设计和参加答辩的各位老师!参考文献:1 余永权. ATMEL89系列(MCS-51兼容)FLASH单片机原理及应用. 电子工业出版社. 19972 李建忠 单片机原理及应用 西安电子科技大学出版社2002(1)3 胡汉才. 单片机原理及其接口技术. 清华大学出版社.1996年4 戴佳 戴卫恒 C语言应用程序设计 电子工业出版社 2006(1)5 潘新民 王燕芳. 微型计算机控制技术. 电子工业出版社. 2003年6 李钟实. 实用电子报警器精选百例. 北京:科学技术文献出版社.2002(4) 7 江思敏 姚鹏翼 胡荣. Protel电路设计教程. 清华大学出版社. 20028 阎石. 数字电子技术基础. 高等教育出版社. 1998(2)9 童诗白. 模拟电子技术基础. 高等教育出版社. 1998(4)10 龚运新 单片机C语言开发技术 清华大学出版社2006(1)单片机电子密码锁主程序:#include PWLock.h/* 键消抖延时函数 */void delay(void)uchar i;for (i=300;i0;i-);/* 键扫描函数 */uchar keyscan(void)uchar scancode,tmpcode;P1 = 0xf0; / 发全0行扫描码if (P1&0xf0)!=0xf0)/ 若有键按下delay();/ 延时去抖动if (P1&0xf0)!=0xf0)/ 延时后再判断一次,去除抖动影响scancode = 0xfe;while(scancode&0x10)!=0)/ 逐行扫描P1 = scancode;/ 输出行扫描码if (P1&0xf0)!=0xf0)/ 本行有键按下tmpcode = (P1&0xf0)|0x0f;/* 返回特征字节码,为1的位即对应于行和列 */return(scancode)+(tmpcode);else scancode = (scancode1)|0x01; / 行扫描码左移一位return(0);/ 无键按下,返回值为0 /* 定时器0中断服务子程序,2ms定时动态扫描显示 */void time0_int(void) interrupt 1 /* 重置2ms定时 */TH0 = -2000/256;TL0 = -2000%256;if (showflag=1)display();/ 调用显示函数/* 定时器1中断服务子程序,50ms*/void time1_int(void) interrupt 3 t1count+;else/ 计时到1sTR1 = 0;/ 关闭计数器1t1count = 0;green = 1;/ 绿灯不亮red = 1;/ 红灯不亮showflag = 1;/ 打开数码管显示digbit = 0x01;/ 从数码管第1位开始动态显示for (k=0;k6;k+)/ 显示888888wordbufk = 8;/* 根据共阴极字型编码表获取09,AB字型代码 */uchar getcode(uchar i)uchar p;switch (i)case 0: p=0x3f;break;/* 0 */case 1: p=0x06;break;/* 1 */case 2: p=0x5B;break;/* 2 */case 3: p=0x4F;break;/* 3 */case 4: p=0x66;break;/* 4 */case 5: p=0x6D;break;/* 5 */case 6: p=0x7D;break;/* 6 */case 7: p=0x07;break;/* 7 */case 8: p=0x7F;break;/* 8 */case 9: p=0x67;break;/* 9 */case 10: p=0x77;break;/* A */case 11: p=0x7C;break;/* B */case 12: p=0x39;break;/* C */case 13: p=0x5E;break;/* D */case 14: p=0x79;break;/* E */case 15: p=0x71;break;/* F */default: break;return(p);/* 显示函数 */单片机电子密码锁void display(void)uchar i;switch (digbit)case 1:i=0;break;case 2:i=1;break;case 4:i=2;break;case 8:i=3;break;case 16: i=4;break;case 32: i=5;break;default: break;P2 = 0x0; / 关闭显示P0 = getcode(wordbufi); / 送字型码P2 = digbit; / 送字位码if (digbit0x20) / 共6位digbit = digbit*2; / 左移一位else digbit = 0x01;/* 密码比较函数 */bit pwcmp(void)bit flag;uchar i;for (i=0;i6;i+)if (pwi=pwbufi)flag = 1;elseflag = 0;i = 6;return(flag);/* 主程序 */void main()uchar j,key;P2 = 0x0;/ 关闭数码管显示TMOD = 0x11;/ T0,T1工作方式1/* 2ms 定时设置 */TH0 = -2000/256;TL0 = 2000%256;/* 50ms 定时设置 */TH1 = -50000/256;TL1 = -50000%256;/* 启动计数器0,关闭计数器1 */TR0 = 1;ET0 = 1;TR1 = 0;ET1 = 1;EA = 1;count = 0; / 初始没有输入密码,计数器设为0enterflag = 0;/ 没有按下确认键pwflag = 0;/ 密码标志先置为0 green = 1;/ 绿灯不亮red = 1; / 红灯不亮/* 假设内定密码为937602 */pw0 = 9;pw1 = 3;pw2 = 7;pw3 = 6;pw4 = 0;pw5 = 2;digbit = 0x01; / 从第一位数码管开始动态扫描/* 刚加电时,显示888888 */for (j=0;j6;j+)wordbufj = 8;showflag = 1; / 打开数码管显示while(1) key = keyscan(); / 调用键盘扫描函数switch(key) case 0x11: / 1行1列,数字0if (count6)wordbufcount

温馨提示

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

评论

0/150

提交评论