单片机密码锁实验报告

合集下载

单片机电子密码锁报告

单片机电子密码锁报告

目录第1章概述1第2章系统总体方案设计2第3章硬件电路设计33.1 键盘电路设计33.2LED显示电路53.3 开锁电路73.4报警电路9第4章软件设计94.1软件设计思路94.2 各子程序设计10第5章系统调试16第6章心得体会17第7章参考文献18第8章附录198.1源程序清单198.2硬件原理图26第1章概述随着科技的发展,单片机已不是一个陌生的名词,它的出现是近代计算机技术发展史上的一个重要里程碑,因为单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。

单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具。

本文所涉及的是市场占有率最高的是MCS—51系列,因为世界上很多知名的IC生产厂家都生产51兼容的芯片。

到目前为止,MCS—51单片机已有数百个品种,还在不断推出功能更强的新产品。

本设计是基于单片机的密码锁设计方案,根据要求,给出了该单片XX码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容。

第2章系统总体方案设计系统总体设计方案框图2.1:图2.1系统总体设计方案框本方案采用一种是用以89S51为核心的单片机控制方案。

利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。

初步设计思路如下:1.输入密码用矩形键盘,包括数字键和功能键。

2.LED数码管显示输入密码,用74JS247驱动数码管发光显示数码,用74LS138控制各位显示器分时进行显示。

3.用发光二极管代替开锁的电路,发光表示开锁。

4.输入密码错误次数超过3次,系统报警。

5.打开电源后,显示器显示“000000”,设原始密码为“123456”,只要输入此密码便了开门。

单片机密码锁课题设计报告

单片机密码锁课题设计报告

单片机开发与应用工程报告题目:电子密码锁设计学号:学生姓名:专业:信息工程年级:2010级课程名称:单片机开发与应用工程训练指导老师:年月日一、设计目的:用单片机实现一个电子密码锁二、设计要求:设计一个电子密码锁系统,用4位数码管显示设定密码.输入密码正确时,用绿色发光管显示。

错误时,用红色发光管闪动显示。

三次输入错误,发出蜂鸣报警。

可进行密码修改。

a)4位数码管显示:设置密码时显示数字,输入密码时显示“----”b)存储密码功能:密码设置及修改c)报警功能:蜂鸣器报警加红色发光管闪烁显示三、设计分析【系统的主要功能】本课题实际是设计一个电子密码锁,可以设置4位密码,用2个发光二极管和一个蜂鸣器来显示输入密码的错误与正确,另外还可以有秒表的功能。

一、时间模块:正常状态显示时钟,小时和分钟。

24小时制循环。

在温度模块时,长按set键,切换进入时间模块。

1、在时钟正常显示状态下按动KSET按钮,进入时钟调整:1)调整位闪烁,此时按动KADD键进行递增,按动KSUB键进行递减2)循环按动KSET键,调整位循环闪烁,一圈以后回到正常时钟状态3)在调整时钟状态按动KFUN键,确认时钟调整有效,并保存2、时钟正常状态按动KFUN键进入倒顺计时1)上电后首次进入计时状态则为默认的正向计时,此时时间不能调整,最大计时为99秒,计时精度为0.01秒2)在停止计时状态持续按动KSET键1秒,可进行倒顺计时转换3)倒计时状态默认的时间为30分钟,最大可定时100分钟,计时精度为1秒4)在倒计时状态复位情况下,可通过按动KADD或KSUB键进行时间的递增或递减调整,调整步长为10秒。

当数值小于10以后,下调步长为1秒。

5)在计时状态停止时按动KFUN键可复位计时时间6)按动KFUN键可启动或停止计时7)在计时过程中按动KADD或KSUB键,可暂停计时和连续计时8)倒顺计时的任意情况下按动KSET键,可退出计时回到正常的时钟状态二、密码模块:如果没得存储芯片或者存储芯片坏了上电时就自动进入时钟模块1、上电时显示----,红灯亮起,系统锁定2、输入正确密码,按Kfun键确认,红绿灯亮起,系统开放10秒然后红灯熄灭3、双灯亮起时,按动Kset键,相应位闪烁,按动Kadd或Ksub进行密码修改4、密码修改后,按动Kfun键,确定密码修改完成,嘟嘟嘟蜂鸣三声,红灯熄灭,系统显示----5、单灯亮时,需要输入正确密码,亮起双灯才能修改密码6、长按Kset键,系统锁定,红灯亮起【硬件电路分析】1.晶振电路单片机晶振的作用是为系统提供基本的时钟信号。

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告课程:单片机原理学院:电子与信息工程学院专业:班级:姓名:学号:指导老师:完成日期:目录一、矩阵按键 (1)(1)按键接口 (1)(2)按键开关的抖动问题 (1)二、LCD1602液晶 (2)(1)1602 液晶的介绍 (2)(2)液晶的读写时序介绍 (4)(3)1602 液晶的指令介绍 (6)三、设计 (7)(1)输出密码后,显示LCD1602 (7)(2)输出密码后,交替亮灭显示LED (7)四、程序设计 (7)(1)主程序 (7)(二)LCD1602程序 (9)(3)矩阵键盘程序 (10)五、仿真截图 (12)(1)输出密码后,显示LCD1602 (12)(2)输出密码后,交替亮灭显示LED (15)基于51单片机的密码锁设计一、矩阵按键(1)按键接口键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向单片机输入指令、地址和数据。

一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。

(2)按键开关的抖动问题组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。

在下图1、图2中,当按键被按下时,P1.0输入为高电平;当按键按下后,P1.0输入为低电平。

由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1.0输入端的波形如图2所示。

这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全可以感应到的,因为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对单片机而言,这已是一个“漫长”的时间。

图1图2按键抖动波形为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。

单片机中常用软件法,因此,对于硬件方法我们不介绍。

软件法,就是在单片机获得P1.0口为低的信息后,不是立即认定按键已被按下,而是延时10毫秒或更长一些时间后再次检测P1.0口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。

51单片机电子密码锁报告

51单片机电子密码锁报告

信息工程学院51单片机的密码锁控制器的设计实验报告专业:电气工程及其自动化班级:10040921基于51单片机的密码锁控制器设计一、设计目的:要求设计的电子密码锁的密码用键盘上的数字按键产生的6位数字码构成的密码。

如果输入密码正确开锁(发光二极管量),如果密码不正确,发出报警信号。

二、实验要求:1、显示位数:6位密码显示2、键盘设置密码三、设计方案:本设计包括矩阵键盘接口电路、密码锁的控制电路和输出显示电路等三部分。

键盘部分包括键盘扫描时序产生电路;键盘扫描;弹跳消除;键盘译码;按键存储。

程序控制包括数字按键的数字输入;存储及清除;功能按键的功能设计;移位寄存器的设计与控制;密码清除、变更、存储;激活开锁电路;密码核对;解除电锁电路。

输出显示电路的设计包括:数据选择;BCD对显示译码;七段显示扫描。

(1)密码数据输入:每按一个数字键,在显示器上显示一个“-”最多可设置6位密码。

(2)密码设置:每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,并将先前已经输入的数据依序左移一个数字位置。

注意:密码设置必须是在开锁状态下设置。

(3)数码清除:按下此键可清除前面所有的输入值,清除成为“000000”。

(4)密码更改:按下此键时将目前的数字设定成新的密码。

(5)激活电锁:按下此键可将密码锁上锁。

(6)解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。

(7)密码错误:声光报警四、实验电路及连线:1、实验接线2、LED电平显示电路实验仪上装有8只发光二极管及相应驱动电路。

见下图,L0―L7为相应发光二极管驱动信号输入端,该输入端为高电压电平“1”时发光二极管点亮。

我们可以通过P1口对其直接进行控制,点亮或者熄灭发光二极管。

LED电平显示电路3、键盘及LED显示电路键盘和LED显示的地址译码见下图,做键盘和LED实验时,需要将KEY/LED CS接到相应的地址译码上。

位码输出的地址为0X002H,段码输出的地址为0X004H,键盘行码读回的地址为0X001H,此处X是由KEY/LED CS决定,参见地址译码。

单片机密码锁实习报告

单片机密码锁实习报告

单片机密码锁实习报告一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。

本次实习,我选择了单片机密码锁的设计与实现作为课题,旨在掌握单片机的原理与应用,提高自己的动手实践能力。

二、实习目的1. 学习单片机的原理与编程方法,了解单片机在实际应用中的优势。

2. 掌握密码锁的设计原理,学会使用单片机实现密码锁功能。

3. 培养自己的团队协作能力和解决问题的能力。

三、实习内容1. 单片机密码锁的原理与功能介绍2. 单片机密码锁的硬件设计3. 单片机密码锁的软件编程4. 单片机密码锁的系统调试与优化四、实习过程1. 单片机密码锁的原理与功能介绍单片机密码锁是一种利用单片机作为控制核心,通过密码输入来控制电路或芯片工作的安全设备。

它具有安全性高、成本低、功耗低、易操作等优点,广泛应用于各种场合。

本次设计的单片机密码锁采用4x4矩阵键盘输入密码,当密码输入正确时,锁打开,否则锁定按键3秒钟并发出报警。

2. 单片机密码锁的硬件设计硬件设计是实现单片机密码锁功能的基础。

本次设计中,硬件部分主要包括4x4矩阵键盘、LED显示、蜂鸣器报警、电磁锁等。

其中,4x4矩阵键盘用于输入密码,LED显示用于显示输入的密码,蜂鸣器报警用于发出报警声音,电磁锁用于实现锁的开关。

3. 单片机密码锁的软件编程软件编程是实现单片机密码锁功能的关键。

本次设计中,软件部分主要实现以下功能:(1)键盘扫描:检测按键是否按下,并获取按键值。

(2)密码输入:将键盘输入的按键值转换为密码,并在LED显示上显示。

(3)密码判断:判断输入的密码是否正确,正确则开锁,错误则锁定按键3秒钟并发出报警。

(4)密码修改:提供一种方式修改密码,以提高安全性。

4. 单片机密码锁的系统调试与优化在完成硬件设计和软件编程后,进行系统调试与优化。

通过反复测试,发现并解决可能存在的问题,提高系统的稳定性和可靠性。

五、实习收获通过本次实习,我学到了很多关于单片机密码锁的知识,收获如下:1. 掌握了单片机的原理与编程方法,了解了单片机在实际应用中的优势。

单片机密码锁实验报告

单片机密码锁实验报告

二○一六~二○一七学年第一学期电子信息工程系电子综合设计II报告书班级:电信(产业)1401班设计时间:2016/12/29学生姓名:学号:指导教师:二○一六年十二月一、设计要求.题目内容:设计一个基于51单片机的电子密码锁:1.可以使用4*4的矩阵键盘与红外遥控器输入密码。

2.可以通过按特殊组合键重设开锁密码。

3.显示通过1602液晶屏显示电子密码锁界面,输入密码时显示输入个数显示为‘*’,如果密码正确,进入欢迎界面。

4.密码连续输入3次错误报警,LCD显示报警,倒计时十秒后重新进入密码输入界面。

5.可以通过特殊的按键组合跳过输入界面直接进入欢迎界面。

实现方法:1.通过红外接收头,连接单片机的P3.2外部中断INT0口,可以实现单片机接收遥控器的信号输入。

2.通过矩阵键盘扫描函数,可以实现对键盘输入的响应。

3.通过引脚的高低电平变化频率,控制蜂鸣器的输入占空比和频率(低电平时间固定,通过输入给函数值的不同改变高电平时间,固定响300个周期),对不同按键实现不同声音响应。

4.1602显示屏有16*2个单元格,每个单元格由5*8个像素点组成,可以很好的显示数字,符号,英文字符。

功能需求分析:液晶屏显示:根据题意,需要设计并显示输入密码界面、修改密码界面、欢迎界面、错误警告界面密码输入:根据题意,每次输入一个数字,则显示一个‘*’符号代替,只能看出输入的位数,若输入密码位数达到六位,则与正确密码比较,若正确,进入系统。

根据日常的手机使用习惯,默认长度为6位,且第六位输入之后立即判断,正确则进入,错误则清空重输。

组合键实现密码修改:密码修改必须通过不易被他人发现的特殊方法改变,所以设计为,若同时按住矩阵键盘的5,10 或6,9两个键,则进入密码修改函数。

输入密码错误三次则报错:一般的密码系统对密码输入错误次数过多的情况进行了限制,所以在密码锁里设置,若密码输入错误三次,则进入警报界面,显示10s倒计时,必须在倒计时结束后才能再次输入密码。

单片机实习报告-密码锁

单片机实习报告-密码锁
RST:复位输入。当振荡工作时,RST引脚出现两个机器周期上高电平将使单片机复位。WDT益出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出的正脉冲信号,因此它可对外输出时钟或用于定时目地,要注意的是:第当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位禁位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚伎被微弱拉高,单片机执行外部程序时,应设置ALE无效。
存储器结构:MCS-51单片机内核采用程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空间。
程序存储器:如果EA引脚接地(GND),全部程序均执行外部存储器。在AT89C54,假如接至Vcc(电源+),程序首先执行从地址0000H-0FFFH(4KB)内部程序存储器,再执行地址为1000H-FFFFH(60KB)的外部程序存储器。
2.
AT89C54具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89C54设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

密码锁单片机实习报告

密码锁单片机实习报告

一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。

密码锁作为一种安全可靠的开锁方式,也逐渐成为了人们生活中不可或缺的一部分。

本报告主要介绍了我在单片机实习期间,基于51单片机设计的电子密码锁的过程和实践。

二、实习目的和意义本次实习的目的是学习和掌握单片机原理及应用,提高自己的动手能力和创新能力。

通过设计电子密码锁,了解并掌握单片机在实际应用中的电路设计、编程和调试技巧。

此外,电子密码锁在生活中的应用广泛,具有较高的实用价值,可以为人们提供便捷、安全的生活环境。

三、实习内容1. 电路设计本次实习的电子密码锁主要由51单片机、4x4矩阵键盘、LCD1602液晶显示屏、AT24C02存储模块、报警系统和继电器等组成。

电路设计过程中,首先对各个模块进行选型,然后绘制原理图,最后搭建实物电路。

2. 编程设计根据电路设计,编写相应的程序代码,实现密码的输入、存储、比较和报警等功能。

程序设计过程中,采用C语言进行编程,通过Keil软件进行编译和调试。

3. 系统调试将编写好的程序烧录到单片机中,对整个系统进行调试。

调试过程中,检查各个模块是否正常工作,并对可能出现的问题进行排查和优化。

四、实习过程1. 电路设计首先,根据实习要求,选用AT89C52型51单片机作为核心控制器。

然后,设计4x4矩阵键盘,用于密码的输入。

接着,选用LCD1602液晶显示屏,显示密码输入界面和开锁状态。

为了实现密码的存储,选用了AT24C02存储模块。

最后,设计报警系统和继电器,实现密码错误报警和开锁功能。

2. 编程设计根据电路设计,编写相应的程序代码。

首先,实现矩阵键盘扫描函数,用于检测按键输入。

然后,编写密码存储和读取函数,将输入的密码存储到AT24C02模块中,并在下次开机时读取。

接下来,实现密码比较函数,判断输入的密码是否正确。

最后,编写报警和开锁函数,当密码错误时发出报警,正确时驱动继电器开锁。

3. 系统调试将编写好的程序烧录到单片机中,对整个系统进行调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机系统设计实训报告专业:生产过程自动化姓名:李某班级学号:。

指导教师:。

实训期间:。

目录一.实验目的: (3)二.实验要求: (3)三.实验基本原理: (3)四.实验设计分析: (4)1.设计思想: (4)五.实验要求实现: (5)1. 电路设计: (5)2.主流程图: (7)3.4x4键盘行列式键盘原理电路图: (8)4. 显示模块 (9)五.总电路设计如下 (9)六.程序 (11)七.实验心得 (16)一.实验目的:1.熟悉单片机定时器的编程方法。

2.灵活运用单片机C语言程序中的字符串、数组、指针。

3.熟悉数码显示、LCM1602液晶显示器、YJD12864液晶显示器的编程方法。

4.熟悉掌握4x4矩阵键盘的C语言编程。

二.实验要求:1:用4×4矩阵键盘组成0-f数字键及。

2:可以自行设定或删除8位密码,3:用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则显示PASS,若密码显示错误时,显示ERR.4:自由发挥其他功能.5:要求有单片机硬件系统框图,电路原理图,软件流程图。

三.实验基本原理:这个密码锁的功能是使用矩阵键盘中的十六个键输入密码0到F还有,输入的同时在八位数码管上显示用户所输入的密码,未输入的位置用横杆填补表述未输入。

当输入的密码超出设置的位数时,数据溢出,清零。

用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则显示pass,若密码不正确,则显示err;模拟密码锁,密码固化到ROM 不能通过按键输入更改。

四.实验设计分析:1.设计思想:1. 本系统采用单片机AT89S51作为核心元件的一款具有本机开锁,加锁,修改密码和错误2.报警的电子密码锁。

3. 电子密码锁的原理是:从键盘输入一组密码,CPU把该密码和设置密码比较,对则将锁打开,错则要求重新输入,并记录错误次数,如果三次错误,则被强制锁定并报警。

初步设计思路如下:1.输入密码用矩形键盘,数字键,字母键。

2.LED数码管显示输入密码,但是只是输出显示符号8 。

采用动态扫描输出。

3. 输入密码错误时显示ERR,密码正确时显示PASS。

软件的设计主要包括矩形键盘键值的读取、LED动态扫描输出程序、密码判断程序。

电子密码锁工作的主要过程是LED数码管显示密码啊。

通过键盘输入密码,按下确认键后判断密码的正确性,正确显示PASS,错误显示ERR。

程序将分为主程序和中断服务子程序。

主程序负责键盘键值读取,密码判断和开锁,中断服务子程序主要是负责LED数码管显示。

根据程序功能,程序主要分为以下几部分:1.键盘键值读取程序键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。

按键的识别主要有两种方法:行反转法和行扫描法。

因为键盘为机械开关,容易引入抖动。

为了消除抖动干扰,在程序中要加入消除抖动的部分。

2)LED数码显示程序LED数码显示器是一种应用很普遍的显示器。

程序主要负责把要显示的数字或字母对应的显示码送到相应的LED显示管。

有多位需要同时显示时,可以采用动态刷新的方法,就可以得到稳定的输出。

循环显示8个数码管,可以实现稳定的数字显示。

中断服务程序只负责数据的输出显示,主程序根据所处的状态修正显示数据。

3)密码判断程序密码判断程序放在主程序中,有按键时读取,当确定键按下时作出判断。

在程序中设置6字节的空间存放设定的密码和8字节存放键盘输入的数据。

根据读取的键盘数据和预先设定的密码逐位比较就可以判断输入密码的正确性。

2.密码显示与开锁当密码输出时候,显示屏上逐步显示密码,逐一显示。

4.密码错误报警当用户键入正确密码并按下“确认”键时,屏幕清零会显示PASS。

当用户键入错误密码按下“确认”时,屏幕清零会显示ERR。

五.实验要求实现:1.电路设计:2.主流程图:3.4x4键盘行列式键盘原理电路图:每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。

本设计发射部分采用4x4键盘,接收部分采用4x4键盘。

键盘扫描时,首先由I/O口低四位输出高电平,高四位输出低电平,假若有键按下,那么在I/O口低四位即可读出低电平,接着延时消抖,再具体判断是何键按下。

4.显示模块五.总电路设计如下六.程序#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换#define KeyPort P1sbit LATCH1=P2^2;//定义锁存使能端口段锁存sbit LATCH2=P2^3;// 位锁存unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~Funsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量unsigned char code password[8]={1,2,3,4,5,6,7,8};//可以更改此密码做多组测试void DelayUs2x(unsigned char t);//us级延时函数声明void DelayMs(unsigned char t); //ms级延时void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数unsigned char KeyScan(void);//键盘扫描unsigned char KeyPro(void);void Init_Timer0(void);//定时器初始化/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char num,i,j;unsigned char temp[8];bit Flag;Init_Timer0();while (1) //主循环{num=KeyPro();if(num!=0xff){if(i==0){for(j=0;j<8;j++)//清屏TempData[j]=0;}if(i<8){temp[i]=dofly_DuanMa[num];//把按键值输入到临时数组中for(j=0;j<=i;j++) //通过一定顺序把临时数组中//的值赋值到显示缓冲区,从右往左输入TempData[7-i+j]=temp[j];}i++; //输入数值累加if(i==9)//正常等于8即可,由于我们需要空一个用于清屏,//清屏时的按键不做输入值{i=0;Flag=1;//先把比较位置1for(j=0;j<8;j++)//循环比较8个数值,//如果有一个不等则最终Flag值为0 Flag=Flag&&(temp[j]==dofly_DuanMa[password[j]]);//比较输入值和已有密码for(j=0;j<8;j++)//清屏TempData[j]=0;if(Flag)//如果比较全部相同,标志位置1{TempData[0]=0x3f; // "o"TempData[1]=0x73; // "p"TempData[2]=0x79; // "E"TempData[3]=0x54; // "n"//说明密码正确,输入对应操作显示"open"}else{TempData[0]=0x79; // "E"TempData[1]=0x50; // "r"TempData[2]=0x50; // "r"//否则显示"Err"}}}}}/*------------------------------------------------uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2------------------------------------------------*/void Display(unsigned char FirstBit,unsigned char Num){static unsigned char i=0;DataPort=0; //清空数据,防止有交替重影LATCH1=1; //段锁存LATCH1=0;keyPort=dofly_WeiMa[i+FirstBit]; //取位码LATCH2=1; //位锁存LATCH2=0;DataPort=TempData[i]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;i++;if(i==Num)i=0;}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/void Timer0_isr(void) interrupt 1{TH0=(65536-2000)/256; //重新赋值2msTL0=(65536-2000)%256;Display(0,8); // 调用数码管扫描}/*------------------------------------------------按键扫描函数,返回扫描键值------------------------------------------------*/unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法{unsigned char cord_h,cord_l;//行列值中间变量KeyPort=0x0f; //行线输出全为0cord_h=KeyPort&0x0f; //读入列线值if(cord_h!=0x0f) //先检测有无按键按下{DelayMs(10); //去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f; //读入列线值KeyPort=cord_h|0xf0; //输出当前列线值cord_l=KeyPort&0xf0; //读入行线值while((KeyPort&0xf0)!=0xf0);//等待松开并输出return(cord_h+cord_l);//键盘最后组合码值}}return(0xff); //返回该值}/*------------------------------------------------按键值处理函数,返回扫键值------------------------------------------------*/ unsigned char KeyPro(void){switch(KeyScan()){case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值case 0x7d:return 1;break;//1case 0x7b:return 2;break;//2case 0x77:return 3;break;//3case 0xbe:return 4;break;//4case 0xbd:return 5;break;//5case 0xbb:return 6;break;//6case 0xb7:return 7;break;//7case 0xde:return 8;break;//8case 0xdd:return 9;break;//9case 0xdb:return 10;break;//acase 0xd7:return 11;break;//bcase 0xee:return 12;break;//ccase 0xed:return 13;break;//dcase 0xeb:return 14;break;//ecase 0xe7:return 15;break;//fdefault:return 0xff;break;}}七.实验心得在科技高度发展的今天,计算机在人们之中的作用越来越突出。

相关文档
最新文档