课程设计任务书学院新华学院专业计算机科学与技术小组成员马欢赵雅琴苏德军卢银蕊成员分工编写程序:马欢赵雅琴设计电路图:苏德军卢银蕊课程设计题目电子密码锁设计实践教学要求与任务:要求:利用51单片机、24C04与1602LCD设计电子密码锁,实现简单的功能。完成以下设计环节:1)使用Proteus7Professional仿真软件,设计仿真原理图并运行程序,完成系统仿真。2)使用keiluvision4开发平台,采用C语言设计软件程序。工作计划与进度安排:第14周:布置课程设计任务,查阅资料,分组设计与调试。第17周:调试,验收,答辩,编写课程设计报告。指导教师:年月日专业负责人:年月日学院教学副院长:年月日1目录1.系统功能概述………………………………………22.开发平台简介………………………………………22.1系统仿真平台Proteus…………………………………22.2软件开发平台KeilC……………………………………23.系统硬件结构设计…………………………………33.1总体设计…………………………………………………33.2各模块设计………………………………………………44.软件设计……………………………………………74.1主函数模块设计…………………………………………74.2各子函数模块设计………………………………………95.系统仿真运行结果…………………………………116.结论…………………………………………………137.参考文献……………………………………………138.附录…………………………………………………1421.系统功能概述系统采用美国Atmel公司的AT89C51单片机作为系统核心,液晶显示器LCD1602作为输出设备显示系统提示信息,4*4矩阵薄膜键盘作为输入设备,用存储器24c04进行存储密码锁的密码,当用户输入的密码与存储器储存的密码相同时,即可开锁成功,若不相同,则不能开锁,并提示密码错误。系统软件采用C语言编写。设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值2.开发平台简介2.1系统仿真平台ProteusProteus软件是英国Labcenterelectronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Protues提供了丰富的资源:仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标。另外Proteus还提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。在Protues中进行电路仿真时,先绘制好原理图,再调入已编译好的目标代码文件:*.HEX,随后便可在PROTEUS的原理图中模拟的实物运行状态和过程,进行观察从而改良自己的设计方案。操作简单,非常适合初学者进行单片机的仿真,进而了解其原理,增强实践。2.2软件开发平台KeilCKeiluVision2是德国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大3的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。3.系统硬件结构设计3.1总体设计图3-1系统结构框图AT89C51键盘输入模块LCD显示模块密码存储模块蜂鸣器时钟电路模块4图3-2硬件原理图总体设计思路:本设计利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储。其中,0-9为用户可以输入密码可选择的数字,10号功能为开锁键,11号功能为上锁,12号功能为输入修改后的密码,13号功能为保存密码,14号功能为重新输入。利用LCD来显示提示信息。3.2各模块设计3.2.1AT89C51模块AT89C51P1口通过连接1个矩阵键盘,作为密码输入和功能选择按键;P0口接LCD1602的8位数据通信线;P2.0,P2.1,P2.2接LCD控制端;P3.2和P3.3接24C04。5图3-3AT89C51引脚图3.2.2键盘输入模块使用矩阵键盘,本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,其原理如图。本设计中矩阵键盘接在单片机的P1口。每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要4条行线和4条列线,即可组成具有4×4个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别是常用的逐行扫描查询法。图3-44*4矩阵键盘63.3.3LCD1602本系统设计的显示电路是为了给使用者以提示而设置的。本系统的显示采用了LCD1602作为显示模块,其能够同时显示16x02即32个字符。LCD在系统中,其D0-D7引脚分别接单片机的P0口、VSS和VDD分别接电源和地线、VEE为液晶亮度调节按钮(可接电位器)、RS为数据或命令的选择端接P2.0、RW为读写的选择端接P2.1、E为使能信号接P2.2。如图所示。图3-5LCD16023.3.4密码存储模块本设计中为了在系统掉电时能够保存系统的设置密码,使用了具有I2C总线接口的E2PROM的24C04芯片来保存密码锁的密码。SCL串行时钟AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。DA串行数据/地址AT24C02双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线。A0、A1、A2器件地址输入端这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。当使用AT24C02时最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2)可悬空或连接到Vss,如果只有一个AT24C02被总线寻址这三个地址输入脚(A0、A1、A2)必须连接到Vss。WP写保护如果WP管脚连接到Vcc,所有的内容都被写保护只能读。当WP管脚连接到Vss或悬空允许器件进行正常的读/写操作。图3-624C0473.3.5时钟电路模块时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进行的,如果单片机的时钟电路停止工作(晶振停振),那么单片机也就停止运行了。当采用内部时钟时,连接方法如下图所示,在晶振引脚XTAL1(19脚)和XTAL2(18脚)引脚之间接入一个12MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十皮法。C1C2Y1XTAL1XTAL2图3-7时钟电路图4.软件设计4.1主函数模块设计设计思路:电子密码锁工作的主要过程是LCD提示开始选择操作功能(选择开锁还是更改密码),通过10号键盘开锁,13号14号进行密码的修改与保存。当用户选择开锁时,通过键盘输入开锁密码。如果密码输入正确,则LCD提示密码正确、LED灯亮表示开锁。如果密码输入错误则LCD提示密码错误。当用户选择更改密码功能时,要求用户先输入当前密码。当密码正确时LCD提示用户进一步操作。单片机向24C04写入新密码,否则提示错误并返回初状态。8图4-1系统程序流程图开始功能键盘扫描检测子程序提示密码修改成功将新密码写入24C02提示输入新密码清单片机RAM密码暂存区LCD用*动态提示已输入数字提示输入开锁密码提示输入旧密码将已输入的数字暂存与单片机RAM判断旧密码是否正确和24C04里密码比较输入开锁还是改密码结束LED亮解锁改密错误正确相同不同94.2各子函数模块设计4.2.1键盘扫描子函数模块图4-2键盘扫描程序流程图4.2.2LCD子函数模块开始判按键,编码入栈保护调用12ms延时子程序调用6ms延时子程序编码有键按下否?返回有键按下否?按键释放否?是否否是是否10图4-3LCD输出程序流程图4.2.324C04子函数模块图4-4密码存储程序流程图开始LCD显示向24c04写密码初始化24c04与初始化密码比较是否相同?结束否是开始输出显示向LCD写数据初始化LCD检测是否繁忙?结束是否115.系统仿真运行结构图5-1程序开始运行图5-2输入密码开锁12图5-3输入新密码图5-4保存新密码13图5-5输入错误密码图5-6连续三次输入错误密码6.结论课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领14域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,至今我仍感慨颇多,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。7.参考文献[1]李群芳张士军黄建《单片微型计算机与接口技术》电子工业出版社[2]谭浩强《C语言程序设计》清华大学出版社2005[3]谢维成杨家国《单片机原理与应用及C51程序设计》清华大学出版社20098.附录#includereg51.h#includestring.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#defineLCDIOP0#definedelay4us()_nop_();_nop_();_nop_();_nop_();ucharbuffer[6]={0};sbitsda=P3^3;//数据线sbitscl=P3^2;//时钟线sbitbeep=P3^7;//蜂鸣器bitflag=0,aa;//用户自定义定时溢出标志位ucharDSY_BUFFER[16]=;ucharDSY_BUFFER1[16]=;ucharUserpassword[6]={0};sbitrs=P2^0;//rsrd决定选择哪一个寄存器sbitrd=P2^1;sbite=P2^2;15sbitled=P2^7;ucharcodetable2[]=654321;ucharcodetable[]=YourPassword...;voiddelayms(uintz)//延时1毫秒{uintx,y;for(x=z;x0;x--)for(y=110;y0;