




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机设计实验报告201x年小学期单片机设计实验报告题目:基于16f877的电子密码锁班 级: 班内序号: 实验组号: 学生姓名: 指导教师: 期中检查教师评语指导教师签字: 年 月 日基于16f877的电子密码锁 实验摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。本系统由16f877单片机系统(主要是16f877单片机最小系统)、44矩阵键盘、lcd1602显示和报警系统等组成,具有设置、修改四位用户密码、输入提示音、密码错误报警等功能(本设计由单片机控制lcd显示,密码正确显示password ok! 密码错误显示wrong,please reset!用户reset后进行重新输入。由单片机控制矩阵键盘含有0-9数字键和a-f功能键。按f键,则进行密码重置功能)。本系统成本低廉,功能实用。 (宋体 五号)abstractin daily life and work, the department of housing and security, unit documents, financial statements and some personal information to save more in order to lock the ways to solve. if use the traditional mechanical key to open the lock, people often need to carry multiple keys, use very convenient, and the key missing after security is compromised. with anti-theft alarm function such as electronic combination lock instead of password quantity is little, security, poor mechanical combination lock is inevitable trend. with the continuous development of science and technology, people in daily life the demand is higher and higher safety insurance device. to meet the requirements of people on the use of the lock, increase its safety, use the password instead of the key combination lock arises at the historic moment. combination lock with high safety, low cost, low power consumption, easy operation, remember password lock, etc.currently use electronic combination lock is mostly based on single chip microcomputer technology, single chip microcomputer as the main device, the encoder and decoder for software. this system consists of 16 f877 microcontroller system (mainly minimum 16 f877 microcontroller system), 4 * 4 matrix keyboard, lcd1602 display and alarm system, etc, and has set up four, modify user password, password, input prompt error alarm functions (this design by the single chip microcomputer control lcd display, the password correctly display the password ok! wrong password shows wrong, both please reset! the user to enter again after reset. by single-chip microcomputer control matrix keyboard contains 0-9 number keys and a - f function keys. press the f key, then carries on the password reset function). this system is low cost, function and practical.wm function to control its turn. and this is so called navigating aptitudinally .关键字单片机microcontroller 芯片cmos chip 16f877 一、pic16f877系列单片机简介pic16f87x ( 含873p874p876p877) 是美国微芯(microchip) 公司推出的高性能单片机,除具有单片机的通用资源外,该系列单片机还采用哈佛总线结构、二级指令流水线取指方式、精简指令集(risc)和内部具有e2 prom 数据存储器及flash 结构的程序存储器、仅35 条单字节单周期指令、在系统串行编程技术和在线调试技术。 因此采用该系列单片机的产品具有低成本、低功耗、高速度、高可靠性、体积小、性价比高等特点。 其芯片引脚图如图1 所示。 另外,它内部的e2 prom 数据存储器不仅具有掉电保护数据的功能,更重要的是它的读写操作均是由单片机内部时序控制,即外部电路无法对其进行访问, 因而具有极高的数据保密性,这使得pic16f87x在加密性产品如智能ic 卡、密码锁、电子防盗系统等方面有很广泛的应用。二.实验论证与比较1.总体系统组成键盘电路单片机 16f877电源电路lcd显示电路复位电路开/关锁电路晶振电路显示电路报警电路电路主要分8个模块,即电源电路、复位电路、晶振电路、报警电路、键盘电路、lcd显示电路、开/关锁电路、声音电路。由单片机主要控制、实现密码锁功能。1. 1电源电路模块 从电源插座进来的是9v直流电,经一片三端稳压器,将其转换为5v的稳定电压。电源滤波的重要性,一个电路板的滤波特性如果不好,严重时将会影响整个电路板不能正常工作。所以要注意一个大电容和一个小电容并联滤波,电源线要粗,走线要合理,模拟电路最好大面积接地。其主要作用是为电路提供工作电压,保证电路正常工作。1.2复位电路模块主要用于对电路进行手工复位。osc1 5vgnd 空1.3晶振电路模块 晶振主要就是为单片机工作提供一定的工作频率。1.4报警电路模块 主要是用于密码输入错误时,鸣声提醒用户密码输入错误。1.5键盘电路模块 键盘采用4* 4矩阵键盘 ,行线连接到rd端口,列线连接到rb接口。16 个键分别为09 的数字键及af 的功能键,f键则表示密码重置。键盘主要用于输入密码或进行功能、状态切换。1.6lcd显示电路模块当通电时lcd显示password,当密码输入正确显示ok,不正确则显示wrong,please reset。1.7开/关锁电路模块 当密码输入正确时,单片机输出高电平,则继电器打开,表示锁开。1.8显示电路模块 1kohm 主要用于密码输入时,显示已输入。当密码输入正确则灯一直亮,输入错误则一直闪烁,提醒用户。 三系统总体设计3.1系统框图灯提示灯提示其他nreset报警y开始初始化模式选择识别按键密码输入手动清除密码比较开门旧密码输入新密码输入存入缓存区再次输入密码重新输入设置完返开始nfn 0-e00 -y3.2电路总图四.硬件连接五.调试过程程序开始就进入main,执行初始设置后,进行lcd屏幕初始化。单片机就开始执行键盘扫描是否有输入阶段,根据采集到的键盘信息,做出分析,进行密码重置或者输入密码比较。 调试过程中我遇到了很多问题,也就是在这些问题中,逐渐学会了mplab的使用和用汇编语言编程。在此,列举几个调试过程中比较典型的问题。5.1对屏幕初始化不能完成 在小学期的出始阶段,我和搭档秦永宁决定在最开始阶段,我俩都进行程序编程,对汇编语言进行学习。我们分模块编写,我进行屏幕初始化程序编写,搭档秦永宁写键盘扫描程序。在后面阶段,永宁主软件,我主硬件。 刚开始学单片机以及汇编语言的时候,翻看过的内容,也只是记得一点点皮毛,没有真正的理解。特别是看手册时看不懂,学校发的两本书上并没有初始化的程序。所以请教同学,同学告诉我,手册上有初始化的过程,需要认真看看。所以我就认真的看了一个早上,终于把手册上的内容看懂了。所以就开始编程,在编程的过程中调试build all时,有出现了一些error,通过改正,build all 终于成功,初始化程序完成 。(五号 宋体)初始化程序如下:;*初始化程序*chushihua movlw d16 ; movwf count ;初始化count为16delay16ms ;延时16ms call delay1ms ; decfsz count,1 ;(1/2)count送count并判断结果是否为0? ;是0,跳出循环,否循环回去 goto delay16ms ; movlw b00111000 ;将38h送到w movwf portd ;将38h送到portd movlw b00000010 ;将02h送到w movwf porte ;将02h送到porte,写数据 bcf porte,1 ;将porte的第一个位置清0 movlw d5 ;将5送到w movwf count ;将count赋值为5delay5ms ;延时1ms call delay1ms ; decfsz count,1 ; goto delay5ms ; movlw b00111000 ;将38h送到w movwf portd ;将38h送到potd movlw b00000010 ;将02h送到w movwf porte ;将02h送到porte,写数据 bcf porte,1 ;将porte的第一个位置清0 movlw d3 ; movwf count ;delay120us ;延时120um call delay40us ; decfsz count,1 ; goto delay120us ; movlw b00111000 ; movwf portd ; movlw b00000010 ; movwf porte ; bcf porte,1 ;* call delay40us ; movlw b00111000 ; movwf portd ; movlw b00000010 ; movwf porte ; bcf porte,1 ; call delay40us ; movlw b00001000 ;将08h送到w,关显示 movwf portd ;将o8h送到portd movlw b00000010 ;将02h送到w movwf porte ;将02h送到porte bcf porte,1 ;将porte的第一个位置清0 call delay40us ; movlw b00000001 ;将01h送到w,清屏 movwf portd ;将o1h送到portd movlw b00000010 ; movwf porte ;将02h送到porte bcf porte,1 ;将porte的第一个位置清0 call delay1ms ; movlw d16 ; movwf count ;将count设置为16delay640us ;延时640us call delay40us ; decfsz count,1 ; goto delay640us ; movlw b00000110 ;将06h送到w,设置输入方式 movwf portd ; movlw b00000010 ; movwf porte ; bcf porte,1 ; call delay40us ; movlw b00001101 ;将0dh送到w,* movwf portd ;将0dh送到portd movlw b00000010 ; movwf porte ;将02h送到porte bcf porte,1 ;将porte的第一个位置清05.2用eeprom编写密码重置时,重置的密码不能写入eeprom在我们的实验进行到一定阶段,我去搭面包板,搭完后,我们将已经编好的lcd显示程序下载到单片机当中,加上电源,lcd显示正确。所以我就趁着时间看书,当看到 pic单片机实用教程提高篇第一章时,所以我就想尝试着利用eeprom编写密码重置问题。在编写的过程中,为了调试方便,我就借用老师的实验箱进行下载调试。而调试了好几天,并没有出现进展。所以就开始画程序流程图,画完后对程序进行修改。当进行单步调试时,发现进行到查表程序时,程序下一步走得并不正确。请教老师后,把查表程序写在了程序最前面,就解决了问题。可是用eeprom写入密码还是不正确。由于时间问题,我就去焊接电路板了。 到最后验收时,老师让我继续编写用eeprom编写密码重置功能,当最后我想放弃,老师一直在鼓励我,在不懈努力下以及老师的帮助下终于成功了。这看似是一个小问题,但它却告诉我,在学习单片机的过程中一点点微小的过失可能就会导致自己的程序看不到结果,不能忽略学习过程中的一点一滴疑问。也只有这样才能真正学会、学到和学好知识。*eeprom烧写程序*write bsf status,rp0 bsf status,rp1 btfsc eecon1,wr goto $-1 bcf status,rp0 movf addkey,0 movwf eeadr movf key,0 movwf eedata bsf status,rp0 bcf eecon1,eepgd bsf eecon1,wren movlw 55h movwf eecon2 movlw 0aah movwf eecon2 bsf eecon1,wr bcf eecon1,wren incf addkey,1 return*eeprom读程序*read bcf status,rp0 bsf status,rp1 movf addr,0 movwf eeadr bsf status,rp0 bcf eecon1,eepgd bsf eecon1,rd bcf status,rp0 movf eedata,0 movwf word_1 return5.3焊接电路时,电路焊接错误 在最开始时,焊接电路,由于是第一次焊接电路,对电路焊接不太认真以及没有做好准备,所以焊接好的电路并不出现正确的结果。对电路进行检查时,发现电路焊接时电路焊接错误,用焊吸吸掉锡后,对电路进行改正,可是却依然不出现正确结果。所以用万用表对电路进行检查,发现两个结点之间电压不应该相同,而测量结果却一样,改后却依然一样。所以决定重新焊接一块板子,当第二块板子焊接完后,出现了正确结果。 这个小波折告诉我,知识的积累和掌握不能仅仅依靠课本,还要结合实践进一步理解,这样才能加深印象,融会贯通,也只有这样才能真正学以致用。这个小挫折告诉我只有联系实际,在实践中才能真正找出自己的错误,理论联系实际才能真正学到知识。六.实验心得体会 对于整个实验的心得体会,上面已经提到很多了,不过,还是有好深刻的感觉和触动。 其一,在小学期以前我没有对单片机没有任何概念。在刚刚接触到单片机时,我可以说是一窍不通,甚至对于单片机究竟是什么也不能很精确地表达出来。经过网上查询以及了解,定下几个想做的目标,经过一个个筛选,最后确定我们做一个密码锁。说实在话,我当时心里也没有太大的信心和勇气,不过这些都得去学,所以就一头扎进学习的过程。 其二,3星期单片机的学习让我增强了自信心。学习单片机的过程中,我也不是没有怀疑过自己的能力,而是我在学习的过程中,从对单片机的一无所知,对繁琐的汇编语言的畏惧,到一步一步进行单步调试,再到能够发现问题并经过思考来解决问题,我感觉到自己在进步,也感受到只要每天努力一点点,希望就会再接近一点点,离成功的距离也就会再接近一点点,也就是这些一点点的努力和距离告诉我要继续坚持,告诉我要相信自己,因为只有相信自己,不断努力,才能战胜自己的弱势,得到自己想要的结果。 其三,我非常感谢向辅导我的几位老师致谢,您们辛苦了!在学习的过程中,我发现了学习中的乐趣。谢谢您们在我想放弃的时候还一直给我指导,给我鼓励。七.参考文献:pic单片机实用教程基础篇 (五号 宋体)李学海北京航空航天大学出版社使用说明:的确是一本不可或缺的教材,本书列举了很多实用的具有实战意义的例子,单片机入门就是通过把这本书里的好例子一字一行敲进电脑去来实现的。pic单片机实用教程提高篇李学海北京航空航天大学出版社使用说明:继承了前面基础篇的风格,例子也具有实战意义,主要讲ra、tmr2的使用和ccp模块的pwm脉宽调制功能。附录: 程序汇编代码: list p=16f877,r=dec ;定义器件,默认为十进制#includetmr0 equ 01h ;定义定时器/计数器0寄存地址pcl equ 02h ;定义程序指针寄存器status 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的数据寄存器地址 trisc equ 87h ;定义端口c的方向寄存器trisa equ 85h ;定义端口a的方向寄存器trisb equ 86h ;定义端口b的方向寄存器trisd equ 88h ;定义端口d的方向寄存器trise equ 89h ;定义端口e的方向寄存器count equ 20h ;定义一个计数器变量寄存地址tmr0b equ d252 ;定义tmr0寄存地址初始值256-4=252)rp0 equ 5h ;定义状态寄存器中的页选位rp0t0if equ 2 ;定义tmr0溢出标志位的位地址f equ 1 ;定义目标寄存器指示标号count1 equ 21h ;定义计数器状态变量count2 equ 23h ;count3 equ 24h ;count4 equ 25h ;count5 equ 27h ;count6 equ 28h ;val equ 30h ;定义键盘的状态变量word_1 equ 22h ;初始密码word_2 equ 26hword_3 equ 2ahword_4 equ 2bhkey_1 equ 47h ;用户输入密码key_2 equ 48hkey_3 equ 49hkey_4 equ 4ahn equ 52h ;定义外循环变量mm equ 53h ;内循环变量ntemp equ 29hw 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_reg equ 81h ;定义选项寄存器地址option_temp equ 0a6h ;在bank1定义选项寄存器的备份寄存器地址sounddelay1 equ 31h ;声音频率变化计数器,从1.83.55khzfre_count equ 32h ;同一频率的重复次数保存地址fre_repeat equ 33h sound_temp equ 34htemp1 equ 35h ;暂存寄存器s_loop equ 37h ;93-47=46s_max equ 73h ;最低频率1.8k 93*3=280us*2s_s_min equ 36h ;最高频率3.55k 47*3=140*2s_s_repeat equ 4h ;同一频率重复次数;*;* org 000h ;main nop bsf status,rp0 ;文件寄存到bank1 movlw 00h ;将端口c的方向控制字先送到w movwf trisc ;然后再转送到端口c的方向寄存器 movlw 0ffh ;将端口b的方向控制字先送到w movwf trisb ;然后再转送到端口b的方向寄存器 movlw 0ffh ;将端口a的方向控制字先送到w movwf trisa ;然后再转送到端口a的方向寄存器 clrf trisd ; clrf trise ; movlw 02h ;31h movwf option_reg ;设置分频比“1:8” bcf status,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;*chuhua movlw d16 ; movwf count ;初始化count为16delay16ms ;延时16ms call delay1ms ; decfsz count,1 ;(1/2)count送count并判断结果是否为0? ;是0,跳出循环,否循环回去 goto delay16ms ; movlw b00111000 ;将38h送到w movwf portd ;将38h送到portd movlw b00000010 ;将02h送到w movwf porte ;将02h送到porte,写数据 bcf porte,1 ;将porte的第一个位置清0 movlw d5 ;将5送到w movwf count ;将count赋值为5delay5ms ;延时1ms call delay1ms ; decfsz count,1 ; goto delay5ms ; movlw b00111000 ;将38h送到w movwf portd ;将38h送到potd movlw b00000010 ;将02h送到w movwf porte ;将02h送到porte,写数据 bcf porte,1 ;将porte的第一个位置清0 movlw d3 ; movwf count ;delay120us ;延时120um call delay40us ; decfsz count,1 ; goto delay120us ; movlw b00111000 ; movwf portd ; movlw b00000010 ; movwf porte ; bcf porte,1 ;* call delay40us ; movlw b00111000 ; movwf portd ; movlw b00000010 ; movwf porte ; bcf porte,1 ; call delay40us ; movlw b00001000 ;将08h送到w,关显示 movwf portd ;将o8h送到portd movlw b00000010 ;将02h送到w movwf porte ;将02h送到porte bcf porte,1 ;将porte的第一个位置清0 call delay40us ; movlw b00000001 ;将01h送到w,清屏 movwf portd ;将o1h送到portd movlw b00000010 ; movwf porte ;将02h送到porte bcf porte,1 ;将porte的第一个位置清0 call delay1ms ; movlw d16 ; movwf count ;将count设置为16delay640us ;延时640us call delay40us ; decfsz count,1 ; goto delay640us ; movlw b00000110 ;将06h送到w,设置输入方式 movwf portd ; movlw b00000010 ; movwf porte ; bcf porte,1 ; call delay40us ; movlw b00001101 ;将0dh送到w,* movwf portd ;将0dh送到portd movlw b00000010 ; movwf porte ;将02h送到porte bcf porte,1 ;将porte的第一个位置清0 call delay40us ; call password ;* call keydown xorlw 46h btfsc status,2 goto sets movf temp,0 movwf key_1 goto num2;*sets call delay40us ; movlw b00000001 ;将0dh送到w,* movwf portd ;将0dh送到portd movlw b00000010 ; movwf porte ;将02h送到porte bcf porte,1 movlw b00000100 movwf portc call delay100ms movlw b00000000 movwf portc call keydown movwf word_1 call keydown movwf word_2 call keydown movwf word_3 call keydown movwf word_4 call delay1ms call delay40us ; movlw b00000001 ;将0dh送到w,* movwf portd ;将0dh送到portd movlw b00000010 ; movwf porte ;将02h送到porte bcf porte,1 call delay1ms call password goto num1; goto stop;*num1 call keydown movwf key_1num2 call keydown movwf key_2num3 call keydown movwf key_3num4 call keydown movwf key_4;-;*密码比较* comp1 movf key_1,0 xorwf word_1 ,0 ;第一位密码比较 btfss status,2 ;相同,则比较第二位 goto warn;-comp2 movf key_2,0 xor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文献资源建设考核试卷
- 玉石在新时代文化建设弘扬民族精神中的价值考核试卷
- 缝制机械的绿色设计理念考核试卷
- 珠海市高三上学期学业质量监测文综历史试题
- 辽宁政法职业学院《中学历史教学技能训练(Ⅱ)》2023-2024学年第二学期期末试卷
- 上海财经大学《港台文学专题》2023-2024学年第一学期期末试卷
- 吉林省松原市前郭尔罗斯蒙古族自治县重点达标名校2025届中考备考冲刺阶段(查缺补漏)生物试题含解析
- 凉城县2025届数学五年级第二学期期末监测模拟试题含答案
- 西安邮电大学《水处理生物学》2023-2024学年第二学期期末试卷
- 江苏省南京江北新区南京市浦口外国语校2024-2025学年初三下学期第一次诊断(期末)考试语文试题含解析
- 广东省清远市2025届普通高中毕业年级高三教学质量检测物理试卷及答案(二)清远二模
- 2025届“皖南八校”高三第三次大联考物理试卷(含答案解析)
- 2025年4月广西壮族自治区贺州市中考二模语文试题(含答案)
- 教师资格笔试教育数字化转型的挑战与对策分析试题及答案
- 2025年保温杯抛光机项目可行性研究报告
- 2024年河北省中等职业教育对口高考畜牧兽医类真题试卷及参考答案-
- 2024年9月28日福建省事业单位统考《行政职业能力测试》真题及答案
- 地理巴西(第2课时)课件-2024-2025学年地理人教版七年级下册
- 2025-2030中国医药冷链物流行业市场发展分析及竞争格局与投资前景研究报告
- 心血管-肾脏-代谢综合征患者的综合管理中国专家共识(2025版)解读
- 2025年数据安全法及个人信息保护法培训试题
评论
0/150
提交评论