当前位置:文档之家› 电子密码锁实验报告

电子密码锁实验报告

电子密码锁实验报告一,实验目的1.进一步巩固和加深理论课基本知识的理解,提高综合运用所学知识的能力。

2.能根据需要选择参考书,查阅资料,通过独立思考,深入钻研有关问题。

3.学会自己独立分析问题、解决问题。

4学习定时器时间计时处理、按键扫描及LED数码管显示的设计方法。

5.根据设计任务及要求利用实验平台上单片机及其外围元器件,设计符合功能的电子密码锁。

二,实验要求设计要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。

2:可以自行设定或删除8位密码,能够掉电保存。

3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。

三,实验基本原理1.键盘接口必须具有去抖动、按键识别基本功能。

(1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。

抖动的持续时间与键的质量相关,一般为5—20mm。

所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。

去抖问题可通过软件延时或硬件电路解决。

(2)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。

常用的方法有行扫描法和线反转法两种。

行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。

线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。

2.利用键盘扫描原理分别设4×4矩阵键盘组成0-9数字键及确认键和删除键,通过0—9数字键设定8位密码和删除键删除密码,利用存储器的永久存储特性将设定的密码存于存储器中,再次重启程序时,能从存储器中读取出来,从而实现掉电保存。

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

Led发光二级管低电平发亮,高电平熄灭的特性实现led提示功能。

利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,从而实现led亮1秒或3秒。

四,实验设计分析针对要实现的功能,采用AT89S52单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为按键程序、数码管显示程序、发光二级管程序,存储器程序,密码设定程序、密码删除程序、定时器程序,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:先学习理解C语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。

第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。

第六部分是硬件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。

最后进行功能扩展,在已经正确的设计基础上,添加额外的功能!五,实验要求实现A.电路设计1. 整体设计此次设计主要是应用单片机来设计电子密码锁,硬件部分主要分以下电路模块:显示电路用5个共阴数码管显示8和发光二级管的发亮提示,存储器的存储模块,单片机采用AT89S52系列,这种单片机应用简单,适合电子钟设计。

电路的总体设计框架如下:2. 分块设计模块电路主要分为:输入部分、输出部分、复位和晶振电路。

输入模块:键盘输入键盘接入单片机P3接口,输出模块:数码管输出AT89S52复位模块AT89S52晶振模块各模块拼接,总的模块图如下:B.程序设计B.1 程序总体设计本实验用C 程序完成.流程图如下:输入密码 密码识别 错误红灯亮 绿灯亮1秒 正确 禁止3秒图1总设计框图B.2 程序主要模块主程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned char//uchar code a[]={0x00,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,};uchar code a[]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x3 9,0x5e,0x79,0x71};uchar code b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar code c[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x07,0x07};uinttemp,num,x,y,z,aa,bb=0,i=0,j=0,k=0,n=0,m=0,cc=0,dd=12345,t,kk;void delay(uint z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;//P0=0x00;while(1){if(kk==0){P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break; }if(num==1){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==2){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==3){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==4){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}while(temp!=0xf0) { temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break; }if(num==5){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==6){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==7){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==8){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=0;break;}if(num==9){bb++;cc++;if(bb==1)i=num;else if(bb==2) j=num;else if(bb==3) k=num;else if(bb==4) n=num;else if(bb==5) m=num;}if(num==10){if(aa==dd){P1=0xbf;t=0;}else if(aa!=dd){ P1=0xfe;kk=1;t=0;}}if(num==11){i=j=k=n=m=0;cc=0;}if(num==0){bb++;cc++;if(bb==1)i=num;else if(bb==2) j=num-12;else if(bb==3) k=num;else if(bb==4) n=num;else if(bb==5)m=num;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}P0=a[num-1];}}/*P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break; }if(num==13){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==14){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==15){if(aa==dd){P1=0xbf;t=0;}else if(aa!=dd){P1=0xfe;kk=1;t=0;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}}*/}aa=i*10000+j*1000+k*100+n*10+m; if(cc>=5)cc=5;P2=c[cc];P0=0x7f;/*P0=0x00;P2=0xef;P0=a[aa%10];delay(5);P0=0x00;P2=0xf7;P0=a[aa%10000%1000%100/10]; delay(5);P0=0x00;P2=0xfb;P0=a[aa%10000%1000/100]; delay(5);P0=0x00;P2=0xfd;P0=a[aa%10000/1000];delay(5);P0=0x00;P2=0xfe;P0=a[aa/10000];delay(5);*/}}void exter0() interrupt 1 {TH0=(65536-50000)/256;TL0=(65536-50000)%256;t++;if(kk==1){P3=0xf0;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;t=0;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}if(P1==0xbf){if(t==20)P1=0xff;}else if(kk==1){if(t==60){t=0;P1=0xff;kk=0;}}}C. 程序调试及仿真本程序通过Keil单片机开发平台实现程序的编译,链接,生成HEX文件。

相关主题