基于单片机的电子密码锁实验报告.docx
《基于单片机的电子密码锁实验报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁实验报告.docx(46页珍藏版)》请在冰豆网上搜索。
基于单片机的电子密码锁实验报告
201X年小学期单片机设计实验报告
题目:
基于16F877的电子密码锁
班级:
班序号:
实验组号:
学生:
指导教师:
期中检查
教师评语
指导教师签字:
年月日
基于16F877的电子密码锁
实验摘要
在日常的生活和工作中,住宅与部门的安全防、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
本系统由16F877单片机系统(主要是16F877单片机最小系统)、4×4矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改四位用户密码、输入提示音、密码错误报警等功能(本设计由单片机控制LCD显示,密码正确显示passwordok!
密码错误显示wrong,pleasereset!
用户reset后进行重新输入。
由单片机控制矩阵键盘含有0-9数字键和A-F功能键。
按F键,则进行密码重置功能)。
本系统成本低廉,功能实用。
(宋体五号)
Abstract
Indailylifeandwork,thedepartmentofhousingandsecurity,unitdocuments,financialstatementsandsomepersonalinformationtosavemoreinordertolockthewaystosolve.Ifusethetraditionalmechanicalkeytoopenthelock,peopleoftenneedtocarrymultiplekeys,useveryconvenient,andthekeymissingaftersecurityiscompromised.Withanti-theftalarmfunctionsuchaselectroniccombinationlockinsteadofpasswordquantityislittle,security,poormechanicalcombinationlockisinevitabletrend.Withthecontinuousdevelopmentofscienceandtechnology,peopleindailylifethedemandishigherandhighersafetyinsurancedevice.Tomeettherequirementsofpeopleontheuseofthelock,increaseitssafety,usethepasswordinsteadofthekeycombinationlockarisesatthehistoricmoment.Combinationlockwithhighsafety,lowcost,lowpowerconsumption,easyoperation,rememberpasswordlock,etc.
Currentlyuseelectroniccombinationlockismostlybasedonsinglechipmicrocomputertechnology,singlechipmicrocomputerasthemaindevice,theencoderanddecoderforsoftware.
Thissystemconsistsof16f877microcontrollersystem(mainlyminimum16f877microcontrollersystem),4*4matrixkeyboard,LCD1602displayandalarmsystem,etc,andhassetupfour,modifyuserpassword,password,inputprompterroralarmfunctions(thisdesignbythesinglechipmicrocomputercontrolLCDdisplay,thepasswordcorrectlydisplaythepasswordok!
Wrongpasswordshowswrong,bothpleasereset!
Theusertoenteragainafterreset.Bysingle-chipmicrocomputercontrolmatrixkeyboardcontains0-9numberkeysandA-Ffunctionkeys.PresstheFkey,thencarriesonthepasswordresetfunction).Thissystemislowcost,functionandpractical.WMfunctiontocontrolitsturn.Andthisissocallednavigatingaptitudinally.
关键字
单片机——microcontroller芯片——CMOSchip
16F877
一、PIC16F877系列单片机简介
PIC16F87X(含873P874P876P877)是美国微芯(Microchip)公司推出的高性能单片机,除具有单片机的通用资源外,该系列单片机还采用哈佛总线结构、二级指令流水线取指方式、精简指令集(RISC)和部具有E2PROM数据存储器及FLASH结构的程序存储器、仅35条单字节单周期指令、在系统串行编程技术和在线调试技术。
因此采用该系列单片机的产品具有低成本、低功耗、高速度、高可靠性、体积小、性价比高等特点。
其芯片引脚图如图1所示。
另外,它部的E2PROM数据存储器不仅具有掉电保护数据的功能,更重要的是它的读写操作均是由单片机部时序控制,即外部电路无法对其进行访问,因而具有极高的数据保密性,这使得PIC16F87X在加密性产品如智能IC卡、密码锁、电子防盗系统等方面有很广泛的应用。
二.实验论证与比较
1.总体系统组成
电路主要分8个模块,即电源电路、复位电路、晶振电路、报警电路、键盘电路、LCD显示电路、开/关锁电路、声音电路。
由单片机主要控制、实现密码锁功能。
1.1电源电路模块
从电源插座进来的是9V直流电,经一片三端稳压器,将其转换为5V的稳定电压。
电源滤波的重要性,一个电路板的滤波特性如果不好,严重时将会影响整个电路板不能正常工作。
所以要注意一个大电容和一个小电容并联滤波,电源线要粗,走线要合理,模拟电路最好大面积接地。
其主要作用是为电路提供工作电压,保证电路正常工作。
1.2复位电路模块
主要用于对电路进行手工复位。
1.3晶振电路模块
晶振主要就是为单片机工作提供一定的工作频率。
1.4报警电路模块
主要是用于密码输入错误时,鸣声提醒用户密码输入错误。
1.5键盘电路模块
键盘采用4*4矩阵键盘,行线连接到RD端口,列线连接到RB接口。
16个键分别为0~9的数字键及A~F的功能键,F键则表示密码重置。
键盘主要用于输入密码或进行功能、状态切换。
1.6LCD显示电路模块
当通电时LCD显示password,当密码输入正确显示ok,不正确则显示wrong,pleasereset。
1.7开/关锁电路模块
当密码输入正确时,单片机输出高电平,则继电器打开,表示锁开。
1.8显示电路模块
主要用于密码输入时,显示已输入。
当密码输入正确则灯一直亮,输入错误则一直闪烁,提醒用户。
三系统总体设计
3.1系统框图
报警
3.2电路总图
四.硬件连接
五.调试过程
程序开始就进入main,执行初始设置后,进行LCD屏幕初始化。
单片机就开始执行键盘扫描是否有输入阶段,根据采集到的键盘信息,做出分析,进行密码重置或者输入密码比较。
调试过程中我遇到了很多问题,也就是在这些问题中,逐渐学会了MPLAB的使用和用汇编语言编程。
在此,列举几个调试过程中比较典型的问题。
5.1对屏幕初始化不能完成
在小学期的出始阶段,我和搭档秦永宁决定在最开始阶段,我俩都进行程序编程,对汇编语言进行学习。
我们分模块编写,我进行屏幕初始化程序编写,搭档秦永宁写键盘扫描程序。
在后面阶段,永宁主软件,我主硬件。
刚开始学单片机以及汇编语言的时候,翻看过的容,也只是记得一点点皮毛,没有真正的理解。
特别是看手册时看不懂,学校发的两本书上并没有初始化的程序。
所以请教同学,同学告诉我,手册上有初始化的过程,需要认真看看。
所以我就认真的看了一个早上,终于把手册上的容看懂了。
所以就开始编程,在编程的过程中调试buildall时,有出现了一些error,通过改正,buildall终于成功,初始化程序完成。
(五号宋体)
初始化程序如下:
;***************初始化程序***********************
CHUSHIHUAMOVLWD'16';
MOVWFCOUNT;初始化count为16
DELAY16MS;延时16ms
CALLDELAY1MS;
DECFSZCOUNT,1;(1/2)count送count并判断结果是否为0?
;是0,跳出循环,否循环回去
GOTODELAY16MS;
MOVLWB'00111000';将38h送到w
MOVWFPORTD;将38h送到portd
MOVLWB'00000010';将02h送到w
MOVWFPORTE;将02h送到porte,写数据
BCFPORTE,1;将porte的第一个位置清0
MOVLWD'5';将5送到w
MOVWFCOUNT;将count赋值为5
DELAY5MS;延时1ms
CALLDELAY1MS;
DECFSZCOUNT,1;
GOTODELAY5MS;
MOVLWB'00111000';将38h送到w
MOVWFPORTD;将38h送到potd
MOVLWB'00000010';将02h送到w
MOVWFPORTE;将02h送到porte,写数据
BCFPORTE,1;将porte的第一个位置清0
MOVLWD'3';
MOVWFCOUNT;
DELAY120US;延时120um
CALLDELAY40US;
DECFSZCOUNT,1;
GOTODELAY120US;
MOVLWB'00111000';
MOVWFPORTD;
MOVLWB'00000010';
MOVWFPORTE;
BCFPORTE,1;
;*****************************************************************
CALLDELAY40US;
MOVLWB'00111000';
MOVWFPORTD;
MOVLWB'00000010';
MOVWFPORTE;
BCFPORTE,1;
CALLDELAY40US;
MOVLWB'00001000';将08h送到w,关显示
MOVWFPORTD;将o8h送到portd
MOVLWB'00000010';将02h送到w
MOVWFPORTE;将02h送到porte
BCFPORTE,1;将porte的第一个位置清0
CALLDELAY40US;
MOVLWB'00000001';将01h送到w,清屏
MOVWFPORTD;将o1h送到portd
MOVLWB'00000010';
MOVWFPORTE;将02h送到porte
BCFPORTE,1;将porte的第一个位置清0
CALLDELAY1MS;
MOVLWD'16';
MOVWFCOUNT;将count设置为16
DELAY640US;延时640us
CALLDELAY40US;
DECFSZCOUNT,1;
GOTODELAY640US;
MOVLWB'00000110';将06h送到w,设置输入方式
MOVWFPORTD;
MOVLWB'00000010';
MOVWFPORTE;
BCFPORTE,1;
CALLDELAY40US;
MOVLWB'00001101';将0DH送到w,*****
MOVWFPORTD;将0DH送到portd
MOVLWB'00000010';
MOVWFPORTE;将02h送到porte
BCFPORTE,1;将porte的第一个位置清0
5.2用EEPROM编写密码重置时,重置的密码不能写入EEPROM
在我们的实验进行到一定阶段,我去搭面包板,搭完后,我们将已经编好的LCD显示程序下载到单片机当中,加上电源,LCD显示正确。
所以我就趁着时间看书,当看到《PIC单片机实用教程——提高篇》第一章时,所以我就想尝试着利用EEPROM编写密码重置问题。
在编写的过程中,为了调试方便,我就借用老师的实验箱进行下载调试。
而调试了好几天,并没有出现进展。
所以就开始画程序流程图,画完后对程序进行修改。
当进行单步调试时,发现进行到查表程序时,程序下一步走得并不正确。
请教老师后,把查表程序写在了程序最前面,就解决了问题。
可是用EEPROM写入密码还是不正确。
由于时间问题,我就去焊接电路板了。
到最后验收时,老师让我继续编写用EEPROM编写密码重置功能,当最后我想放弃,老师一直在鼓励我,在不懈努力下以及老师的帮助下终于成功了。
这看似是一个小问题,但它却告诉我,在学习单片机的过程中一点点微小的过失可能就会导致自己的程序看不到结果,不能忽略学习过程中的一点一滴疑问。
也只有这样才能真正学会、学到和学好知识。
*************************EEPROM烧写程序*******************************
WRITE
BSFSTATUS,RP0
BSFSTATUS,RP1
BTFSCEECON1,WR
GOTO$-1
BCFSTATUS,RP0
MOVFADDKEY,0
MOVWFEEADR
MOVFKEY,0
MOVWFEEDATA
BSFSTATUS,RP0
BCFEECON1,EEPGD
BSFEECON1,WREN
MOVLW55H
MOVWFEECON2
MOVLW0AAH
MOVWFEECON2
BSFEECON1,WR
BCFEECON1,WREN
INCFADDKEY,1
RETURN
**********************EEPROM读程序*********************************
READ
BCFSTATUS,RP0
BSFSTATUS,RP1
MOVFADDR,0
MOVWFEEADR
BSFSTATUS,RP0
BCFEECON1,EEPGD
BSFEECON1,RD
BCFSTATUS,RP0
MOVFEEDATA,0
MOVWFWORD_1
RETURN
5.3焊接电路时,电路焊接错误
在最开始时,焊接电路,由于是第一次焊接电路,对电路焊接不太认真以及没有做好准备,所以焊接好的电路并不出现正确的结果。
对电路进行检查时,发现电路焊接时电路焊接错误,用焊吸吸掉锡后,对电路进行改正,可是却依然不出现正确结果。
所以用万用表对电路进行检查,发现两个结点之间电压不应该相同,而测量结果却一样,改后却依然一样。
所以决定重新焊接一块板子,当第二块板子焊接完后,出现了正确结果。
这个小波折告诉我,知识的积累和掌握不能仅仅依靠课本,还要结合实践进一步理解,这样才能加深印象,融会贯通,也只有这样才能真正学以致用。
这个小挫折告诉我只有联系实际,在实践中才能真正找出自己的错误,理论联系实际才能真正学到知识。
六.实验心得体会
对于整个实验的心得体会,上面已经提到很多了,不过,还是有好深刻的感觉和触动。
其一,在小学期以前我没有对单片机没有任何概念。
在刚刚接触到单片机时,我可以说是一窍不通,甚至对于单片机究竟是什么也不能很精确地表达出来。
经过网上查询以及了解,定下几个想做的目标,经过一个个筛选,最后确定我们做一个密码锁。
说实在话,我当时心里也没有太大的信心和勇气,不过这些都得去学,所以就一头扎进学习的过程。
其二,3星期单片机的学习让我增强了自信心。
学习单片机的过程中,我也不是没有怀疑过自己的能力,而是我在学习的过程中,从对单片机的一无所知,对繁琐的汇编语言的畏惧,到一步一步进行单步调试,再到能够发现问题并经过思考来解决问题,我感觉到自己在进步,也感受到只要每天努力一点点,希望就会再接近一点点,离成功的距离也就会再接近一点点,也就是这些一点点的努力和距离告诉我要继续坚持,告诉我要相信自己,因为只有相信自己,不断努力,才能战胜自己的弱势,得到自己想要的结果。
其三,我非常感谢向辅导我的几位老师致谢,您们辛苦了!
在学习的过程中,我发现了学习中的乐趣。
谢谢您们在我想放弃的时候还一直给我指导,给我鼓励。
七.参考文献:
PIC单片机实用教程——基础篇(五号宋体)
学海
北京航空航天大学
使用说明:
的确是一本不可或缺的教材,本书列举了很多实用的具有实战意义的例子,单片机入门就是通过把这本书里的好例子一字一行敲进电脑去来实现的。
PIC单片机实用教程——提高篇
学海
北京航空航天大学
使用说明:
继承了前面基础篇的风格,例子也具有实战意义,主要讲RA、TMR2的使用和CCP模块的PWM脉宽调制功能。
附录:
程序汇编代码:
LISTP=16F877,R=DEC;定义器件,默认为十进制
#include
TMR0EQU01H;定义定时器/计数器0寄存地址
PCLEQU02H;定义程序指针寄存器
STATUSEQU3H;定义状态寄存器地址
OPTION_REGEQU81H;定义选项寄存地址
INTCONEQU0BH;定义中断控制寄存地址
PORTBEQU6H;定义端口B的数据寄存器地址
PORTCEQU7H;定义端口C的数据寄存器地址
PORTDEQU8H;定义端口D的数据寄存器地址
PORTEEQU9H;定义端口E的数据寄存器地址
TRISCEQU87H;定义端口C的方向寄存器
TRISAEQU85H;定义端口A的方向寄存器
TRISBEQU86H;定义端口B的方向寄存器
TRISDEQU88H;定义端口D的方向寄存器
TRISEEQU89H;定义端口E的方向寄存器
COUNTEQU20H;定义一个计数器变量寄存地址
TMR0BEQUD'252';定义TMR0寄存地址初始值256-4=252)
RP0EQU5H;定义状态寄存器中的页选位RP0
T0IFEQU2;定义TMR0溢出标志位的位地址
FEQU1;定义目标寄存器指示标号
COUNT1EQU21H;定义计数器状态变量
COUNT2EQU23H;
COUNT3EQU24H;
COUNT4EQU25H;
COUNT5EQU27H;
COUNT6EQU28H;
VALEQU30H;定义键盘的状态变量
WORD_1EQU22H;初始密码
WORD_2EQU26H
WORD_3EQU2AH
WORD_4EQU2BH
KEY_1EQU47H;用户输入密码
KEY_2EQU48H
KEY_3EQU49H
KEY_4EQU4AH
NEQU52H;定义外循环变量M
MEQU53H;循环变量N
TEMPEQU29H
WEQU0;定义传送目标寄存器为W的指示位
FEQU1;定义传送目标寄存器为RAM的指示位
T0IFEQU2;定义TMR0中断标志位的地址位
T0IEEQU5;定义TMR0中断矢能位的地址位
INTEEQU4;定义外部中断矢能位的地址位
INTFEQU1;定义外部中断标志位的地址位
RBIFEQU0;定义RB口变化中断标志位的位地址
OPTION_REGEQU81H;定义选项寄存器地址
OPTION_TEMPEQU0A6H;在bank1定义选项寄存器的备份寄存器地址
SOUNDDELAY1EQU31H;声音频率变化计数器,从1.8~3.55KHZ
FRE_COUNTEQU32H;同一频率的重复次数保存地址
FRE_REPEATEQU33H
SOUND_TEMPEQU34H
TEMP1EQU35H;暂存寄存器
S_LOOPEQU37H;93-47=46
S_MAXEQU73H;最低频率1.8K93*3=280US*2S_
S_MINEQU36H;最高频率3.55K47*3=140*2S_
S_REPEATEQU4H;同一频率重复次数
;**************************************************
;**************************************************
ORG000H;
MAINNOP
BSFSTATUS,RP0;文件寄存到BANK1
MOVLW00H;将端口C的方向控制字先送到W
MOVWFTRISC;然后再转送到端口C的方向寄存器
MOVLW0FFH;将端口B的方向控制字先送到W
MOVWFTRISB;然后再转送到端口B的方向寄存器
MOVLW0FFH