电子密码锁proteus仿真设计报告_第1页
电子密码锁proteus仿真设计报告_第2页
电子密码锁proteus仿真设计报告_第3页
电子密码锁proteus仿真设计报告_第4页
电子密码锁proteus仿真设计报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国海洋大学单片机课程实验设计报告设计题目:电子锁密码proteus仿真计姓名:班级:学号:任课教师:课时:1、 实 验设计功能描述本设计采用单片机为主控芯片, 结合外围电路, 组成 * 电子密码锁, 用户想要打开锁, 必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。 密码可以由用户自己修改设定, 锁打开后才能修改密码。 修改密码之前必须再次输入密码, 在输入新密码时候需要二次确认,以防止误操作。2、 设 计所用原器件主控芯片AT89S51、 4*4 矩阵按键、 LCD1602 显示器 、蜂鸣器、24c04a芯片、存储芯片 AT24C

2、02晶体振荡器3、 硬 件电路设计1、键盘输入部分由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘, 按键位于行列的交叉点上, 密码锁的密码由键盘输入完 成 , 与 独 立 式 按 键 键 盘 相 比 , 要 节 省 很 多 I/O 口 。:l:修IM#二kla - i不: r IK A*=zr h-LCID1 , uuei«Lu ' &XI .CFYsnrskL .tf灯AdPOE7A.OOF3 VH.jiPUN绅Z pdjmj PD.41AD4 POffAWPD.rwri-ZOVsB PZ1/A9

3、FTP2JiU P7 4白田 PZSV.fiO ra#>i< P25W15P3flHX» F3.ITO PIZINTO FIEPZuHD pj«rri rartKni1 , LSIr12、密码存储部分用EPROM芯片 AT24C02存储密码。AT24C02是美国 Atmel 公司的低功耗 CMOS型E2PROM内含256X8位存储空间,具 有工作电压宽(2.55.5 V)、擦写次数多(大于10000次)、写入速 度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特 点。而且他是采用了 I2C总线式进行数据读写的串行器件,占用 很少的资源和I/O线,弁且

4、支持在线编程,进行数据实时的存 取十分方便。3、晶振部分AT89S51弓I脚XTAL1和XTAL2与晶体振荡器及电容 C2、C1按图4.5所示方式连接。晶振、电容 C1/C2及片内与非门(作 为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与 晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在033MHz之间,电容C1、C2取值范围在 530pF之间。根据实际情况,本设计中采用 12MHZ 做为系统的外部晶振。电容取值为20pF。4、显示部分为了提高密码锁的密码显示效果能力。 本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。只有按下键盘上的开启按键后, 显

5、示器才处于开启状态。 同理只有按下关闭按键后显示器才处于关闭状态。否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键 0 9 输入密码,每按下一个数字键后在显示器上显示一个 * ,输入多少位就显示多少个* 。5、报警部分报警部分由陶瓷压电发声装置及外围电路组成, 加电后不发声,当有键按下时, “叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的 P2.1 引脚为低电平,三极管T3 导通轰鸣器发出噪鸣声报警。6、开锁部分开锁控制电路的功能是当输入正确的密码后将锁打开。 系统使用单片机其中一引脚线发出信号, 经三极管放大

6、后, 由继电器驱动电磁阀动作将锁打开。 用户通过键盘任意设置密码, 并储存在EEPROM中作为锁码指令。4、 软 件设计本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROMW写程序和延时程序等组成。主要程序设计流程图如下所示:29 / 26临A书叫淑档F五、仿真抓图1、输入原始密码:LCD1- -Uuftid !眠市产小;H BIDw RFf ''r-d,Fi 口他1173Vp FMWH ,工 SIR PZSAQ ,工aIM F建/U.itHJQTDU anm1 EHAEH 叩”町 ra心M PQ 却 Wff F 口置Ag K

7、KMMTTYcur Fajswcrdp -1:KN.£t?尸3"儿< ra. -m>R3 二1rlFEPl YTFTTFl *no,1不?35fUHP:?i'i:'TIBF TIT2.输入正确:, ' LCS1 1LAH1&L' ''BM JUVour Paisuord.Nd ri 9hti !J2u» LHd1:NKRPT -FP-' KE. lr<.is/ 向二nH 5P-.-I1- -. -|k % - -Ik , u. - 411. XWL1POWK FLIHM FnWft

8、K7 poab ru4八 h pasfAis PQ#AH PD7MX?RZJXAE ,上.M衲 F*M rzin FEMMZ F占MU R17H* PZ7«F=心演 F31IT® pjaiwirn m MITT rs.tfn msti PgtTTK pj.7.nrFFIT一 1 UTO :工lb a "TIT F3.输入错误:L6D+ 一?awr FmawuMS5EQR I-T口B2HWp-is.MT AHFUMADEPUWAGmPlWifiriiPUS'AKRSTPEJTj'i rJPT VtstPLWPTTpzanrHLhEr2sHCN&

9、;AzpjjffttfP1I3盟 nnxiiF 1.1rs in?i;PT P JJpjancP14p J gFijiPjiWp vpa.Tnrr.叩如二情?n&j5r'TIT 三1 WML - 1谀135 > j -L!G' .m7一。11一R2±!E :二;:u.fi新 7TT 1Z匕WK 1M 回 A,.VI3-i14r«TTF lam41- B-:惨肝Xif 2 二 |'' 户:、:;TIT F八、设计体会设计刚开始时,我感到茫然不知从何下手,对程序的总体思路也缺乏了解。后来在老师的指导下,渐渐有了思路知道大体的框架。之

10、后又参考了有关的书籍和资料,慢慢的经过两三周的时间才把程序调试好, 理清仿真图的出口与入口。 在仿真方面因为程序的思路都理清了, 所以只要按要求调用器件连接好电路, 并且与 KILL 软件进行互接,功能比较顺利的就实现了,没有出现太大的问题。设计很小, 可是在这过程中我学会了很多课本上学不到的知识。也明白书本的知识永远不够,我们自己要学会自学。同时对于学工科的学生还是要多多动手, 在调试硬件时很多东西是要靠经验来检查电路的问题, 而且动手经验也可以免去很多不必要的错误。七、设 计程序ORG 0000h;LJMP start;ORG 000bh中断T0入口地址LJMP intermit_t0;调

11、用中断服务程序清指示灯ORG 001bh中断T1入口地址LJMP intermit_t1;初始化喇叭ORG 0030h;start:MOV sp,#60h设栈底lcall sys_initialization;调用系统初始化程序5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5;主程序 main0:Icall strat_display液晶最初显示的程序main:MOV 52h,#0; 52h 判断输入错误次数储存地址setb led;使指示灯处于亮的状态setb tr0;开启定时器Icall key;扫描键值cjne

12、 a,#'A',next1;输入A设置密码LJMP set_passwor般置密码程序nextl: cjne a,#'B',next2输入 B 输入密码LJMP input_password; 输入密码程序next2: ajmp main; 系统初始化;sys_initialization:前led;使指示灯处于初始灭的状态clr open;继电器的初始化clr speaker喇叭的初始化MOV 34h,#'1'MOV 35h,#'2'MOV 36h,#'3'MOV 37h,#'4'MOV 38h,

13、#'5'MOV 39h,#'6'34h39h 存放初始密码MOV r7,#12;MOV r0,#40h设置新密码存储的首地址loop: MOV r0,#10h;inc r0;djnz r7,loop;密码键值存放区清零完毕lcall delay0_1s;MOV p0,#03h液晶的控制代码call write_instruction; 液晶软复位MOV p0,#01h;call write_instruction; 清屏MOV p0,#3fh;设置单片机与LCD接口数据位为8位;显示行数为 2 行,字型为 5*10call write_instruction;M

14、OV p0,#0fh;整体开显示,显示光标光标字符位烁call write_instruction;MOV p0,#06h光标右移整体显示不移动UnRegistered call write_instruction; 液晶初始化完毕MOV r4,#10;MOV tmod,#11h;MOV th0,#3ch;MOV tl0,#0b0h;setb ea;允许开中断setb et0;定时器T0, 0.5S定时中断初始化完毕 ret;系统初始化完毕中断服务程序intermit_t0: push acc;push psw;MOV th0,#3ch;MOV tl0,#0b0h;初值的设置MOV r4,#1

15、0;djnz r4,return;cpl led;return: pop psw;pop acc;reti;intermit_t1:push acc;push psw;MOV th1,#9eh;MOV tl1,#58h;初值设置djnz r4,return_t1;cpl led;cpl speaker;MOV r4,#10;return_t1:pop psw;pop acc;reti; 键盘扫描; ; ; ; ; ;; ; ; ; ; ; ;key: call ks调用行扫描程序jnz k1判断是否有按键按下,若A不等于0按键按下jmp key;A 等于零再次扫描取值k1: call dela

16、y调用延时子程序call ks调用扫描程序jnz k2;jmp key;k2: clr tr0;关闭计时器clr led;MOV r2,#0feh;行扫描初值为"0FE",从 0 行开始逐行扫描MOV r6,#00h设置行号初始值为"00"k3:MOV a,取行扫描字MOV p2a行扫描字送至P2 口MOV a,p2到P2取值jb acc.4,11判断A取列值,第0列有键按下吗?若;ACC.4=0说明有按键按下MOV a,#0;将第0列首号"00"送到ALJMP lk转至键号计算程序11: jb acc.5,12第1列有键按下吗?若

17、ACC.5=0说明有;按键按下MOV a,#4;将第1列首号"04"送到ALJMP lk转至键号计算程序12: jb acc.6,l3第2列有键按下吗?若ACC.6=0说明有按键按下MOV a,#8;将第2列首号"08"送到ALJMP lk转至键号计算程序jb acc.7,next_key第3列有键按下吗?若 ACC.7=0;说明有按键按下MOV a,#12;将第3列首号"12"送到Alk: add a,r6;按键号二行号+列首号(A)MOV r6,a;k4: call ks调用扫描子程序(等待按键释放)jnz k4;MOV a,r6

18、;MOV dptr,#table0;MOVc a,a+dptr;MOV 50h,a;查表取值存入50h,保护键值ret;next_key: inc r6 行号加 1MOV a,r2;行扫描字送至Ajnb acc.7,key判断4行都扫描完了UnRegisteredrl a;若未扫描完将行扫描字左移MOV r2a行扫描字送至R2,为扫描下一行做准备jmp k3;循环继续扫描下一行5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5ks: MOV p2,#0f0h送初彳1至U P2 口进行扫描,将列线P2.4P2.7设置为低电平MOV a,p2;将

19、扫描的值输入Axrl a,#0f0h;屏蔽与行按键无关的4位,有任意键按下时, A 不等于 0设置密码程序ret;5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5set_password:call clear_display调用LCD清零显示程序MOV dptr,#table4; 查表液晶显示'INPUT PASSWROD: 'call input_hint;LCD 显示要显示的信息MOV r0,#40h;输入密码的储存首地址call password调用原始密码jbc returnbit,set_passwor

20、d;先输入原密码完毕MOV r5,#6;MOV r0,#40h输入的密码的首地址MOV r1,#34h原始密码的首地址input_compere:MOV a,r0;xrl a,M;用异或进行比较输入密码和原密码jnz input_error; 输入密码与原密码不一致时跳至input_errorinc r0;inc r1;nop;nop;djnz r5,input_compere;验证输入密码完毕jmp set_password0;input_error:setb speaker蜂鸣器响setb led;指示灯亮call clear_display 清屏MOV dptr,#table5; 查表显

21、示'PASSWORD ERROR! 'call input_hint;call delay1_5s;clr speaker为蜂鸣器ck led;指示灯灭inc 52h;密码错误次数加1MOV a,52h;cjne a,#3,set_password;sjmp $;输入密码错误次数超过3 次, 锁死set_password0:call clear_display 清屏MOV dptr,#table2;显示设置密码信息call input_hint; 调用 LCD 显示程序MOV r0,#40h;call password输入密码显示程序jbc returnbit,set_pass

22、word; 第一次输入新密码完毕call clear_display 清屏MOV dptr,#table3;提示再次输入密码信息call input_hint;LCD 显示call delay1_5s延时;显示再次输入新密码完毕call clear_display 清屏MOV dptr,#table4;提示输入密码信息call input_hint; 调用 LCD 显示程序MOV r0,#46h;第二次输入密码的首地址call password;jbc returnbit,set_password; 第二次输入新密码完毕MOV r5,#6;MOV r0,#40h;MOV r1,#46h;set

23、_compere:MOV a,r0;xrl a,r1;jnz set_error;显示设置错误信息inc r0;inc r1;UnRegistereddjnz r5,set_compere;MOV 34h,40h;MOV 35h,41h;MOV 36h,42h;MOV 37h,43h;MOV 38h,44h;MOV 39h,45h;存入新密码完毕jmp main。;设置新密码成功,返主程序set_error:setb speaker蜂鸣器响setb led;指示灯亮call clear_display 清屏MOV dptr,#table5;call input_hint;call delay1

24、_5s;clr speaker蜂鸣器关ck led;指示灯灭LJMP set_password0前后两次输入新密码不一致,返回重设;输入密码开锁程序 input_password:call clear_display 清屏MOV dptr,#table4; 查表显示 'INPUTPASSWROD: 'call input_hint; 调用显示程序MOV r0,#40h;call password调用原密码jbc returnbit,input_password; 输入原密码完毕MOV r5,#6;MOV r0,#40h输入密码的首地址MOV r1,#34h原始密码的首地址inp

25、ut_compere0:MOV a,r0;xrl a,M;用异或判断输入密码是否与原始密码一样jnz input_error22; 判断密码有误inc r0;inc r1;nop;nop;djnz r5,input_compere0;验证输入码完毕jmp display_right;调用密码正确息 input_error22: setb speaker蜂鸣器响setb led;指示灯亮call clear_display 清屏MOV dptr,#table5;调用密码错误的显示信息call input_hint; 显示子程序call delay1_5s延时clr speaker蜂鸣器关ck l

26、ed;指示灯灭inc 52h;输入密码次数加1MOV a,52h;cjne a,#3,input_password;sjmp $;输入密码错误超过3 次,锁死display_right:call clear_display 清屏MOV dptr,#table6;密码正确显示信息call input_hint;显示输入密码正确提示完毕setb open; 开锁next_key1:call key;nop;nop;cjne a,#'F',next_key1;clr open; 按下关锁键,关锁jmp main0; 返回主程序主程序的子程序strat_display:MOV p0,#

27、80h第一行显示地址call write_instruction; 调用写指令程序MOV dptr,#table1;call input_hint; 调用显示子程序MOV p0,#0c0h第二行显示地址call write_instruction; 调用写指令程序MOV dptr,#table11;call input_hint; 调用显示子程序ret;clear_display:MOV display,#01h;LCD屏幕清零call write_instruction;MOV p0,#06h;call write_instruction;ret;input_hint:MOV r5,#16要

28、显示的字符个数(液晶行为16位)MOV a,#00h查询的初值 allornot:MOVc a,a+dptr;MOV display,a;call writedata;调用写数据inc dptr;clr a;nop;nop;djnz r5,all_or_not;ret;password:MOV r5,#6;密码个数MOV r1,#0c0h;LCD第二行显示地址MOV a,r1;MOV p0,a;call write_instruction; 调用 LCD 初始化程序loop1: call key;nop;nop;cjne a,#'C',next_to加果按键为 C时,按键标志为 1setb returnbit;2.0 位置一jmp endt;next_to:MOV a,50h;MOV r0,a;MOV display,#'*'a; 输入键盘的密码值显示为 "*"call wHtedata;调用写数据指令初始化程序inc r1;inc r0;djnz r5,loop1;endt: ret;写数据指令writedata: SETB磁择数据寄存器CLR rw选择写操作clr en;使能端初始化setb en;使能端置1nop;nop;clr en;call delay

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论