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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

电子密码锁设计.docx

1、电子密码锁设计成 绩 评 定 表学生姓名班级学号专 业计算机科学与技术课程设计题目电子密码锁评语 组长签字: 成绩日期 2013年1月 12日 课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生姓名班级学号课程设计题目电子密码锁设计实践教学要求与任务:1 学习Proteus仿真系统下的原理图设计方法和系统仿真调试方法;2 学习使用Protel99SE软件绘制电路原理图和线路版图;3 掌握简单的51单片机应用系统的软硬件设计方法;4 在Keil51开发环境下,采用51汇编语言或C51语言编写实现程序。具体任务如下:(1)通过检索、查资料和研究学习,设计应用系统原理图;(2)编写电子

2、密码锁应用系统程序;(3)软硬件仿真调试,实现应用系统设计目标;(4)写出设计总结报告。 工作计划与进度安排: 第1619周:布置课程设计任务,查阅资料,分组设计原理图,编写程序代码。 第20周:系统仿真调试,验收,答辩,编写课程设计报告。指导教师: 2013年1月12日专业负责人: 2013年1月12日学院教学副院长: 2013年1月12日目录1题目设计的要求 42 系统的组成及工作原理 42.2 主控制器 42.3 LCD1602的指令格式 52.4 24C04 EEPROM存储器芯片 62.4.1 SCL串行时钟 72.4.2 SDA 串行数据/地址 72.4.3 A1, A2器件地址输

3、入端 72.4.4 WP写保护 73 Protel99SE下的线路原理图的设计 94 系统软件设计 104.1 程序流程 104.1.1 主程序流程 104.1.2 子程序流程图 104.2 Uvision4开发平台下的程序代码 115 系统仿真调试 205.1 Proteus下的仿真原理图设计 205.2 程序代码链接与仿真运行过程 215.3仿真运行结果 226总结与心得 247参考资料 24 1题目设计的要求利用51单片机和1602字符LCD设计电子密码锁,实现6位密码的设置,修改,输入,状态显示等功能。完成以下设计环节: 1)使用protel99SE开发工具,设计电路原理图 2)使用U

4、vision4开发平台,采用C语言或汇编语言设计软件程序。 3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。2 系统的组成及工作原理2.1系统的组成及工作原理AT89C51,1602字符LCD, EEPROM存储器芯片24C04A, respack-8排阻,LED黄色提示灯,发声器。以AT89C51为主控芯片作为密码数据的传输;LCD1602为显示屏,用于提示用户输入输出信息;显示利用单片机的读写控制,扩展电路等功能部件设计电子密码锁。(1)系统设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。(2)密码由用户自己设定,在开锁状态下,用户可自行修改密码。(3)

5、具有自动报警功能,系统工作时,用户通过按键输入6位密码,若密码不正确,则要求重新输入密码,重新输入密码的次数不能超过3次,若三次输入的密码都不正确,则发出报警信号。2.2 主控制器AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输

6、出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。T89C2051的一些特殊功能口如下所示: p1口引脚 :reshuffle功能 p1.0 : T2(定时器T2外部输入) p3口引脚 P3.0 :RXD(串行出入口) P3.1:TXD(串行输出口) P3.2 :INTO(外部中断0) P3.4:INT1(外部中断1) P3.5:T0(定时器1外部输入) P3.6:WR(外部数据存储器写选通) P3.7:RD(外部数据存储器读选

7、通)AT89C51引脚图如图2.1图2.12.3 LCD1602的指令格式1.清屏指令功能: 清除液晶显示器,即将DDRAM的内容全部填入空白的ASCII码20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为0。2.光标归位指令功能: 把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为0; 保持DDRAM的内容不变。3.进入模式设置指令功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的 情况如下所示: 位名 设置 I/D 0=写入新数据后光标左移 1=写入新数据后光标右移 S 0=写入新数据后显示屏不移动 1=写入

8、新数据后显示屏整体右移1个字符4.显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下: 位名 设置 D 0=显示功能关 1=显示功能开 C 0=无光标 1=有光标 B 0=光标闪烁 1=光标不闪烁5.设定显示屏或光标移动方向指令功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下: S/C R/L 设定情况 0 0 光标左移1格,且AC值减1 0 1 光标右移1格,且AC值加1 1 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动6.功能设定指令功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名

9、 设置 DL 0=数据总线为4位 1=数据总线为8位 N 0=显示1行 1=显示2行 F 0=57点阵/每字符 1=510点阵/每字符7.设定CGRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。8.设定DDRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。9.读取忙信号或AC地址指令功能: 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令; 读取地址计数器(AC)的内容。10.数据写入DDRAM或CGRAM指令一览功能: 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;

10、将使用者自己设计的图形存入CGRAM。11.从CGRAM或DDRAM读出数据的指令一览功能:读取DDRAM或CGRAM中的内容。2.4 24C04 EEPROM存储器芯片本设计中为了在系统掉电时能够保存系统的设置密码,使用了具有IC总线接口的E2PROM的24C04芯片保存密码锁的密码。仿真器件符号如图34.1所示:图 34.12.4.1 SCL串行时钟 AT24C04 串行时钟输入管脚用于产生器件所有数据发送或接受的时钟,这是一个输入管脚。2.4.2 SDA 串行数据/地址 AT24C04双向串行数据/地址管脚用于器件所有数据的发送或接受,SDA是一个开漏输出或集电极开路输出进行线或(wir

11、e-OR)。2.4.3 A1, A2器件地址输入端 这些输入脚用于多个级联时设置器件地址,当这些脚悬空默认值为0.当使用 AT24C02时最大可级联8个器件,如果只有一个 AT24C04总线寻址,这两个地址输入脚(A1, A2)可悬空或链接到Vss,如果只有一个AT24C04总线寻址这两个地址输入脚(A1, A2)必须连接到Vss。2.4.4 WP写保护 如果WP连接到Vcc,所有的内容都被写保护只能读。当WP管脚连接到Vss或悬空容许器件进行正常的读/写操作。2.5矩阵键盘的设计密码的输入用44键盘来实现,由09数字和开锁,上锁,输入新密码,保存新密码,重新输入的功能键组成,还有一个按键未定

12、义。在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段,还要对按键进行消抖处理。当确认有按键按下后,就要识别是哪一个按键被按下。本次设计使用的是线反转法。给行线置为0x0f,给列线置为0xf0,再将行列进行逻辑或结果为0xff,当有按键按下时相应的按键位行列均为0,行列逻辑或不为0xff,由此可利用行列逻辑或后的值是否为0xff来判断是否有按键按下。再根据扫描结果判断按下键的位置。给相应的按键赋值即可实现数字键和功能键。对功能键进行相应的软件编程即可实现按键功能。若有按键被按下时,就将该按键译码出来,本设计采用双重循环做计数编号,当某一按键按下时,其

13、按键编号便是计数编号,有关按键编号,扫描信号及读取按键数据返回码整理如表4。编号按键数据输入码P1.7 P1.6 P1.5 P1.4扫描输出信号P1.3 P1.2 P1.1 P1.0所侦测的按键01 1 1 01 1 1 0K0 键11 1 0 11 1 1 0K1 键21 0 1 11 1 1 0K2 键30 1 1 11 1 1 0K3 键41 1 1 01 1 0 1K4 键51 1 0 11 1 0 1K5 键61 0 1 11 1 0 1K6 键70 1 1 11 1 0 1K7 键81 1 1 01 0 1 1K8 键91 1 0 11 0 1 1K9 键101 0 1 11 0

14、1 1K10 键110 1 1 11 0 1 1K11 键 表4数码管显示部分如图2.5图2.53 Protel99SE下的线路原理图的设计图4.14 系统软件设计4.1 程序流程4.1.1 主程序流程图51.14.1.2 子程序流程图(1)键盘扫描流程图,如图51.2 图51.2 图51.3(2)开锁子程序流程图,如图51.3(3)上锁子程序流程图,如图51.4图51.4 图51.5(4)输入新密码子程序流程图,如图51.5(5)保存新密码子程序流程图,如图51.64.2 Uvision4开发平台下的程序代码#include#include#include#define uchar unsi

15、gned char#define uint unsigned int#define LCDIO P0#define delay4us() _nop_();_nop_();_nop_();_nop_();uchar buffer6=0; sbit sda=P33;sbit scl=P32;sbit beep=P37;bit flag=0,aa; /用户蹲渊义定时溢出标志位uchar DSY_BUFFER16= ;uchar DSY_BUFFER116= ;uchar Userpassword6=0;sbit rs=P20; sbit rd=P21;sbit lcden=P22;sbit led=

16、P27;uchar code table2=654321;uchar code table=Your Password.;void delayms(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void delay() /短延时,两个机器周期,做总线的延时用;void write_com(uchar com) rs=0; rd=0; lcden=0; P0=com; delayms(3); lcden=1; delayms(3); lcden=0; void write_date(uchar date) rs=1; rd=0; lcden=

17、0; P0=date; delayms(3); lcden=1; delayms(3); lcden=0; void Display_String(uchar *p,uchar com) uchar i; write_com(com); for(i=0;i16;i+) write_date(pi); void init_lcd() lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); Display_String(table,0x80); Display_Str

18、ing(Lock OK! ,0xc0);void start() sda=1; scl=1; delay4us(); sda=0; delay4us(); scl=0;void stop() sda=0; scl=1; delay4us(); sda=1; delay4us(); scl=0;void init() /初始化sda=1;delay();scl=1;delay();void ack() sda=0; scl=1; delay4us(); scl=0; sda=1;void noack() sda=1; scl=1; delay4us(); scl=0; sda=0;uchar r

19、ecbyte() uchar i,rd; rd=0x00; sda=1; for(i=0;i8;i+) scl=1; rd=1; rd|=sda; delay4us(); scl=0; delay4us(); scl=0; delay4us(); return rd;uchar sendbyte(uchar wd) uchar i; bit ack0; for(i=0;i8;i+) sda=(bit)(wd&0x80); _nop_(); _nop_(); scl=1; delay4us(); scl=0; wd=1; delay4us(); sda=1; scl=1; delay4us();

20、 ack0=!sda; scl=0; delay4us(); return ack0;uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) uchar i; start(); if(!sendbyte(slave) return 0; if(!sendbyte(subaddr) return 0; start(); if(!sendbyte(slave+1) return 0; for(i=0;in-1;i+) bufferi=recbyte(); ack(); buffern-1=recbyte(); noack()

21、; stop(); return 1;uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) uchar i; start(); if(!sendbyte(slave) return 0; if(!sendbyte(subaddr) return 0; for(i=0;in;i+) if(!sendbyte(bufferi) return 0; stop(); return 1;void clear_password() uchar i; for(i=0;i6;i+) Userpasswordi= ; for(i=0;

22、i40x0F; switch(temp) case 1:keynum+=0;break; case 2:keynum+=4;break; case 4:keynum+=8;break; case 8:keynum+=12;break; break; delayms(600); return keynum;void main() uchar temp,i=0,j=0,k=0,n; uchar IS_valid_user; beep=0; init(); init_lcd(); delayms(5); aa=Sendstring(0xa0,1,table2,6); delayms(5); aa=R

23、ecstring(0xa0,1,buffer,6); delayms(10); P1=0x0f; while(1) if(P1!=0x0f) temp=Keys_Scan(); switch(temp) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if (i=5) /密码限制在6位以内 Userpasswordi=temp; DSY_BUFFERi=*; Display_String(DSY_BUFFER,0xc0); i+; break; case 10: /按A键开锁 for

24、(k=0;k6;k+) if(bufferk=(Userpasswordk+48) flag=1; else flag=0; if (flag=1) flag=0; i=0; led=0; /点亮LED clear_password(); Display_String(OPEN OK! ,0xc0); IS_valid_user = 1; j=0; else j+; led=1; /关闭LED clear_password(); Display_String(ERROR!Have try ,0xc0); write_com(0xcf); write_date(0x30+j); IS_valid

25、_user=0; i=0; break; case 11: /按B键上锁 led=1; clear_password(); Display_String(table,0x80); Display_String(Lock OK! ,0xc0); i=0; IS_valid_user=0; break; case 12: /按C键设置新密码 /如果是合法用户则提示输入新密码 if ( !IS_valid_user) i=0; Display_String(No rights ! ,0xc0); delayms(1000); Display_String(Your Password.,0x80);

26、Display_String(Lock OK! ,0xc0); else i=0; Display_String(New Password: ,0x80); Display_String( ,0xc0); break; case 13: /按D键保存新密码 if ( !IS_valid_user) i=0; Display_String(No rights ! ,0xc0); delayms(1000); Display_String(Your Password.,0x80); Display_String(Lock OK! ,0xc0); else i = 0; init(); delayms(5); for(k=0;k6;k+) Userpasswordk=Userpasswordk+48; aa=Sendstring(0xa0,1,Userpassword,6); delayms(5); aa=Recstring(0xa0,1,buffer,6); delayms(5); clear_password(); Display_String(table,0x00); Display_String(Password Saved!

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

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