北邮单片机实验报告(电子密码锁)

xx 班 xx 号 xx 单片机设计实验报告

2015 年小学期单片机设计实验报告

题目:基于 PIC 单片机的电子密码锁

级:

班内序号: 实验组号: 学生姓名: 指导教师:

xx 班 xx 号 xx 单片机设计实验报告

期中检查

教师评语

指导教师签字:

2

xx 班 xx 号 xx 单片机设计实验报告

基于 PIC 单片机的电子密码锁 ——xx 班

实验摘要

在日常的生活和工作中, 住宅与部门的安全防范、 单位的文件档案、 财务报表以及一些 个人资料的保存多以加锁的办法来解决。 若使用传统的机械式钥匙开锁, 人们常需携带多把 钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。 随着科学技术的不断发展, 人们对 日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性, 用密码代替钥匙的密码锁应运而生。 密码锁具有安全性高、 成本低、 功耗低、 易操作等优点。 在安全技术防范领域, 具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁, 克服 了机械式密码锁密码量少、 安全性能差的缺点, 使密码锁无论在技术上还是在性能上都大大 提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智 能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从 而使密码锁具有很高的安全性、可靠性,应用日益广泛。 设计本课题时构思的方案是用以 PIC16F877 为核心的单片机控制方案。 目前使用的电子密码锁大部分是基于单片机技术, 以单片机为主要器件, 其编码器与解 码器的生成为软件方式。 本系统由16F877单片机系统(美国微芯 Microchip 公司推出的高性能单片机)、4×4 矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改四位用户密码、输入提示、密 码错误报警等功能 。本系统成本低廉,功能实用。

xx

Abstract

Replace the lock on the preservation of the safety precautions in their daily life and work, housing and department, unit files, financial statements, and some personal information to lock approach to solve. If the use of traditional mechanical key in the lock, people often need to carry multiple keys, use very inconvenient, and the loss of key security that is greatly reduced. Along with the science and technology unceasing development, people daily life safety insurance device requirements more and more high. In order to meet the people on the requirements and increase the security of password key password lock shipped. Password lock is safe, low cost and power consumption is low, easy to operate and When the advent of the shortcomings of less type. In the security technology to guard against, with anti-theft alarm function electronic password lock gradually replace the traditional mechanical cipher lock, overcome the mechanical password lock, safety performance is poor, the password lock both in technology and in performance are greatly improved step. With large scale integrated circuit technology development, in particular, is a single chip, the microprocessor intelligent password lock, which is in addition to the electronic password lock function, but also introduced the intelligent management, expert analysis system and other functions, which enable password lock has a high safety and reliability, is applied more and more widely.

3

xx 班 xx 号 xx 单片机设计实验报告

This design topic conception scheme Is used to PIC16F877 as the core of the microcontroller control program. At present, most of the electronic password lock is based on SCM technology, with the single chip microcomputer as the main device, the encoder and decoder are generated as the software. The functions of this system by 16F877 microcontroller system (American microchip microchip company launched high performance microcontroller), 4 * 4 matrix keyboard, LCD1602 display and alarm system, has set up, modify the four user password, input prompt, wrong password alarm etc.. The system into the low, functional and practical.

关键字

单片机——microcontroller LCD1602——LCD1602 密码锁——Password lock 4*4矩阵键盘——4*4 matrix keyboard

一.实验论证与比较

1.实验总体方案的确定

本系统电子密码锁的设计主要由 4 部分组成:PIC16F877 单片机,4×4 矩阵键盘接口 电路,LCD1602 液晶显示以及 LED 提示灯。本实验的核心是编写程序,实验中采用汇编语言, 通过软件 MPLAB 进行程序的烧写, 将一块块的子程序进行嵌套最终融合起来成为整个项目的 完整程序。为了实现密码的保密性,采用一个 4×4 的矩阵式键盘来提高密码的保密性。采 用 LCD1602 液晶显示器来作为显示单元, 提高了可读性, 使用户对密码锁的运行情况一目了 然。

2.PIC16F877 系列单片机简介

PIC16F87X ( 含873P874P876P877) 是美国微芯(Microchip) 公司推出的高性能单片 机,除具有单片机的通用资源外,该系列单片机还采用哈佛总线结构、二级指令流水线取指 方式、精简指令集(RISC)和内部具有E2 PROM 数据存储器及FLASH 结构的程序存储器、仅35 条单字节单周期指令、在系统串行编程技术和在线调试技术。 因此采用该系列单片机的产 品具有低成本、低功耗、高速度、高可靠性、体积小、性价比高等特点。 其芯片引脚图如 图1所示。 另外,它内部的EEPROM 数据存储器不仅具有掉电保护数据的功能,更重要的是 它的读写操作均是由单片机内部时序控制,即外部电路无法对其进行访问, 因而具有极高 的数据保密性,这使得PIC16F87X在加密性产品如智能IC 卡、密码锁、电子防盗系统等方面 有很广泛的应用。

4

xx 班 xx 号 xx 单片机设计实验报告

二.系统总体设计

本设计主要由单片机、 矩阵键盘和液晶显示器等部分组成。 其中矩阵键盘用于输入数字 密码和进行各种功能的实现。 由用户通过连接单片机的矩阵键盘输入密码, 后经过单片机对 用户输入的密码与自己保存的密码进行对比, 从而判断密码是否正确, 然后控制引脚的高低 电平传到开锁电路或者报警电路控制开锁还是报警, 实际使用时只要将单片机的负载换成电 子密码锁的电磁铁吸合线圈即可。

1.系统模块总体框图:

键盘电路

电源电路

复位电路

片 机

LCD 显示电 路

晶振电路

16F877

LED 报警电 路

5

xx 班 xx 号 xx 单片机设计实验报告

1.1 电源电路模块

U1 LM 7805C T D1 Vr eg IN 1B H62 C1 100uF C2 100nF C5 100uF C3 100nF O UT

从电源插座进来的是 9V 直流电,经一片三端稳压器,将其转换为 5V 的稳定电压。 电源滤波的重要性, 一个电路板的滤波特性如果不好, 严重时将会影响整个电路板不能 正常工作。所以要注意一个大电容和一个小电容并联滤波,电源线要粗,走线要合理, 模拟电路最好大面积接地。 其主要作用是为电路提供工作电压,保证电路正常工作。

1.2 复位电路模块

主要是用于人工复位。

1.3 晶振电路模块

Osc1 5v

GND

主要是为单片机工作提供适当的工作频率。

6

xx 班 xx 号 xx 单片机设计实验报告

1.4 4*4 矩阵键盘输入模块的设计

VCC R1 行线 3 行 RD7 4.7kΩ 1 R2 4.7kΩ 2 R3 4.7kΩ 3 R4 4.7kΩ 4

2 行 RD6

5

6

7

8

1 行 RD5

9

0

A

B

0 行 RD4 列线

C RB3 3列

D RB2 2列

E RB1 1列

F RB0 0列

键盘采用 4* 4 矩阵键盘 ,行线连接到 RD 端口,列线连接到 RB 接口。行列式键盘,由 横竖两排线路组成, 每个行与列的交叉点有一个按键, 当键盘按下时就将相互交叉的两条导 通,能够有效地提高单片机系统中 I/O 口的利用率。 其中 R1-R4 是上拉电阻,16 个键分别 为 0~9 的数字键及 A~F 的功能键,F 键则表示密码重置。键盘主要用于输入密码或进行 功能、状态切换。

1.5 LCD1602 液晶显示模块的设计

本系统设计的显示电路是为了给使用者以提示而设置的为了达到界面友好的目的, 显示部 分由液晶显示器 LCD1602 取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用 键盘上的数字键 0-9 输入密码, 每按下一个数字键后在显示器上显示一个*, 输入多少位就 显示多少个*。当密码输入完成时,如果输入的密码正确的话, LCD 显示“SUCCESS”;如果 密码不正确,LCD 显示屏会显示“5 TIMES LEFT”, 若 5 次输入都不正确,则 LCD 显示“5 TIMES FAILED ”“LOCKED 10S”。 当按下 F 键重置密码时, LCD 显示 “PLEASE RESET” “OLD”, 输入正确旧密码之后,LCD 显示“NEW”,再输入新密码即可。

7

xx 班 xx 号 xx 单片机设计实验报告

1.5.1 LCD1602A 液晶显示屏接线图

1 VDD 2 3 RE0 4 5 RE1 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 6 7 8 9 10 11 12 13 14 15 VCC 16

VSS VDD VL RS R/W EN D0 D1 D2 D3 D4 D5 D6 D7 LED+ LED-

8

xx 班 xx 号 xx 单片机设计实验报告

1.5.2 引脚功能 编号 符号 引脚说明 编号 符号 引脚说明

1 2 3 4 5 6 7

VSS VDD VL RS R/W EN D0

电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据

9 10 11 12 13 14 15

D2 D3 D4 D5 D6 D7 LED+

数据 数据 数据 数据 数据 数据 背光源正极 背光源负极

8

D1

16

LED-

引脚说明: 第 1 脚:VSS 为地电源。 第 2 脚:VDD 接 5V 正电源。 第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对 比度过高时产生“鬼影”,使用时通过一个 10K 的电位器调整对比度。 第 4 脚:RS 为寄存器选择,高电平时选数据寄存器、低电平时选指令寄存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共 同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号, 当 RS 为高电平 R/W 为低电平时可以写入数据。 第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 7~14 脚:D0~D7 为 8 位双向数据线。 第 15 脚:背光源正极。 第 16 脚:背光源负极。

9

xx 班 xx 号 xx 单片机设计实验报告

1.5.3 时序 输出 D0—D7=状态字

读状态

输入 RS=L,R/W=H,E=H

写指令

输入 RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出 无

读数据

输入 RS=H,R/W=H,E=H

输出 D0—D7=数据

写数据

输入 RS=H,R/W=L,D0—D7=数据,E=高脉冲

输出 无

说明:LCD 通过 RS,RW,E 三个控制线来控制显示屏的读写命令,由于本实验中只需要写命令 与写数据两种方式,以下是两种方式下三个引脚的电平状态 写命令 RS 0 写数据 RS 1 R/W 0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 数 据 R/W 0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 数 据

10

xx 班xx 号xx 单片机设计实验报告

1.6 LED 灯报警电路

主要用于密码输入时,显示已输入。当密码输入正确则灯一直亮,输入错误则一直闪烁,提醒用户。

三.硬件连接

硬件连接仿真图如下所示:

xx 班xx 号xx 单片机设计实验报告

四.系统软件设计

系统的软件设计采用汇编语言编码。

1. 系统主程序

系统主程序如下图所示,用户在使用系统的过程中可能在任何时刻按下任何按键,而程序必须对此作出正确响应。

xx 班xx 号xx 单片机设计实验报告

2.初始化及按键识别

系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化。 系统初始化并读取密码完成后,液晶显" Password Control" ,提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键被按下。如果有,则进行按键识别;如果没有按键按下,或者按下的按键没有被识别,R3赋值0FFH ,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。

矩阵键盘的操作实际上分为两个任务,一是检测是否有按键按下,二是识别被按下的键是哪一个,这里采用的是反转扫描法,可以同时完成上述两项任务。其基本思路是,先让行线全输出逻辑0,然后读取列线,得到与按键横向位置对应的4位列码。如果有键被按下,则对应的列线必然会被读回逻辑0;如果无键被按下,则读取的列码必定为全1. 当有键按下时,先从列线上读取列码;再从列线输出,然后再读取行线,得到与按键纵向位置对应的4位行码。最后,将先后两次读到的行码和列码组合在一起,就构成了可以准确确定按键位置的位置码。为了防止干扰或者误操作,软件中设置了延时抖动功能。键盘扫描主程序如下所示:

xx 班xx 号xx 单片机设计实验报告

xx 班xx 号xx 单片机设计实验报告

xx 班xx 号xx 单片机设计实验报告

3. 开锁处理

首先LCD 初始化,输入密码,密码正确则使开锁电路动作,继电器得电, 开锁指示灯亮。开锁程序流程图如图4.3所示。

4.改密处理

改密键的处理流程跟开锁键类似,都需检查密码是否

正确,错误的话,提示重新输入,只有输入密码正确才可以进行改密。然后再按更改键, 密码更改程序被调用,进而更改密码,此过程,LCD 都会显示信息。 5.液晶显示子程序

液晶显示子程序在每次更新显示内容时都会被调用,其流程如图4.5所示。

xx 班xx 号xx 单片机设计实验报告

每次更新显示内容前,需清显示清空LCD 原先的显示内容,清屏指令的指令码为01H ,即将P0口赋值01H ,然后写入指令寄存器IR 。 LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII 字符串。每次送一个字符的ASCII 码入P0口,然后写入数据寄存器DR ,最后将字符地址加一,LCD1602会将写入的ASCII 码对应的字符依次显示出来。由于显示字符串的长度不尽相同,约定每串字符以00H 结尾;程序检测到字符码为00H 时,即停止写入,返回。LCD 显示的内容在下次更新前会一直保持。

五.仿真调试与测试

程序开始就进入main ,执行初始设置后,进行LCD 屏幕初始化。单片机就开始执行键盘扫描是否有输入阶段,根据采集到的键盘信息,做出分析,进行密码重置或者输入密码比较。调试过程中我遇到了很多问题,也就是在这些问题中,逐渐学会了MPLAB 的使用和用汇编语言编程。在此,列举几个调试过程中比较典型的问题。

1. 对RB 引脚的理解不到位

刚开始学单片机的时候,没有学到家,翻看过的内容,也只是记得一些皮毛,没有做到较为深刻或者说是真正的理解。我们按照书上的做法,将RB0-RB7作为矩阵键盘的连接引脚,一整天下来发现结果不尽如人意。后来在葛老师的悉心提示下,用引脚RD4-RD7代替了引脚RB4-RB7,矩阵键盘得以成功输入。这个小波折告诉我,知识的积累和掌握不能仅仅依靠课本,还要结合实践进一步理解,这样才能加深印象,融会贯通,也只有这样才能真正学以致用。

2. 无法完成矩阵键盘扫描

在小学期初期阶段,我和小组搭档都在看老师推荐的2本书,进行单片机与汇编语言的学习。通过实现矩阵键盘扫描来熟悉单片机的应用。然而,在汇编程序、各种仪器都正确的情况下,矩阵键盘扫描结果并不理想。最后,我们决定重新搭一遍电路,问题得以解决。

3. 对LCD 屏幕初始化不能完成

刚开始学单片机以及汇编语言的时候,翻看过的内容,也只是记得一点点皮毛,没有真

xx 班xx 号xx 单片机设计实验报告

正的理解。特别是看手册时看不懂,学校发的两本书上并没有LCD 初始化的程序。所以请教已经成功LCD 初始化的同学,同学告诉我,手册上有初始化的过程,需要认真看看。 看了半天,在编程的过程中调试build all时,有出现了一些error ,通过改正,build all 终于成功,显示success ,初始化程序完成 。

4. 软硬件综合调试

分模块仿真与调试时,没有任何问题,均可实现理想的功能。然而综合起来之后,出现了各种问题。在小学期尾声阶段,我们专注于综合调试,解决各种琐碎的问题,其间不乏各种挫折,甚至都有想过放弃,好在我们互相鼓励,并在老师的指导下完成了综合调试。

六. 总结

一、在小学期以前我对单片机没有任何概念。在刚刚接触到单片机时,我可以说是一窍不通,甚至对于单片机究竟是什么也不能很精确地表达出来。经过网上查询以及了解,定下几个想做的目标,经过一个个筛选,最后确定我们做一个密码锁。

二、两周单片机的学习让我增强了自信心。学习单片机的过程中,我也不是没有怀疑过自己的能力,而是我在学习的过程中,从对单片机的一无所知,对繁琐的汇编语言的畏惧,到一步一步进行单步调试,再到能够发现问题并经过思考来解决问题,我感觉到自己在进步,也感受到只要每天努力一点点,希望就会再接近一点点,离成功的距离也就会再接近一点点,也就是这些一点点的努力和距离告诉我要继续坚持,告诉我要相信自己,因为只有相信自己,不断努力,才能战胜自己的弱势,得到自己想要的结果。

三、通过本次设计,我不仅巩固和加深理论课上所学的知识,而且锻炼了分析问题和解决问题的能力,遇到问题能够冷静理性应对;同时培养了良好的工作习惯和科学素养,为以后参加工作打下了一定的基础。同时认识到慢工出细活,过程是很重要的,只有耐心细心努力地去把握过程,才能得到理想的结果。除此之外,也学会了合理高效地与人合作。

最后,在这里要特别感谢指导老师葛老师,小组搭档以及实验室的同学们,如果没有你们给予的各种帮助和鼓励,我是不可能凭借一己之力完成本实验的。

七.参考文献

PIC 单片机实用教程——基础篇 李学海

北京航空航天大学出版社

使用说明:的确是一本不可或缺的教材,本书列举了很多实用的具有实战意义的例子,单片机入门就是通过把这本书里的好例子一字一行敲进电脑去来实现的。 PIC 单片机实用教程——提高篇 李学海

北京航空航天大学出版社

使用说明:继承了前面基础篇的风格,例子也具有实战意义,主要讲RA 、TMR2的使用和CCP 模块的PWM 脉宽调制功能。

PIC 单片机实践 李学海 北京航空航天大学出版社

PIC 单片机实验教程 李荣正,陈学军编著 北京航空航天大学出版社

PIC 单片机常用模块与综合系统设计实例精讲 夏彬彬,任明全,屈金学编著 电子工业出版社

单片机应用系统开发综合实例 张萌,和湘,姜斌编著 清华大学出版社

xx 班xx 号xx 单片机设计实验报告

八.附录

源程序:

LIST P=16F877,R=DEC ; 定义器件, 默认为十进制 #include

TMR0 EQU 01H ; 定义定时器/计数器0寄存地址 PCL EQU 02H ; 定义程序指针寄存器 STA TUS EQU 3H ; 定义状态寄存器地址 OPTION_REG EQU 81H ; 定义选项寄存地址 INTCON EQU 0BH ; 定义中断控制寄存地址

PORTB EQU 6H ; 定义端口B 的数据寄存器地址 PORTC EQU 7H ; 定义端口C 的数据寄存器地址 PORTD EQU 8H ; 定义端口D 的数据寄存器地址 PORTE EQU 9H ; 定义端口E 的数据寄存器地址 ;TRISA EQU 85H ; 定义端口A 的方向寄存器 TRISB EQU 86H ; 定义端口B 的方向寄存器 TRISC EQU 87H ; 定义端口C 的方向寄存器 TRISD EQU 88H ; 定义端口D 的方向寄存器 TRISE EQU 89H ; 定义端口E 的方向寄存器

COUNT EQU 20H ; 定义一个计数器变量寄存地址

TMR0B EQU D'252' ; 定义TMR0寄存地址初始值256-4=252) RP0 EQU 5H ; 定义状态寄存器中的页选位RP0 T0IF EQU 2 ; 定义TMR0溢出标志位的位地址 F EQU 1 ; 定义目标寄存器指示标号

COUNT1 EQU 21H ; 定义计数器状态变量 COUNT2 EQU 23H ; COUNT3 EQU 24H ; COUNT4 EQU 25H ; COUNT5 EQU 27H ; COUNT6 EQU 28H ;

V AL EQU 30H ; 定义键盘的状态变量

WORD_1 EQU 22H ; 初始密码 WORD_2 EQU 26H WORD_3 EQU 2AH WORD_4 EQU 2BH

KEY_1 EQU 47H ; 用户输入密码 KEY_2 EQU 48H KEY_3 EQU 49H

xx 班xx 号xx 单片机设计实验报告

KEY_4 EQU 4AH

N EQU 52H ; 定义外循环变量M M EQU 53H ; 内循环变量N TEMP EQU 29H

TOT EQU 60H ; 总的错误次数

W EQU 0 ; 定义传送目标寄存器为W 的指示位 F EQU 1 ; 定义传送目标寄存器为RAM 的指示位 T0IF EQU 2 ; 定义TMR0中断标志位的地址位 T0IE EQU 5 ; 定义TMR0中断矢能位的地址位 INTE EQU 4 ; 定义外部中断矢能位的地址位 INTF EQU 1 ; 定义外部中断标志位的地址位

RBIF EQU 0 ; 定义RB 口变化中断标志位的位地址

OPTION_TEMP EQU 0A6H ; 在bank1定义选项寄存器的备份寄存器地址

;************************************************** ORG 000H ; NOP MAIN

BSF STA TUS,RP0 ; 文件寄存到BANK1

MOVLW 00H ; 将端口C 的方向控制字先送到W MOVWF TRISC ; 然后再转送到端口C 的方向寄存器 MOVLW 0FFH ; 将端口B 的方向控制字先送到W MOVWF TRISB ; 然后再转送到端口B 的方向寄存器

CLRF TRISD ; CLRF TRISE ;

BCF STA TUS,RP0 ; 恢复到文件寄存器BANK0 CLRF PORTC ; 端口寄存器清0 MOVLW 31H ; 定义初始密码 MOVWF WORD_1 ;1 MOVLW 32H MOVWF WORD_2 ;2 MOVLW 33H MOVWF WORD_3 ;3 MOVLW 34H MOVWF WORD_4 ;4 FIVE MOVLW D'5' MOVWF TOT ; 初始化最大错误次数

xx 班xx 号xx 单片机设计实验报告

;************************************************

INITIAL

MOVLW D'16' ;

MOVWF COUNT ; 初始化count 为16

DELAY16MS ; 延时16ms

CALL DELAY1MS ;

DECFSZ COUNT,1 ; (1/2)count 送count 并判断结果是否为0? ; 是0,跳出循环,否循环回去

GOTO DELAY16MS ;

MOVLW 38H ; 将38h 送到w

MOVWF PORTD ; 将38h 送到portd

MOVLW 02H ; 将02h 送到w

MOVWF PORTE ; 将02h 送到porte ,写数据

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW D'5' ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

DELAY5MS ; 延时5ms

CALL DELAY1MS ;

DECFSZ COUNT,1 ;

GOTO DELAY5MS ;

MOVLW B'00111000' ;将38h 送到w

MOVWF PORTD ; 将38h 送到potd

MOVLW B'00000010' ;将02h 送到w

MOVWF PORTE ; 将02h 送到porte ,写数据

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW D'3' ;

MOVWF COUNT ;

DELAY120US ; 延时120us

CALL DELAY40US ;

DECFSZ COUNT,1 ;

GOTO DELAY120US ;

MOVLW B'00111000' ;

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ;

BCF PORTE,1 ;

;*****************************************************************

xx 班xx 号xx 单片机设计实验报告

CALL DELAY40US ;

MOVLW B'00111000' ;

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ;

BCF PORTE,1 ;

CALL DELAY40US ;

MOVLW B'00001000' ;将08h 送到w, 关显示

MOVWF PORTD ; 将o8h 送到portd

MOVLW B'00000010' ;将02h 送到w

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

CALL DELAY40US ;

MOVLW B'00000001' ;将01h 送到w ,清屏

MOVWF PORTD ; 将o1h 送到portd

MOVLW B'00000010' ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

CALL DELAY1MS ;

MOVLW D'16' ;

MOVWF COUNT ; 将count 设置为16

DELAY640US ; 延时640us

CALL DELAY40US ;

DECFSZ COUNT,1 ;

GOTO DELAY640US ;

MOVLW B'00000110' ;将06h 送到w ,设置输入方式

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ;

BCF PORTE,1 ;

CALL DELAY40US ;

MOVLW B'00001101' ;将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW B'00000010' ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

CALL DELAY40US ;

xx 班xx 号xx 单片机设计实验报告

CALL PASSWORD ;

BSF PORTC,4

;************************************

START

CALL KEYDOWN

XORLW 46H

BTFSC STATUS,2

GOTO SETS

MOVF TEMP,0

MOVWF KEY_1

GOTO NUM2

;****************************************************

SETS

CALL DELAY40US ;

MOVLW B'00000001' ;将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1

CALL OLD

CALL KEYDOWN

MOVWF KEY_1

CALL KEYDOWN

MOVWF KEY_2

CALL KEYDOWN

MOVWF KEY_3

CALL KEYDOWN

MOVWF KEY_4

MOVF KEY_1,0

XORWF WORD_1 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

MOVF KEY_2,0

XORWF WORD_2 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

xx 班xx 号xx 单片机设计实验报告

MOVF KEY_3,0

XORWF WORD_3 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

MOVF KEY_4,0

XORWF WORD_4 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO W ARN ; 不同,则警告

CALL DELAY40US ;

MOVLW 01H ; 将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1

CALL NEW

CALL KEYDOWN

MOVWF WORD_1

CALL KEYDOWN

MOVWF WORD_2

CALL KEYDOWN

MOVWF WORD_3

CALL KEYDOWN

MOVWF WORD_4

CALL DELAY40US ;

MOVLW 01H ;将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1

CALL SUCCESS

MOVLW 05H ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

DELAY800MS ; 延时1ms

xx 班xx 号xx 单片机设计实验报告

CALL DELAY100MS ;

DECFSZ COUNT,1 ;

GOTO DELAY800MS ;

GOTO FIVE

;************************************

NUM1 CALL KEYDOWN

MOVWF KEY_1

NUM2 CALL KEYDOWN

MOVWF KEY_2

NUM3 CALL KEYDOWN

MOVWF KEY_3

NUM4 CALL KEYDOWN

MOVWF KEY_4

;-------------------------------------

;****************密码比较*********************************************

COMP1 MOVF KEY_1,0

XORWF WORD_1 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

;-----------------------------------------

COMP2 MOVF KEY_2,0

XORWF WORD_2 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

;--------------------------------------

COMP3 MOVF KEY_3,0

XORWF WORD_3 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

;---------------------------------------------

COMP4 MOVF KEY_4,0

XORWF WORD_4 ,0 ; 第一位密码比较

BTFSC STA TUS,2 ; 相同,则比较第二位

GOTO ALLOWED ; 不同,则警告

;**************警告*********************************

WARN ; 显示wrong ,again;第三个灯闪烁几下

MOVLW 0FH ;

MOVWF PORTC

CALL DELAY100MS ;闪烁间隔0.3s

xx 班xx 号xx 单片机设计实验报告

CALL DELAY100MS

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

CALL DELAY100MS

MOVLW 0FH ;

MOVWF PORTC

CALL DELAY100MS ;闪烁间隔0.3s

CALL DELAY100MS

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

CALL DELAY100MS ;

MOVLW 0FH ;

MOVWF PORTC

CALL DELAY100MS ;闪烁间隔0.3s

CALL DELAY100MS

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

DECFSZ TOT,1 ;TOT 减一

GOTO RESET

CALL FIVETIME

GOTO FIVE

;***************亮灯(开锁)*************************************

ALLOWED

MOVLW 0FH ; 灯亮

MOVWF PORTC

;--------------------------------------------

JIDIANQI

MOVLW 80H

MOVWF PORTB

;--------------------------------------------

OK

MOVLW B'11000000' ;将01h 送到w ,清屏

MOVWF PORTD ; 将o1h 送到portd

xx 班xx 号xx 单片机设计实验报告

MOVLW B'00000010' ;

MOVWF PORTE ; 将00H 送到porte

BCF PORTE,1

MOVLW B'01001000' ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW B'01001111' ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW B'01001011' ;K

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

STOP GOTO STOP

;********************************************************************

KEYDOWN CLRF PORTD ; 将PORTD 清零

MOVF PORTB,0 ;

ANDLW 0FH ; 将0fh 与w 寄存器内容相与,结果存入w

XORLW 0FH

BTFSC STATUS,2 ;Z=1表明无按键按下,循环检测

GOTO KEYDOWN

BCF STA TUS,0

COMF PORTD

CALL TRANSLATE

MOVF TEMP,0

RETURN

;*****************查表***************************

CONVERT ; 查表程序

ADDWF PCL,1 ; 偏移量与pc 相加

TABLE NOP ; 显示码,下同

RETLW 46H ;F

RETLW 45H ;E

RETLW 44H ;D

RETLW 43H ;C

RETLW 42H ;B

xx 班xx 号xx 单片机设计实验报告

RETLW 41H ;A

RETLW 30H ;0

RETLW 39H ;9

RETLW 38H ;8

RETLW 37H ;7

RETLW 36H ;6

RETLW 35H ;5

RETLW 34H ;4

RETLW 33H ;3

RETLW 32H ;2

RETLW 31H ;1

RETLW 0FFH ; 黑方块

;*****************第二次检测按键********************************

TRANSLATE

RRF PORTD,1 ; 对键盘进行列扫描, 确定键值,高四位和低四位相加得value

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

BTFSC STATUS,2

GOTO TRANSLATE

MOVF PORTD,0

ANDLW 0F0H

XORLW 0F0H

MOVWF V AL

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

ADDWF V AL,1

CALL KEYUP

CALL DELAY1MS

RETURN

;****************延时*****************************

DELAY1MS MOVLW D'100' ; 延迟1ms 程序

MOVWF COUNT1 ;

LOOP1MS NOP

NOP

NOP

NOP

NOP

NOP

xx 班xx 号xx 单片机设计实验报告

NOP

DECFSZ COUNT1,1 ;

GOTO LOOP1MS ;

RETURN

;********************************************

DELAY40US MOVLW D'5' ; 延迟40us 程序

MOVWF COUNT2 ;

LOOP40US NOP

NOP

NOP

NOP

NOP

DECFSZ COUNT2,1 ;

GOTO LOOP40US ;

NOP

NOP

RETURN

;***************************************************

KEYUP CLRF PORTD ; 检测是否按键已经松开,根据value 及键盘的行列确定按下的键盘的键值

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

BTFSS STATUS,2

GOTO KEYUP

CALL DELAY1MS

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

BTFSS STATUS,2

GOTO KEYUP

CLRW

BTFSC V AL,0

ADDLW 1

BTFSC V AL,1

ADDLW 2

BTFSC V AL,2

ADDLW 3

BTFSC V AL,3

xx 班xx 号xx 单片机设计实验报告

ADDLW 4

BTFSC V AL,4

ADDLW 0

BTFSC V AL,5

ADDLW 4

BTFSC V AL,6

ADDLW 8

BTFSC V AL,7

ADDLW D'12'

CALL CONVERT

MOVWF TEMP

GOTO DISPLAY

MOVLW 80H ; 第八个灯亮

MOVWF PORTC

RETURN

;******************输入密码时显示****************************** DISPLAY

MOVLW 01H

MOVWF PORTC ; 第一个灯亮

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

MOVLW 2AH

MOVWF PORTD ; 显示*

MOVLW 03H

MOVWF PORTE

BCF PORTE,1 ; 将porte 第一个位置清0

CALL DELAY40US ;

RETURN

;*************************************************

PASSWORD ; 输出password :

MOVLW 50H ;P

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 41H ;A

MOVWF PORTD

CALL ENABLE

xx 班xx 号xx 单片机设计实验报告

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 57H ;W

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4FH ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 52H ;R

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 3AH ;:

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;*************************************************

OLD ; 输出OLD :

xx 班xx 号xx 单片机设计实验报告

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4FH ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 3AH ;:

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;*************************************************

NEW ; 输出NEW :

;BSF PORTE,1

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4EH ;N

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 57H ;W

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 3AH ;:

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;*************************************************

SUCCESS ; 输出SUCCESS :

;BSF PORTE,1

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 55H ;U

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 43H ;C

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 43H ;C

xx 班xx 号xx 单片机设计实验报告

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 21H ;!

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;***********PLEASE RESET************************

RESET

CALL DELAY40US ;

MOVLW B'00000001' ;将0DH 送到w ,***** MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 50H ;P

MOVWF PORTD

xx 班xx 号xx 单片机设计实验报告

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 41H ;A

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 52H ;R

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 21H; !

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 0C0H ;

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ; 将00H 送到porte

BCF PORTE,1

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW B'00110000'; TOT

ADDWF TOT,0

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H;

MOVWF PORTD

xx 班xx 号xx 单片机设计实验报告

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 49H ;I

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4DH ;M

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVF TOT,0

XORLW D'1'

BTFSC STATUS,2

GOTO NEXT

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

NEXT

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 46H ;F

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW D'7' ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

DELAY700MS ; 延时1ms

CALL DELAY100MS ;

DECFSZ COUNT,1 ;

GOTO DELAY700MS ;

GOTO INITIAL

;**********************************************

ENABLE

MOVLW 03H ; 将03h 存入w

MOVWF PORTE ; 将03h 存入porte

NOP

NOP

NOP

BCF PORTE,0

CALL DELAY1MS

RETURN

;***********************************************

DELAY100MS

MOVLW D'133' ; 外循环变量初始值经W 转送M

xx 班xx 号xx 单片机设计实验报告

MOVWF M

LOOP1 MOVLW D'251' ; 内循环变量初始值经W 转送N MOVWF N

LOOP2 DECFSZ N,1 ;N-1=0?是! 跳出内层循环

GOTO LOOP2 ; 否! 循环回去

DECFSZ M,1 ;M-1=0?是! 跳出循环

GOTO LOOP1 ; 否! 循环回去

RETURN ; 返回调用程序

;***************5次失败************************************* FIVETIME

CALL DELAY40US ;

MOVLW 01H ;将01H 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 35H ;5

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 49H ;I

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4DH ;M

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 46H ;F

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 41H ;A

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 49H ;I

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

xx 班xx 号xx 单片机设计实验报告

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 01H ;将01h 送到w ,清屏

MOVWF PORTD ; 将o1h 送到portd MOVLW 02H; MOVWF PORTE ; 将00H 送到porte BCF PORTE,1

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4FH ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 43H ;C

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4BH ;K

MOVWF PORTD

CALL ENABLE

xx 班xx 号xx 单片机设计实验报告

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 31H ;1

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 30H ;0

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

goto stop

MOVLW 05H ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

;************************************************** DELAY10000MS ; 延时1ms

CALL DELAY100MS ;

DECFSZ COUNT,1 ;

GOTO DELAY10000MS ;

xx 班xx 号xx 单片机设计实验报告

END

xx 班 xx 号 xx 单片机设计实验报告

2015 年小学期单片机设计实验报告

题目:基于 PIC 单片机的电子密码锁

级:

班内序号: 实验组号: 学生姓名: 指导教师:

xx 班 xx 号 xx 单片机设计实验报告

期中检查

教师评语

指导教师签字:

2

xx 班 xx 号 xx 单片机设计实验报告

基于 PIC 单片机的电子密码锁 ——xx 班

实验摘要

在日常的生活和工作中, 住宅与部门的安全防范、 单位的文件档案、 财务报表以及一些 个人资料的保存多以加锁的办法来解决。 若使用传统的机械式钥匙开锁, 人们常需携带多把 钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。 随着科学技术的不断发展, 人们对 日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性, 用密码代替钥匙的密码锁应运而生。 密码锁具有安全性高、 成本低、 功耗低、 易操作等优点。 在安全技术防范领域, 具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁, 克服 了机械式密码锁密码量少、 安全性能差的缺点, 使密码锁无论在技术上还是在性能上都大大 提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智 能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从 而使密码锁具有很高的安全性、可靠性,应用日益广泛。 设计本课题时构思的方案是用以 PIC16F877 为核心的单片机控制方案。 目前使用的电子密码锁大部分是基于单片机技术, 以单片机为主要器件, 其编码器与解 码器的生成为软件方式。 本系统由16F877单片机系统(美国微芯 Microchip 公司推出的高性能单片机)、4×4 矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改四位用户密码、输入提示、密 码错误报警等功能 。本系统成本低廉,功能实用。

xx

Abstract

Replace the lock on the preservation of the safety precautions in their daily life and work, housing and department, unit files, financial statements, and some personal information to lock approach to solve. If the use of traditional mechanical key in the lock, people often need to carry multiple keys, use very inconvenient, and the loss of key security that is greatly reduced. Along with the science and technology unceasing development, people daily life safety insurance device requirements more and more high. In order to meet the people on the requirements and increase the security of password key password lock shipped. Password lock is safe, low cost and power consumption is low, easy to operate and When the advent of the shortcomings of less type. In the security technology to guard against, with anti-theft alarm function electronic password lock gradually replace the traditional mechanical cipher lock, overcome the mechanical password lock, safety performance is poor, the password lock both in technology and in performance are greatly improved step. With large scale integrated circuit technology development, in particular, is a single chip, the microprocessor intelligent password lock, which is in addition to the electronic password lock function, but also introduced the intelligent management, expert analysis system and other functions, which enable password lock has a high safety and reliability, is applied more and more widely.

3

xx 班 xx 号 xx 单片机设计实验报告

This design topic conception scheme Is used to PIC16F877 as the core of the microcontroller control program. At present, most of the electronic password lock is based on SCM technology, with the single chip microcomputer as the main device, the encoder and decoder are generated as the software. The functions of this system by 16F877 microcontroller system (American microchip microchip company launched high performance microcontroller), 4 * 4 matrix keyboard, LCD1602 display and alarm system, has set up, modify the four user password, input prompt, wrong password alarm etc.. The system into the low, functional and practical.

关键字

单片机——microcontroller LCD1602——LCD1602 密码锁——Password lock 4*4矩阵键盘——4*4 matrix keyboard

一.实验论证与比较

1.实验总体方案的确定

本系统电子密码锁的设计主要由 4 部分组成:PIC16F877 单片机,4×4 矩阵键盘接口 电路,LCD1602 液晶显示以及 LED 提示灯。本实验的核心是编写程序,实验中采用汇编语言, 通过软件 MPLAB 进行程序的烧写, 将一块块的子程序进行嵌套最终融合起来成为整个项目的 完整程序。为了实现密码的保密性,采用一个 4×4 的矩阵式键盘来提高密码的保密性。采 用 LCD1602 液晶显示器来作为显示单元, 提高了可读性, 使用户对密码锁的运行情况一目了 然。

2.PIC16F877 系列单片机简介

PIC16F87X ( 含873P874P876P877) 是美国微芯(Microchip) 公司推出的高性能单片 机,除具有单片机的通用资源外,该系列单片机还采用哈佛总线结构、二级指令流水线取指 方式、精简指令集(RISC)和内部具有E2 PROM 数据存储器及FLASH 结构的程序存储器、仅35 条单字节单周期指令、在系统串行编程技术和在线调试技术。 因此采用该系列单片机的产 品具有低成本、低功耗、高速度、高可靠性、体积小、性价比高等特点。 其芯片引脚图如 图1所示。 另外,它内部的EEPROM 数据存储器不仅具有掉电保护数据的功能,更重要的是 它的读写操作均是由单片机内部时序控制,即外部电路无法对其进行访问, 因而具有极高 的数据保密性,这使得PIC16F87X在加密性产品如智能IC 卡、密码锁、电子防盗系统等方面 有很广泛的应用。

4

xx 班 xx 号 xx 单片机设计实验报告

二.系统总体设计

本设计主要由单片机、 矩阵键盘和液晶显示器等部分组成。 其中矩阵键盘用于输入数字 密码和进行各种功能的实现。 由用户通过连接单片机的矩阵键盘输入密码, 后经过单片机对 用户输入的密码与自己保存的密码进行对比, 从而判断密码是否正确, 然后控制引脚的高低 电平传到开锁电路或者报警电路控制开锁还是报警, 实际使用时只要将单片机的负载换成电 子密码锁的电磁铁吸合线圈即可。

1.系统模块总体框图:

键盘电路

电源电路

复位电路

片 机

LCD 显示电 路

晶振电路

16F877

LED 报警电 路

5

xx 班 xx 号 xx 单片机设计实验报告

1.1 电源电路模块

U1 LM 7805C T D1 Vr eg IN 1B H62 C1 100uF C2 100nF C5 100uF C3 100nF O UT

从电源插座进来的是 9V 直流电,经一片三端稳压器,将其转换为 5V 的稳定电压。 电源滤波的重要性, 一个电路板的滤波特性如果不好, 严重时将会影响整个电路板不能 正常工作。所以要注意一个大电容和一个小电容并联滤波,电源线要粗,走线要合理, 模拟电路最好大面积接地。 其主要作用是为电路提供工作电压,保证电路正常工作。

1.2 复位电路模块

主要是用于人工复位。

1.3 晶振电路模块

Osc1 5v

GND

主要是为单片机工作提供适当的工作频率。

6

xx 班 xx 号 xx 单片机设计实验报告

1.4 4*4 矩阵键盘输入模块的设计

VCC R1 行线 3 行 RD7 4.7kΩ 1 R2 4.7kΩ 2 R3 4.7kΩ 3 R4 4.7kΩ 4

2 行 RD6

5

6

7

8

1 行 RD5

9

0

A

B

0 行 RD4 列线

C RB3 3列

D RB2 2列

E RB1 1列

F RB0 0列

键盘采用 4* 4 矩阵键盘 ,行线连接到 RD 端口,列线连接到 RB 接口。行列式键盘,由 横竖两排线路组成, 每个行与列的交叉点有一个按键, 当键盘按下时就将相互交叉的两条导 通,能够有效地提高单片机系统中 I/O 口的利用率。 其中 R1-R4 是上拉电阻,16 个键分别 为 0~9 的数字键及 A~F 的功能键,F 键则表示密码重置。键盘主要用于输入密码或进行 功能、状态切换。

1.5 LCD1602 液晶显示模块的设计

本系统设计的显示电路是为了给使用者以提示而设置的为了达到界面友好的目的, 显示部 分由液晶显示器 LCD1602 取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用 键盘上的数字键 0-9 输入密码, 每按下一个数字键后在显示器上显示一个*, 输入多少位就 显示多少个*。当密码输入完成时,如果输入的密码正确的话, LCD 显示“SUCCESS”;如果 密码不正确,LCD 显示屏会显示“5 TIMES LEFT”, 若 5 次输入都不正确,则 LCD 显示“5 TIMES FAILED ”“LOCKED 10S”。 当按下 F 键重置密码时, LCD 显示 “PLEASE RESET” “OLD”, 输入正确旧密码之后,LCD 显示“NEW”,再输入新密码即可。

7

xx 班 xx 号 xx 单片机设计实验报告

1.5.1 LCD1602A 液晶显示屏接线图

1 VDD 2 3 RE0 4 5 RE1 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 6 7 8 9 10 11 12 13 14 15 VCC 16

VSS VDD VL RS R/W EN D0 D1 D2 D3 D4 D5 D6 D7 LED+ LED-

8

xx 班 xx 号 xx 单片机设计实验报告

1.5.2 引脚功能 编号 符号 引脚说明 编号 符号 引脚说明

1 2 3 4 5 6 7

VSS VDD VL RS R/W EN D0

电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据

9 10 11 12 13 14 15

D2 D3 D4 D5 D6 D7 LED+

数据 数据 数据 数据 数据 数据 背光源正极 背光源负极

8

D1

16

LED-

引脚说明: 第 1 脚:VSS 为地电源。 第 2 脚:VDD 接 5V 正电源。 第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对 比度过高时产生“鬼影”,使用时通过一个 10K 的电位器调整对比度。 第 4 脚:RS 为寄存器选择,高电平时选数据寄存器、低电平时选指令寄存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共 同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号, 当 RS 为高电平 R/W 为低电平时可以写入数据。 第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 7~14 脚:D0~D7 为 8 位双向数据线。 第 15 脚:背光源正极。 第 16 脚:背光源负极。

9

xx 班 xx 号 xx 单片机设计实验报告

1.5.3 时序 输出 D0—D7=状态字

读状态

输入 RS=L,R/W=H,E=H

写指令

输入 RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出 无

读数据

输入 RS=H,R/W=H,E=H

输出 D0—D7=数据

写数据

输入 RS=H,R/W=L,D0—D7=数据,E=高脉冲

输出 无

说明:LCD 通过 RS,RW,E 三个控制线来控制显示屏的读写命令,由于本实验中只需要写命令 与写数据两种方式,以下是两种方式下三个引脚的电平状态 写命令 RS 0 写数据 RS 1 R/W 0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 数 据 R/W 0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 数 据

10

xx 班xx 号xx 单片机设计实验报告

1.6 LED 灯报警电路

主要用于密码输入时,显示已输入。当密码输入正确则灯一直亮,输入错误则一直闪烁,提醒用户。

三.硬件连接

硬件连接仿真图如下所示:

xx 班xx 号xx 单片机设计实验报告

四.系统软件设计

系统的软件设计采用汇编语言编码。

1. 系统主程序

系统主程序如下图所示,用户在使用系统的过程中可能在任何时刻按下任何按键,而程序必须对此作出正确响应。

xx 班xx 号xx 单片机设计实验报告

2.初始化及按键识别

系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化。 系统初始化并读取密码完成后,液晶显" Password Control" ,提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键被按下。如果有,则进行按键识别;如果没有按键按下,或者按下的按键没有被识别,R3赋值0FFH ,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。

矩阵键盘的操作实际上分为两个任务,一是检测是否有按键按下,二是识别被按下的键是哪一个,这里采用的是反转扫描法,可以同时完成上述两项任务。其基本思路是,先让行线全输出逻辑0,然后读取列线,得到与按键横向位置对应的4位列码。如果有键被按下,则对应的列线必然会被读回逻辑0;如果无键被按下,则读取的列码必定为全1. 当有键按下时,先从列线上读取列码;再从列线输出,然后再读取行线,得到与按键纵向位置对应的4位行码。最后,将先后两次读到的行码和列码组合在一起,就构成了可以准确确定按键位置的位置码。为了防止干扰或者误操作,软件中设置了延时抖动功能。键盘扫描主程序如下所示:

xx 班xx 号xx 单片机设计实验报告

xx 班xx 号xx 单片机设计实验报告

xx 班xx 号xx 单片机设计实验报告

3. 开锁处理

首先LCD 初始化,输入密码,密码正确则使开锁电路动作,继电器得电, 开锁指示灯亮。开锁程序流程图如图4.3所示。

4.改密处理

改密键的处理流程跟开锁键类似,都需检查密码是否

正确,错误的话,提示重新输入,只有输入密码正确才可以进行改密。然后再按更改键, 密码更改程序被调用,进而更改密码,此过程,LCD 都会显示信息。 5.液晶显示子程序

液晶显示子程序在每次更新显示内容时都会被调用,其流程如图4.5所示。

xx 班xx 号xx 单片机设计实验报告

每次更新显示内容前,需清显示清空LCD 原先的显示内容,清屏指令的指令码为01H ,即将P0口赋值01H ,然后写入指令寄存器IR 。 LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII 字符串。每次送一个字符的ASCII 码入P0口,然后写入数据寄存器DR ,最后将字符地址加一,LCD1602会将写入的ASCII 码对应的字符依次显示出来。由于显示字符串的长度不尽相同,约定每串字符以00H 结尾;程序检测到字符码为00H 时,即停止写入,返回。LCD 显示的内容在下次更新前会一直保持。

五.仿真调试与测试

程序开始就进入main ,执行初始设置后,进行LCD 屏幕初始化。单片机就开始执行键盘扫描是否有输入阶段,根据采集到的键盘信息,做出分析,进行密码重置或者输入密码比较。调试过程中我遇到了很多问题,也就是在这些问题中,逐渐学会了MPLAB 的使用和用汇编语言编程。在此,列举几个调试过程中比较典型的问题。

1. 对RB 引脚的理解不到位

刚开始学单片机的时候,没有学到家,翻看过的内容,也只是记得一些皮毛,没有做到较为深刻或者说是真正的理解。我们按照书上的做法,将RB0-RB7作为矩阵键盘的连接引脚,一整天下来发现结果不尽如人意。后来在葛老师的悉心提示下,用引脚RD4-RD7代替了引脚RB4-RB7,矩阵键盘得以成功输入。这个小波折告诉我,知识的积累和掌握不能仅仅依靠课本,还要结合实践进一步理解,这样才能加深印象,融会贯通,也只有这样才能真正学以致用。

2. 无法完成矩阵键盘扫描

在小学期初期阶段,我和小组搭档都在看老师推荐的2本书,进行单片机与汇编语言的学习。通过实现矩阵键盘扫描来熟悉单片机的应用。然而,在汇编程序、各种仪器都正确的情况下,矩阵键盘扫描结果并不理想。最后,我们决定重新搭一遍电路,问题得以解决。

3. 对LCD 屏幕初始化不能完成

刚开始学单片机以及汇编语言的时候,翻看过的内容,也只是记得一点点皮毛,没有真

xx 班xx 号xx 单片机设计实验报告

正的理解。特别是看手册时看不懂,学校发的两本书上并没有LCD 初始化的程序。所以请教已经成功LCD 初始化的同学,同学告诉我,手册上有初始化的过程,需要认真看看。 看了半天,在编程的过程中调试build all时,有出现了一些error ,通过改正,build all 终于成功,显示success ,初始化程序完成 。

4. 软硬件综合调试

分模块仿真与调试时,没有任何问题,均可实现理想的功能。然而综合起来之后,出现了各种问题。在小学期尾声阶段,我们专注于综合调试,解决各种琐碎的问题,其间不乏各种挫折,甚至都有想过放弃,好在我们互相鼓励,并在老师的指导下完成了综合调试。

六. 总结

一、在小学期以前我对单片机没有任何概念。在刚刚接触到单片机时,我可以说是一窍不通,甚至对于单片机究竟是什么也不能很精确地表达出来。经过网上查询以及了解,定下几个想做的目标,经过一个个筛选,最后确定我们做一个密码锁。

二、两周单片机的学习让我增强了自信心。学习单片机的过程中,我也不是没有怀疑过自己的能力,而是我在学习的过程中,从对单片机的一无所知,对繁琐的汇编语言的畏惧,到一步一步进行单步调试,再到能够发现问题并经过思考来解决问题,我感觉到自己在进步,也感受到只要每天努力一点点,希望就会再接近一点点,离成功的距离也就会再接近一点点,也就是这些一点点的努力和距离告诉我要继续坚持,告诉我要相信自己,因为只有相信自己,不断努力,才能战胜自己的弱势,得到自己想要的结果。

三、通过本次设计,我不仅巩固和加深理论课上所学的知识,而且锻炼了分析问题和解决问题的能力,遇到问题能够冷静理性应对;同时培养了良好的工作习惯和科学素养,为以后参加工作打下了一定的基础。同时认识到慢工出细活,过程是很重要的,只有耐心细心努力地去把握过程,才能得到理想的结果。除此之外,也学会了合理高效地与人合作。

最后,在这里要特别感谢指导老师葛老师,小组搭档以及实验室的同学们,如果没有你们给予的各种帮助和鼓励,我是不可能凭借一己之力完成本实验的。

七.参考文献

PIC 单片机实用教程——基础篇 李学海

北京航空航天大学出版社

使用说明:的确是一本不可或缺的教材,本书列举了很多实用的具有实战意义的例子,单片机入门就是通过把这本书里的好例子一字一行敲进电脑去来实现的。 PIC 单片机实用教程——提高篇 李学海

北京航空航天大学出版社

使用说明:继承了前面基础篇的风格,例子也具有实战意义,主要讲RA 、TMR2的使用和CCP 模块的PWM 脉宽调制功能。

PIC 单片机实践 李学海 北京航空航天大学出版社

PIC 单片机实验教程 李荣正,陈学军编著 北京航空航天大学出版社

PIC 单片机常用模块与综合系统设计实例精讲 夏彬彬,任明全,屈金学编著 电子工业出版社

单片机应用系统开发综合实例 张萌,和湘,姜斌编著 清华大学出版社

xx 班xx 号xx 单片机设计实验报告

八.附录

源程序:

LIST P=16F877,R=DEC ; 定义器件, 默认为十进制 #include

TMR0 EQU 01H ; 定义定时器/计数器0寄存地址 PCL EQU 02H ; 定义程序指针寄存器 STA TUS EQU 3H ; 定义状态寄存器地址 OPTION_REG EQU 81H ; 定义选项寄存地址 INTCON EQU 0BH ; 定义中断控制寄存地址

PORTB EQU 6H ; 定义端口B 的数据寄存器地址 PORTC EQU 7H ; 定义端口C 的数据寄存器地址 PORTD EQU 8H ; 定义端口D 的数据寄存器地址 PORTE EQU 9H ; 定义端口E 的数据寄存器地址 ;TRISA EQU 85H ; 定义端口A 的方向寄存器 TRISB EQU 86H ; 定义端口B 的方向寄存器 TRISC EQU 87H ; 定义端口C 的方向寄存器 TRISD EQU 88H ; 定义端口D 的方向寄存器 TRISE EQU 89H ; 定义端口E 的方向寄存器

COUNT EQU 20H ; 定义一个计数器变量寄存地址

TMR0B EQU D'252' ; 定义TMR0寄存地址初始值256-4=252) RP0 EQU 5H ; 定义状态寄存器中的页选位RP0 T0IF EQU 2 ; 定义TMR0溢出标志位的位地址 F EQU 1 ; 定义目标寄存器指示标号

COUNT1 EQU 21H ; 定义计数器状态变量 COUNT2 EQU 23H ; COUNT3 EQU 24H ; COUNT4 EQU 25H ; COUNT5 EQU 27H ; COUNT6 EQU 28H ;

V AL EQU 30H ; 定义键盘的状态变量

WORD_1 EQU 22H ; 初始密码 WORD_2 EQU 26H WORD_3 EQU 2AH WORD_4 EQU 2BH

KEY_1 EQU 47H ; 用户输入密码 KEY_2 EQU 48H KEY_3 EQU 49H

xx 班xx 号xx 单片机设计实验报告

KEY_4 EQU 4AH

N EQU 52H ; 定义外循环变量M M EQU 53H ; 内循环变量N TEMP EQU 29H

TOT EQU 60H ; 总的错误次数

W EQU 0 ; 定义传送目标寄存器为W 的指示位 F EQU 1 ; 定义传送目标寄存器为RAM 的指示位 T0IF EQU 2 ; 定义TMR0中断标志位的地址位 T0IE EQU 5 ; 定义TMR0中断矢能位的地址位 INTE EQU 4 ; 定义外部中断矢能位的地址位 INTF EQU 1 ; 定义外部中断标志位的地址位

RBIF EQU 0 ; 定义RB 口变化中断标志位的位地址

OPTION_TEMP EQU 0A6H ; 在bank1定义选项寄存器的备份寄存器地址

;************************************************** ORG 000H ; NOP MAIN

BSF STA TUS,RP0 ; 文件寄存到BANK1

MOVLW 00H ; 将端口C 的方向控制字先送到W MOVWF TRISC ; 然后再转送到端口C 的方向寄存器 MOVLW 0FFH ; 将端口B 的方向控制字先送到W MOVWF TRISB ; 然后再转送到端口B 的方向寄存器

CLRF TRISD ; CLRF TRISE ;

BCF STA TUS,RP0 ; 恢复到文件寄存器BANK0 CLRF PORTC ; 端口寄存器清0 MOVLW 31H ; 定义初始密码 MOVWF WORD_1 ;1 MOVLW 32H MOVWF WORD_2 ;2 MOVLW 33H MOVWF WORD_3 ;3 MOVLW 34H MOVWF WORD_4 ;4 FIVE MOVLW D'5' MOVWF TOT ; 初始化最大错误次数

xx 班xx 号xx 单片机设计实验报告

;************************************************

INITIAL

MOVLW D'16' ;

MOVWF COUNT ; 初始化count 为16

DELAY16MS ; 延时16ms

CALL DELAY1MS ;

DECFSZ COUNT,1 ; (1/2)count 送count 并判断结果是否为0? ; 是0,跳出循环,否循环回去

GOTO DELAY16MS ;

MOVLW 38H ; 将38h 送到w

MOVWF PORTD ; 将38h 送到portd

MOVLW 02H ; 将02h 送到w

MOVWF PORTE ; 将02h 送到porte ,写数据

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW D'5' ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

DELAY5MS ; 延时5ms

CALL DELAY1MS ;

DECFSZ COUNT,1 ;

GOTO DELAY5MS ;

MOVLW B'00111000' ;将38h 送到w

MOVWF PORTD ; 将38h 送到potd

MOVLW B'00000010' ;将02h 送到w

MOVWF PORTE ; 将02h 送到porte ,写数据

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW D'3' ;

MOVWF COUNT ;

DELAY120US ; 延时120us

CALL DELAY40US ;

DECFSZ COUNT,1 ;

GOTO DELAY120US ;

MOVLW B'00111000' ;

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ;

BCF PORTE,1 ;

;*****************************************************************

xx 班xx 号xx 单片机设计实验报告

CALL DELAY40US ;

MOVLW B'00111000' ;

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ;

BCF PORTE,1 ;

CALL DELAY40US ;

MOVLW B'00001000' ;将08h 送到w, 关显示

MOVWF PORTD ; 将o8h 送到portd

MOVLW B'00000010' ;将02h 送到w

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

CALL DELAY40US ;

MOVLW B'00000001' ;将01h 送到w ,清屏

MOVWF PORTD ; 将o1h 送到portd

MOVLW B'00000010' ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

CALL DELAY1MS ;

MOVLW D'16' ;

MOVWF COUNT ; 将count 设置为16

DELAY640US ; 延时640us

CALL DELAY40US ;

DECFSZ COUNT,1 ;

GOTO DELAY640US ;

MOVLW B'00000110' ;将06h 送到w ,设置输入方式

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ;

BCF PORTE,1 ;

CALL DELAY40US ;

MOVLW B'00001101' ;将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW B'00000010' ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

CALL DELAY40US ;

xx 班xx 号xx 单片机设计实验报告

CALL PASSWORD ;

BSF PORTC,4

;************************************

START

CALL KEYDOWN

XORLW 46H

BTFSC STATUS,2

GOTO SETS

MOVF TEMP,0

MOVWF KEY_1

GOTO NUM2

;****************************************************

SETS

CALL DELAY40US ;

MOVLW B'00000001' ;将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1

CALL OLD

CALL KEYDOWN

MOVWF KEY_1

CALL KEYDOWN

MOVWF KEY_2

CALL KEYDOWN

MOVWF KEY_3

CALL KEYDOWN

MOVWF KEY_4

MOVF KEY_1,0

XORWF WORD_1 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

MOVF KEY_2,0

XORWF WORD_2 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

xx 班xx 号xx 单片机设计实验报告

MOVF KEY_3,0

XORWF WORD_3 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

MOVF KEY_4,0

XORWF WORD_4 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO W ARN ; 不同,则警告

CALL DELAY40US ;

MOVLW 01H ; 将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1

CALL NEW

CALL KEYDOWN

MOVWF WORD_1

CALL KEYDOWN

MOVWF WORD_2

CALL KEYDOWN

MOVWF WORD_3

CALL KEYDOWN

MOVWF WORD_4

CALL DELAY40US ;

MOVLW 01H ;将0DH 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1

CALL SUCCESS

MOVLW 05H ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

DELAY800MS ; 延时1ms

xx 班xx 号xx 单片机设计实验报告

CALL DELAY100MS ;

DECFSZ COUNT,1 ;

GOTO DELAY800MS ;

GOTO FIVE

;************************************

NUM1 CALL KEYDOWN

MOVWF KEY_1

NUM2 CALL KEYDOWN

MOVWF KEY_2

NUM3 CALL KEYDOWN

MOVWF KEY_3

NUM4 CALL KEYDOWN

MOVWF KEY_4

;-------------------------------------

;****************密码比较*********************************************

COMP1 MOVF KEY_1,0

XORWF WORD_1 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

;-----------------------------------------

COMP2 MOVF KEY_2,0

XORWF WORD_2 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

;--------------------------------------

COMP3 MOVF KEY_3,0

XORWF WORD_3 ,0 ; 第一位密码比较

BTFSS STA TUS,2 ; 相同,则比较第二位

GOTO WARN

;---------------------------------------------

COMP4 MOVF KEY_4,0

XORWF WORD_4 ,0 ; 第一位密码比较

BTFSC STA TUS,2 ; 相同,则比较第二位

GOTO ALLOWED ; 不同,则警告

;**************警告*********************************

WARN ; 显示wrong ,again;第三个灯闪烁几下

MOVLW 0FH ;

MOVWF PORTC

CALL DELAY100MS ;闪烁间隔0.3s

xx 班xx 号xx 单片机设计实验报告

CALL DELAY100MS

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

CALL DELAY100MS

MOVLW 0FH ;

MOVWF PORTC

CALL DELAY100MS ;闪烁间隔0.3s

CALL DELAY100MS

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

CALL DELAY100MS ;

MOVLW 0FH ;

MOVWF PORTC

CALL DELAY100MS ;闪烁间隔0.3s

CALL DELAY100MS

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

DECFSZ TOT,1 ;TOT 减一

GOTO RESET

CALL FIVETIME

GOTO FIVE

;***************亮灯(开锁)*************************************

ALLOWED

MOVLW 0FH ; 灯亮

MOVWF PORTC

;--------------------------------------------

JIDIANQI

MOVLW 80H

MOVWF PORTB

;--------------------------------------------

OK

MOVLW B'11000000' ;将01h 送到w ,清屏

MOVWF PORTD ; 将o1h 送到portd

xx 班xx 号xx 单片机设计实验报告

MOVLW B'00000010' ;

MOVWF PORTE ; 将00H 送到porte

BCF PORTE,1

MOVLW B'01001000' ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW B'01001111' ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW B'01001011' ;K

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

STOP GOTO STOP

;********************************************************************

KEYDOWN CLRF PORTD ; 将PORTD 清零

MOVF PORTB,0 ;

ANDLW 0FH ; 将0fh 与w 寄存器内容相与,结果存入w

XORLW 0FH

BTFSC STATUS,2 ;Z=1表明无按键按下,循环检测

GOTO KEYDOWN

BCF STA TUS,0

COMF PORTD

CALL TRANSLATE

MOVF TEMP,0

RETURN

;*****************查表***************************

CONVERT ; 查表程序

ADDWF PCL,1 ; 偏移量与pc 相加

TABLE NOP ; 显示码,下同

RETLW 46H ;F

RETLW 45H ;E

RETLW 44H ;D

RETLW 43H ;C

RETLW 42H ;B

xx 班xx 号xx 单片机设计实验报告

RETLW 41H ;A

RETLW 30H ;0

RETLW 39H ;9

RETLW 38H ;8

RETLW 37H ;7

RETLW 36H ;6

RETLW 35H ;5

RETLW 34H ;4

RETLW 33H ;3

RETLW 32H ;2

RETLW 31H ;1

RETLW 0FFH ; 黑方块

;*****************第二次检测按键********************************

TRANSLATE

RRF PORTD,1 ; 对键盘进行列扫描, 确定键值,高四位和低四位相加得value

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

BTFSC STATUS,2

GOTO TRANSLATE

MOVF PORTD,0

ANDLW 0F0H

XORLW 0F0H

MOVWF V AL

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

ADDWF V AL,1

CALL KEYUP

CALL DELAY1MS

RETURN

;****************延时*****************************

DELAY1MS MOVLW D'100' ; 延迟1ms 程序

MOVWF COUNT1 ;

LOOP1MS NOP

NOP

NOP

NOP

NOP

NOP

xx 班xx 号xx 单片机设计实验报告

NOP

DECFSZ COUNT1,1 ;

GOTO LOOP1MS ;

RETURN

;********************************************

DELAY40US MOVLW D'5' ; 延迟40us 程序

MOVWF COUNT2 ;

LOOP40US NOP

NOP

NOP

NOP

NOP

DECFSZ COUNT2,1 ;

GOTO LOOP40US ;

NOP

NOP

RETURN

;***************************************************

KEYUP CLRF PORTD ; 检测是否按键已经松开,根据value 及键盘的行列确定按下的键盘的键值

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

BTFSS STATUS,2

GOTO KEYUP

CALL DELAY1MS

MOVF PORTB,0

ANDLW 0FH

XORLW 0FH

BTFSS STATUS,2

GOTO KEYUP

CLRW

BTFSC V AL,0

ADDLW 1

BTFSC V AL,1

ADDLW 2

BTFSC V AL,2

ADDLW 3

BTFSC V AL,3

xx 班xx 号xx 单片机设计实验报告

ADDLW 4

BTFSC V AL,4

ADDLW 0

BTFSC V AL,5

ADDLW 4

BTFSC V AL,6

ADDLW 8

BTFSC V AL,7

ADDLW D'12'

CALL CONVERT

MOVWF TEMP

GOTO DISPLAY

MOVLW 80H ; 第八个灯亮

MOVWF PORTC

RETURN

;******************输入密码时显示****************************** DISPLAY

MOVLW 01H

MOVWF PORTC ; 第一个灯亮

CALL DELAY100MS

MOVLW 00H ;

MOVWF PORTC

MOVLW 2AH

MOVWF PORTD ; 显示*

MOVLW 03H

MOVWF PORTE

BCF PORTE,1 ; 将porte 第一个位置清0

CALL DELAY40US ;

RETURN

;*************************************************

PASSWORD ; 输出password :

MOVLW 50H ;P

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 41H ;A

MOVWF PORTD

CALL ENABLE

xx 班xx 号xx 单片机设计实验报告

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 57H ;W

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4FH ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 52H ;R

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 3AH ;:

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;*************************************************

OLD ; 输出OLD :

xx 班xx 号xx 单片机设计实验报告

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4FH ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 3AH ;:

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;*************************************************

NEW ; 输出NEW :

;BSF PORTE,1

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4EH ;N

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 57H ;W

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 3AH ;:

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;*************************************************

SUCCESS ; 输出SUCCESS :

;BSF PORTE,1

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 55H ;U

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 43H ;C

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 43H ;C

xx 班xx 号xx 单片机设计实验报告

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 21H ;!

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

CALL DELAY1MS

RETURN

;***********PLEASE RESET************************

RESET

CALL DELAY40US ;

MOVLW B'00000001' ;将0DH 送到w ,***** MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 50H ;P

MOVWF PORTD

xx 班xx 号xx 单片机设计实验报告

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 41H ;A

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 52H ;R

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 21H; !

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 0C0H ;

MOVWF PORTD ;

MOVLW B'00000010' ;

MOVWF PORTE ; 将00H 送到porte

BCF PORTE,1

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW B'00110000'; TOT

ADDWF TOT,0

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H;

MOVWF PORTD

xx 班xx 号xx 单片机设计实验报告

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 49H ;I

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4DH ;M

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVF TOT,0

XORLW D'1'

BTFSC STATUS,2

GOTO NEXT

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

NEXT

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 46H ;F

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW D'7' ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

DELAY700MS ; 延时1ms

CALL DELAY100MS ;

DECFSZ COUNT,1 ;

GOTO DELAY700MS ;

GOTO INITIAL

;**********************************************

ENABLE

MOVLW 03H ; 将03h 存入w

MOVWF PORTE ; 将03h 存入porte

NOP

NOP

NOP

BCF PORTE,0

CALL DELAY1MS

RETURN

;***********************************************

DELAY100MS

MOVLW D'133' ; 外循环变量初始值经W 转送M

xx 班xx 号xx 单片机设计实验报告

MOVWF M

LOOP1 MOVLW D'251' ; 内循环变量初始值经W 转送N MOVWF N

LOOP2 DECFSZ N,1 ;N-1=0?是! 跳出内层循环

GOTO LOOP2 ; 否! 循环回去

DECFSZ M,1 ;M-1=0?是! 跳出循环

GOTO LOOP1 ; 否! 循环回去

RETURN ; 返回调用程序

;***************5次失败************************************* FIVETIME

CALL DELAY40US ;

MOVLW 01H ;将01H 送到w ,*****

MOVWF PORTD ; 将0DH 送到portd

MOVLW 02H ;

MOVWF PORTE ; 将02h 送到porte

BCF PORTE,1 ; 将porte 的第一个位置清0

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 35H ;5

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 54H ;T

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

xx 班xx 号xx 单片机设计实验报告

MOVLW 49H ;I

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4DH ;M

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H ;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 46H ;F

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 41H ;A

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 49H ;I

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

xx 班xx 号xx 单片机设计实验报告

CALL ENABLE

CALL DELAY1MS

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 01H ;将01h 送到w ,清屏

MOVWF PORTD ; 将o1h 送到portd MOVLW 02H; MOVWF PORTE ; 将00H 送到porte BCF PORTE,1

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4CH ;L

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4FH ;O

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 43H ;C

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 4BH ;K

MOVWF PORTD

CALL ENABLE

xx 班xx 号xx 单片机设计实验报告

MOVLW 45H ;E

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 44H ;D

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 20H;

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 31H ;1

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 30H ;0

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

MOVLW 53H ;S

MOVWF PORTD

CALL ENABLE

CALL DELAY1MS

goto stop

MOVLW 05H ; 将5送到w

MOVWF COUNT ; 将count 赋值为5

;************************************************** DELAY10000MS ; 延时1ms

CALL DELAY100MS ;

DECFSZ COUNT,1 ;

GOTO DELAY10000MS ;

xx 班xx 号xx 单片机设计实验报告

END


相关文章

  • 毕业设计选题与任务书的填写
  • 毕业设计专题讲座-- 毕业设计(论文)的步骤.选题与任务书的填写 本讲座就毕业设计(论文)(以下简称毕业设计)的目的与要求.具体步骤.选题要求.毕业设计任务书填写要求等内容进行讲解. 一.毕业设计的目的与要求 1.目的 (1) 培养考生对工 ...查看


  • 21北邮电子科学与技术导论论文
  • 浅谈光信息科学与技术的发展 何佳羲 电子工程(7)班 2012211009 21世纪,随着现代科学技术的飞速发展,人类历史即将进入一个崭新的时代──信息时代.其鲜明的时代特征是,支撑这个时代的诸如能源.交通.材料和信息等基础产业均将得到高度 ...查看


  • 北邮单片机公选课实验报告
  • 单片机选修实验报告 实验目的: 1. 学习单片机编程的入门知识,以及焊接技术,并 2. 通过计数器控制小车直线行走一米, 3. 通过计数器,实现小车在规定时间内前进一米 实验原理及步骤: 硬件部分: 1. 小车采用两轮轮驱动,能够控制小车的 ...查看


  • 单片机课程设计-电子密码锁-实验报告-
  • 单片机课程设计 电子密码锁实验报告 学院:电子信息工程学院 班级:自***姓名:*** 学号:******指导教师:*** 单片机课程设计电子密码锁实验报告 (一)实验目的 1.了解电子密码锁工作原理和八段LED数码管显示原理. 2.掌握L ...查看


  • 数字密码锁
  • 沈阳工程学院 课程设计任务书 课程设计题目:数字密码锁设计 二级学院 自动化 班级 学生姓名 学号 指导教师 职称 课程设计进行地点: F215 任 务 下 达 时 间: 2014年 12月31日 起止日期: 2015年1月5日起--至20 ...查看


  • 电子信息类毕业设计课题
  • 电子信息类毕业设计课题 [电子通讯] 出租车计价系统 [过程控制] 基于单片机实现单回路智能调节.. [电子通讯] 脉冲数字频率计 [机床仪表] 仪表机床数控系统的设计(论文.. 磁流体发电论文 [电子通讯] 基于VC++6.0的PC 机与 ...查看


  • 单片机电子密码锁
  • 目 录 一电子密码锁 摘 要 1 绪 论 2 系统的总体设计和主要元器件介绍 2.1 系统方案论证选择 2.2 系统的总体思路设计 2.3 主要元器件介绍 2.3.1 AT89C51介绍 2.3.2 继电器介绍 2.3.3 LED数码管介绍 ...查看


  • 电子信息工程毕业设计题目大全
  • 1 压力容器液位测量 2 多功能遥控小车 3基于RS232的仓库多点温度.湿度.气 4压检测系统 5自动控制升降旗系统 6基于RS485的温度报警系统 7基于模糊算法的水温控制系统的设计 8多分机电话交换机 9简易火灾自动报警系统 10基于 ...查看


  • 全国电子设计竞赛
  • 全国大学生电子设计大赛 -一些个人见解 Lanphon 2010年10月 目录 1NUEDC简介 1.1简单介绍....... 1.2参赛形式....... 1.3比赛时间和奖励.... 试题汇总与简要分析 2.1历届试题汇总..... 2 ...查看


热门内容