单片机原理及应用课程设计电子密码锁_第1页
单片机原理及应用课程设计电子密码锁_第2页
单片机原理及应用课程设计电子密码锁_第3页
单片机原理及应用课程设计电子密码锁_第4页
单片机原理及应用课程设计电子密码锁_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、课 程 设 计课 程 单片机原理及应用课程设计 题 目 电子密码锁设计 院 系 电子科学学院 专业班级 学生姓名 学生学号 指导教师 2011年3月 18 日课程设计任务书课程 单片机原理及应用课程设计题目 电子密码锁设计 专业班级 姓名 学号 一、设计目的:训练学生综合运用己学课程的基本知识,独立进行单片机应用技术开发工作,掌握单片机程序设计、调试,应用电路设计、分析及调试检测。二、设计要求:1. 应用mcs-51单片机设计电子密码锁电路;2. 电子密码锁电路选用8位控制,连续三次输入错误密码,密码锁输出报警信号,输入正确密码解除报警;3. 硬件设计根据设计的任务选定合适的单片机,根据控制对

2、象设计接口电路。设计的单元电路必须有工作原理,器件的作用,分析和计算过程;4. 软件设计根据电路工作过程,画出软件流程图,根据流程图编写相应的程序,进行调试并打印程序清单;5. 原理图设计根据所确定的设计电路,利用protel等有关工具软件绘制电路原理图、pcb板图、提供元器件清单。三、参考资料:1 单片微型计算机与接口技术,李群芳、黄建编著,电子工业出版社;2 单片机原理及应用,张毅刚编著,高等教育出版社;3 51系列单片机及c51程序设计,王建校,杨建国等编著,科学出版社;4 单片机原理及接口技术,李朝青编著,北京航空航天大学出版社;完成期限 2011.3.142011.3.18 指导教师

3、 专业负责人 2011年 3 月 13 日一、概述电子锁应用: 目前人们对与家庭的安全普遍都是使用防盗门,由于每个防盗门都需要钥匙进行开锁,对于房钥匙的管理,总是令人头疼。又要保证要用的人有钥匙,又要担心钥匙的丢失。由于管理钥匙的原因,经常人们因为丢失钥匙而造成不可估量的经济损失。如何更好的对家庭安全进行管理呢?只有对目前防盗门的锁进行改变,将目前的机械锁改变为电子锁。通过这种改进,除了可以方便的进出门,还能够加强房间的安全,方便自己允许的人进入。设计思路: 通过单片机管理外部输入的密码与内部设定密码的对应与否决定是否开关门。主要分成下面几个部分: 外部输入系统 门锁系统 at89c51主要器

4、件包括:at89c51、lcd1602、12m晶振、光电耦合器(扩展)、电阻若干、电容若干。主要模块:单片机最小系统、按键输入系统、lcd显示系统、光电耦合控锁系统(扩展)二、电路设计最小系统: 主要包括晶振电路与复位电路。按键系统: 主要包括按键电路与74ls11电路lcd显示系统:主要包括lcd显示电路与电位器调节偏压电路仿真电路图:三、器件评价at89c51:at89c51是一个低功耗,高性能cmos 8位单片机,片内含8k字节flash可擦写存储器(perom)。at89c52器件采用atmel公司的高密度、非易失性存储技术制造,兼容标准80c51和80c52指令集及引脚布局,at89

5、c52的片内flash允许程序存储器通过传统编程器反复编程。由于芯片内集成了通用8位中央处理器和flash存储单元,功能强大的微处理器atmel at89c52可为许多嵌入式控制应用系统提供高度灵活、高性价比的解决方案。 at89c51具有如下特点:8k bytes flash存储器、256 bytes的ram、32个i/o口、3个16位定时/计数器,6个中断优先级2层中断嵌套中断、1个全双工串行通信口、片内时钟振荡器。 此外,at89c52设计和配置了振荡频率可为0hz并可通过软件设置省电模式。at89c52在空闲模式下,cpu暂停工作,而ram、定时/计数器、串行口和外中断系统可继续工作,

6、掉电模式冻结振荡器并保存ram的数据,停止芯片其它功能直至硬件复位。lcd1602:1602液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”。 (1602显示地址)74ls11:74ls11是三与门芯片,一共有14个引脚,一共可以有3个输出,引脚图如下:四、程序设计lcm_rs bit p3.7 ;/定义接口lcm_rw bit p3.

7、6lcm_e bit p3.5lcm_data equ p1 ;数据接口jian equ p2 ;按键接口org 0000h ;从0000h处开始sjmp main ;跳转到main处org 0003h ;外部0中断ljmp jianweiorg 0030h ;主程序从0030h处开始main:mov sp,#70h ;初始化堆栈指针指向70hsetb ie0setb ex0mov r1,#00hmov r2,#00hmov r3,#00hmov r4,#00hmov r5,#00hmov r6,#00hmov ie,#81hlcall initial ;调用启动lcm子程序进行初始化lcal

8、l cls ;调用清除lcm子程序mov a,#80h ;向a送立即数80h设定显示地址为第一行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line1 ;将第一行字符串的启始地址送如dptr中lcall disp ;调用显示字符串到lcm子程序mov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line2 ;将第二行字符串的启始地址送如dptr中lcall disp ;调用显示字符串到lcm子程序mov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行

9、第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line3 ;将第三行字符串的启始地址送如dptr中lcall dispmov jian,#0f8hsetb easjmp $ ;程序动态停机initial: ;lcd初始化设定mov lcm_data,#01hacall write_rsmov lcm_data,#38hacall write_rsmov lcm_data,#0fhacall write_rsmov lcm_data,#06hretwrite_rs: ;写指令到lcm子程序clr lcm_eclr lcm_rsclr lcm_rwsetb lc

10、m_emov lcm_data,alcall delay1retwrite_data: ;写数据到lcm子程序clr lcm_esetb lcm_rsclr lcm_rwsetb lcm_emov lcm_data,alcall delay1retcls:mov a,#01h ;清除lcm子程序lcall write_rsretdisp: ;显示子程序push acc ;将a的内容压栈disp_loop: clr a ;a清零movc a,a+dptr ;查表将字符串内容送入ajz end_disp ;若查到的内容为0则终止查表lcall write_data ;调用写数据到lcm子程序inc

11、 dptr ;dptr加1指向下一个对象sjmp disp_loop ;跳转到disp_loop循环执行end_disp: pop acc ;弹出压栈内容至aretdelay1: ;延时子程序mov a,r6push accmov r6,#200 d1:mov r7,#248d2:djnz r7,d2djnz r6,d1pop accmov r6,aretjianwei: ;查询是否按键lcall delay1 ;软件去抖动mov p2,#0ffhclr p2.0jnb p2.5,key13jnb p2.4,key12jnb p2.3,key11setb p2.0clr p2.1jnb p2.

12、5,key23jnb p2.4,key22jnb p2.3,key21setb p2.1clr p2.2jnb p2.5,key33jnb p2.4,key32jnb p2.3,key31mov jian,#0f8hretikey33: ;jnb跳转地址不够,加入一个长跳转ljmp key333key32:ljmp key322key23:ljmp key233key31:ljmp key311key11:mov r0,#01hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line11lcal

13、l displcall savekey12:mov r0,#02hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line12lcall displcall savekey13:mov r0,#03hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line13lcall displcall savekey21:mov r0,#04hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行

14、第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line21lcall displcall savekey22:mov r0,#05hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line22lcall displcall savekey233:mov r0,#06hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序lcall displcall savekey311:mov r0,

15、#07hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line31lcall displcall savekey322:mov r0,#08hmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line32lcall displcall savekey333:mov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dpt

16、r,#line33lcall displcall quedingmov jian,#0f8hsave: ;将写入密码按顺序存放mov a,r1jz s1mov a,r2jz s2mov a,r3jz s3mov a,r4jz s4mov a,r5jz s5mov a,r6jz s6mov jian,#0f8hretis1:mov a,r0mov r1,amov jian,#0f8hretis2:mov a,r0mov r2,amov jian,#0f8hretis3:mov a,r0mov r3,amov jian,#0f8hretis4:mov a,r0mov r4,amov jian,#0

17、f8hretis5:mov a,r0mov r5,amov jian,#0f8hretis6:mov a,r0mov r6,amov jian,#0f8hretiqueding: ;确认键,输入密码与保存密码比较mov dptr,#passwordclr amovc a,a+dptrclr csubb a,r1jnz errclr ainc dptrmovc a,a+dptrclr csubb a,r2jnz errclr ainc dptrmovc a,a+dptrclr csubb a,r3jnz errclr ainc dptrmovc a,a+dptrclr csubb a,r4jnz

18、 errclr ainc dptrmovc a,a+dptrclr csubb a,r5jnz errclr ainc dptrmovc a,a+dptrclr csubb a,r6jnz errmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#neirong ;将留言符串的启始地址送如dptr中lcall disp ;调用显示字符串到lcm子程序mov r1,#00hmov r2,#00hmov r3,#00hmov r4,#00hmov r5,#00hmov r6,#00hmov r7,#00

19、hsss: djnz r7,sssmov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#line3 ;将第三行字符串的启始地址送如dptr中lcall dispretierr: ;密码错误程序mov a,#0c0h ;向a送立即数0c0h设定显示地址为第二行第一列lcall write_rs ;调用写指令到lcm子程序mov dptr,#cuowu ;将第二行字符串的启始地址送如dptr中lcall dispmov r1,#00hmov r2,#00hmov r3,#00hmov r4,#00hmov

20、 r5,#00hmov r6,#00hmov r7,#00hmov jian,#0f8hretiline1: db welcome ,00h ;第一行字符串line2: db use ,00h ;第二行字符串line3: db input password ,00h ;输入密码password: db 03h,08h,03h,02h,02h,04h ;软件设置密码neirong: db your message ,00h ;输入留言cuowu: db sorry wrong ,00h ;错误提示信息line11: db this is key 1 ,00hline12: db this is

21、key 2 ,00hline13: db this is key 3 ,00hline21: db this is key 4 ,00hline22: db this is key 5 ,00hline23: db this is key 6 ,00hline31: db this is key 7 ,00hline32: db this is key 8 ,00hline33: db sure? ,00h五、心得体会 熟悉lcd1602的初始化,最重要的是要熟悉lcd1602的使能位e,早期写的程序总是不能实现其功能,在于忽略了lcd是在e从低到高开始执行,而在从高到低这段时间中才是运行其功能的时间段。所以对lcd1602的熟练使用在于熟悉它的时序图。 按键扫描采用的是外部0中断后进行扫描,运用了一片74ls11芯片。查键程序主要是两个思路:1. 中断后赋予键值,延时一段时间,再回键值,判断是否改变并决定是否堆栈。再根据读回的键值跳转到相应的程序。2. 中断后依次拉低列向电平,判断行向电平是否被拉低而进行跳转。第一次我们采用的是第一种方法,其缺点比较明显,键值的计算比较繁琐,而且程序也比较冗余。相比第二种方法要来的简单。所以个人建议以后查询按键可以按第二种思路。 延时的选择有总体上说两种,一种是采用内

温馨提示

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

评论

0/150

提交评论