ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:125.20KB ,
资源ID:6429523      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6429523.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(44电子密码锁及分析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

44电子密码锁及分析.docx

1、44电子密码锁及分析33 44键盘及8位数码管显示构成的电子密码锁 1 实验任务 用44组成09数字键及确认键。 用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”声;若密码不正确,禁止按键输入3秒,同时发出“嘀、嘀”报警声;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。 2 电路原理图 图4.33.1 3 系统板上硬件连线 (1) 把“单片机系统”区域中的P0.0P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端

2、子上。 (2) 把“单片机系统“区域中的P2.0P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。 (3) 把“单片机系统”区域中的P3.0P3.7用8芯排线连接到“44行列式键盘”区域中的R1R2R3R4C1C2C3C4端子上。 (4) 把“单片机系统”区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L2端子上。 (5) 把“单片机系统”区域中的P1.7用导线连接到“音频放大模块”区域中的SPK IN端子上。 (6) 把“音频放大模块”区域中的SPK OUT接到喇叭上。 4 程序设计内容 (1) 44行列式键盘识别技术:有关这方面内容前面已经讨

3、论过,这里不再重复。 (2) 8位数码显示,初始化时,显示“P”,接着输入最大6位数的密码,当密码输入完后,按下确认键,进行密码比较,然后给出相应的信息。在输入密码过程中,显示器只显示“8.”。当数字输入超过6个时,给出报警信息。在密码输入过程中,若输入错误,可以利用“DEL”键删除刚才输入的错误的数字。 (3) 44行列式键盘的按键功能分布图如图4.33.2所示: 图4.33.2 5 C语言源程序#include unsigned char ps=1,2,3,4,5;初始密码unsigned char code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0x

4、bf,0x7f;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x73,0xff;0X40(-)0x73(P)0xff(日.)unsigned char dispbuf8=18,16,16,16,16,16,16,16;是否有键按下的标记数;组unsigned char dispcount;unsigned char flashcount;unsigned char temp;unsigned char k

5、ey;unsigned char keycount;unsigned char pslen=5; 密码长度unsigned char getps6; 存放输入的按键值bit keyoverflag;bit errorflag;bit rightflag;unsigned int second3;unsigned int aa,bb;unsigned int cc;bit okflag;bit alarmflag;bit hibitflag;unsigned char oka,okb;void main(void)unsigned char i,j;TMOD=0x01; 一、定时器控制寄存器(T

6、CON); ;1、TF0(TF1)计数溢出标志位 ;当计数器计数溢出(计满)时,该位置“1”;查询方式时,此位作状态位供查询,软件清“0”;;中断方式时,此位作中断标志位,硬件自动清“0”。;2、TR0(TR1) 定时器运行控制位;TR0(TR1)=0 停止定时器计数器工作;TR0( TR1)=1 启动定时器计数器工作;软件方法使其置“1”或清“0”。;二、工作方式控制寄存器(TMOD);各位定义如下:; ;1、GATE 门控位;GATE=0以运行控制位TR启动定时器;GATE=1以外中断请求信号(/IMT0或/INT1)启动定时器;2、C/T 定时方式或计数方式选择位;C/T=0定时工作方式

7、;C/T=l计数工作方式;3、M1、M0 工作方式选择位;M1、M0=00 方式0;M1、M0=01 方式1;M1、M0=10 方式2;M1、M0=11 方式3;三、中断允许控制寄存器(IE); 1、EA中断允许总控制位;2、ET0和ET1定时计数中断允许控制位;ET0(ET1)=0禁止定时计数中断;ET0(ET1)=1允许定时计数中断TH0=(65536-500)/256;TL0=(65536-500)%256; 0.5TR0=1;ET0=1;EA=1;while(1)P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f; 1110 1111&0000 1111if

8、 (temp!=0x0f); 第一行有键按下for(i=10;i0;i-)for(j=248;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f);第一行确实有键按下temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=10;break;; key选择一个值后跳出,继续。;(判断是0-9的数字键,还是12DEL;键,还是15 ENTER键)temp=P3;P1_1=P1_1;

9、if(key=0) & (key10) ;若是数字键则每按一个键keycount加1,同时判;断按键个数是否超出6个if(keycount6)keycount=6;keyoverflag=1;/key overflowelse if(key=12)/ delete keyif(keycount0)keycount-;getpskeycount=0;dispbufkeycount+2=16;else ; 无键按下式时,按DEL键则keyoverflag=1;else if(key=15)/ enter key,首先比较按键个数与密码长度是否 ;一致 if(keycount!=pslen) ; 若

10、按键个数不等于密码长度时errorflag=1;rightflag=0;second3=0;else ;若按键个数等于密码长度时,比较输入值是否与;预设密码每位一致for(i=0;i0;i-)for(j=248;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;temp=P3;P1_1=P1_1;if(

11、key=0) & (key10) ; 是数字键时if(keycount6)keycount=6;keyoverflag=1;/key overflowelse if(key=12)/delete keyif(keycount0)keycount-;getpskeycount=0;dispbufkeycount+2=16;elsekeyoverflag=1;else if(key=15)/enter keyif(keycount!=pslen)errorflag=1;rightflag=0;second3=0;elsefor(i=0;i0;i-)for(j=248;j0;j-);temp=P3;

12、temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;temp=P3;P1_1=P1_1;if(key=0) & (key10)if(keycount6)keycount=6;keyoverflag=1;/key overflowelse if(key=12)/delete keyif(keycount0)keycount-;getps

13、keycount=0;dispbufkeycount+2=16;elsekeyoverflag=1;else if(key=15)/enter keyif(keycount!=pslen)errorflag=1;rightflag=0;second3=0;elsefor(i=0;i0;i-)for(j=248;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=1

14、4;break;case 0x07:key=15;break;temp=P3;P1_1=P1_1;if(key=0) & (key10)if(keycount6)keycount=6;keyoverflag=1;/key overflowelse if(key=12)/delete keyif(keycount0)keycount-;getpskeycount=0;dispbufkeycount+2=16;elsekeyoverflag=1;else if(key=15)/enter keyif(keycount!=pslen)errorflag=1;rightflag=0;second3=0

15、;elsefor(i=0;ikeycount;i+)if(getpsi!=psi)i=keycount;errorflag=1;rightflag=0;second3=0;goto a2;errorflag=0;rightflag=1;a2: i=keycount;temp=temp & 0x0f;while(temp!=0x0f)temp=P3;temp=temp & 0x0f;keyoverflag=0;/void t0(void) interrupt 1 using 0TH0=(65536-500)/256;TL0=(65536-500)%256;flashcount+;if(flash

16、count=8); 0.5*8=4ms后flashcount=0;P2=dispbitdispcount;P0=dispcodedispbufdispcount; dispbuf使得dispcode有三种取值:;dispcode18= 0x73(P);dispcode16= 0x00(灭);dispcode19= 0xff(日.);;dispbuf8=18,16,16,16,16,16,16,16;dispcode=0x3f,0x06,0x5b,0x4f,0x66, ;0x6d,0x7d,0x07,0x7f,0x6f, ;0x77,0x7c,0x39,0x5e,0x79,0x71, ; 0x0

17、0,0x40,0x73,0xff;0X40(-)、0x73(P)、0xff(日.)dispcount+;if(dispcount=8)dispcount=0; ;每次0.5ms中断时判断密码正误寄存位if(errorflag=1) & (rightflag=0); 若密码错误bb+;if(bb=800);延时0.4sbb=0;alarmflag=alarmflag;if(alarmflag=1)/sound alarm signalP1_7=P1_7;aa+;if(aa=800)/light alarm signalaa=0;P1_0=P1_0;second3+;if(second3=6400

18、);0.5*6400=3.2ssecond3=0;errorflag=0;rightflag=0;alarmflag=0;bb=0;aa=0;else if(errorflag=0) & (rightflag=1);若密码正确P1_0=0;cc+;if(cc1000)okflag=1;else if(cc2000)okflag=0;elseerrorflag=0;rightflag=0;P1_7=1;cc=0;oka=0;okb=0;okflag=0;P1_0=1;if(okflag=1)oka+;if(oka=2)oka=0;P1_7=P1_7;elseokb+;if(okb=3)okb=0;P1_7=P1_7;if(keyoverflag=1)P1_7=P1_7;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1