1、说 明 书 格 式 1.封面 2.课程设计任务书 3.目录 4.系统总体方案设计 5.系统硬件设计 6.软件设计(包括流程图)7.系统的安装调试说明 8、总结 9、参考文献 10、附录(源程序清单及硬件原理图等);11、课程设计成绩评分表。进 度 安 排 设计时间为两周 第一周 星期一、上午:布置课题任务,讲课及课题介绍 下午:借阅有关资料,总体方案讨论 星期二、确定总体设计方案 星期三、硬件模块方案设计 星期四、软件模块方案设计 星期五、设计及调试 第二周 星期一、设计及调试 星期二、设计及调试 星期三、总调 星期四、写说明书 星期五、上午:写说明书,整理资料 下午:交设计资料,答辩 参 考
2、 文 献 1、微型计算机原理及应用许立梓编 机械工业出版社 2002 2、微型计算机接口技术及应用刘乐善编 华中理工大学出版社 2000 3、计算机硬件技术基础试验教程邹逢兴编 高等教育出版社 2000 4、16位微型计算机原理接口及其应用周佩玲编 中国科学技术大学出版社 2000 5、微型计算机原理与接口技术吴秀清编 中国科学技术出版社 2001 6、微型计算机接口技术邓亚平编 清华大学出版社 2001 7、单片机原理及及应用王迎旭编 机械工业出版社 2001 8、单片机应用程序设计技术 周航慈 著 北京航空航天大学出版社 2002 9、单片机实用技术问答 谢宜仁 主编 人民邮电出版社 20
3、02 目 录 第 1章 概述 1 1.1 设计内容:1 1.2 设计要求:1 1.3主要设计条件:1 第 2章 系统总体方案设计 2 2.1单片机系统:2 2.2矩阵键盘接口电路:2 2.3 数码管显示:2 2.4 开锁提示 2 第 3章 硬件电路设计 4 3.1 键盘电路设计 4 3.2 数码管显示电路设计 5 3.3开锁机构设计 5 第 4章 软件设计 6 4.1 软件总体设计 6 4.2 各子程序的设计 6 4.3密码比较及对错处理9 第 5章 实物连接效果图 10 5.1正确输入密码实物图.10 5.2正确密码时按下确认键实物图.11 5.3输入错误密码实物图.11 5.4错误密码时按
4、下确认键的实物图11 设计总结 12 参考文献 13 附录 14 附录 1 源程序清单 14 附录 2 硬件原理图 18 第 1章 概述 在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。为满足人们对锁的使用要求,用密码代替钥匙的密码锁应运而生。此次关于智能密码锁的单片机课程设计内容及要求如下:1.1 设计内容:(1)密码的设定,此密码是固定在程序存储器 ROM 中,假设预设的密码为“11111111”共 8位密码。(2)密码的输入:(3)
5、按键禁止功能:初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在 3 次密码输入不正确的情况下发生的。1.2 设计要求:(1)设计方案要合理、正确;(2)系统硬件设计及焊接制作;(3)系统软件设计及调试;(4)系统联调;第 2章 系统总体方案设计 本次密码锁采用了键盘读入数据,数码管显示读入密码,P10 led 作为开锁提示标志。密码为固定在 rom 中的 8个 1 组成的密码,当在键盘读入时,输入密码会依次显示在数码管上,当输入密码与固有密码相同时,密码正确,P10 led 点亮,表示锁开,当输入密码与固有密码不相同时,P10 led 不会
6、点亮,即锁不会打开,当 3次输入密码与固有密码不相同时,则会启动禁止键盘读入密码功能。这样就组成了智能密码锁。2.1单片机系统:单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机、时钟电路、复位电路等组成。为了简化电路、降低成本、提高可靠性,本系统采用 AT89C54 作为主控制器。利用单片机灵活的编程设计和丰富的 I/O端口,及其控制的准确性,进行智能密码锁的设计。此次课题用单片机 P3 口与键盘相连,做输入口,P0口与显示器相连,做显示,P2 口做显示器扫描,键盘 16号键为确认键。单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种
7、电路形式得到:内部振荡和外部振荡。由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,这次课题采用内部方式进行定时计数。2.2矩阵键盘接口电路:此次课程设计采用 4*4矩阵键盘,4行 4 列分别与 P3口相连,采用行列反转扫描法。设有 0E15个数字密码,和,1个功能键。15个数字键用来输入密码,F键功能键用来确认。2.3 数码管显示:此次课程设计设置 8位密码,按键后数码管显示器显示,采用动态显示。P0口送显示数据,P2口显示扫描,根据按键顺序,显示器第一位显示第一次按的密码,第二位显示第二次按的密码,依此类推第 8位显示第 8次按的密码,按键完成后按确认键后,系
8、统进行密码比较密码对则执行开锁动作,对应的发光二极管亮。2.4开锁提示:当输入密码和固有密码相同时,将点亮 P10 LED 灯,否则熄灭,当 3次输入的密码都与固有密码不同时,将锁定键盘,不再读入数据。第 3章 硬件电路设计 3.1 键盘电路设计 3.1.1矩阵式键盘电路如图 3.1:图 3.1 4x4 矩阵键盘 3.1.2矩阵式键盘工作原理:在键盘中按键数量较多时,为了减少 I/O口的占用,通常将按键排列成矩阵形式,如图 3.1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如 p3 口)就可以构成 4*4=16 个按键,比之直接将端口线
9、用于键盘多出了一倍,而且线数越多,区别越明显,在需要的键数比较多时,采用矩阵法来做键盘。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,图 3.1 中,如果将行线扫描为全 0,当按键没有按下时,所有的列线都是高电平,代表无键按下。一旦有键按下,则列线就会被拉低。这样,通过读入列线的状态就可得知是否有键按下了。3.1.3 矩阵式键盘的识别方法:确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示。判断键盘中有无键按下具体步骤如下:(1)先将列线 p3.7-p3.4 置 0111,然后检测行线的状态。如果 p3.3-
10、p3.0 为 0111,则k0 被按下;如果 p3.3-p3.0 为 1011,则 k1被按下;如果 p3.3-p3.0 为 1101,则 k2被按下,如果 p3.3-p3.0 为 1110,则 k3被按下。(2)以此类推,对键盘进行循环扫描,实现对键盘的读入数据。3.2 数码管显示电路设计 3.2.1.数码管显示电路图:图 3.2 LED显示电路 3.2.2 数码管显示原理:LED发光二极管显示器是一种当外加电压加在发光二极管上可产生可见光的器件它适用于在光线暗的环境中使用。显示器显示接口按驱动方式可分为静态显示和动态显示,静态显示时,除变更显示数据期间外,各显示器均处于通电显示状态,每个显
11、示器的通电占空比约为 100%,静态显示的优点是显示稳定,亮度高,缺点是占用硬件电路多;动态显示时,N个显示器共占用一个显示数据驱动器,每个显示器通电占空比时间为 1/N,动态显示的优点是节省硬件电路,缺点是采用软件扫描时占用 CPU 时间多。对于多位 LED显示器,通常都是采用动态扫描的方法进行显示,即逐个地循环点亮各位显示器,这样虽然在任一时刻只有一显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果完全一样。为了实现 LED显示器的动态扫描,除了给显示提供段(字形代码)的输入之外,还有对显示器选择位的控制,这就是通常所说的段控和位控。因此,多位 LED显示器接口电路
12、需要有两个输出口,其中一个用于输出 8 条段控线,另一个用于输出位控线,位控线的数目等于显示器的位数。3.3开锁机构设计 信号通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的,其原理如图 3.3所示:图 3.3 密码锁开锁机构示意图 当用户输入的密码正确,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的,此次设计无电磁锁,利用一个发光二极管来代表门锁,亮表示锁开,灯灭表示锁合。第 4章 软件设计 4.1 软件总体设计 软件的设计主要包括:主程序、密码的固定、键盘识别判断、密码比较、密码对错处理。主程序主要完成初始化、检查有无按键按下、密码比较等等。主程序
13、模块如图 4.1所示:图 4.1 主程序模块 4.2 各子程序的设计 4.2.1 延时程序:void delay(uint i)/延时函数 while(i-);4.2.2调用显示程序:for(x=0;x8;x+)/按键显示 P2=x;P0=dispx;delay(10);此显示程序依次显示输入密码,当 x=0 时,P2=000;第一位数码管显示 disp0值,即第一位密码值,经过 for循环后,显示 8 位输入密码。4.2.3密码比较程序:for(n=0;n8;n+)dispn=0;/清显示 m=8;for(d=0;d8;d+)if(keywd!=passwd)f=1;if(f=1)/密码错,
14、闭锁 led=1;f=0;t=t-1;else led=0;当确认信号有效时,执行密码比较程序,首先清显示,8 位数码管都不显示数据,然后进行密码比对,一个 for循环后,对 8位密码进行 8 次比对,只要有一次不同,f则等于 1,执行 led=1,即密码错误,led熄灭。否则 led亮,密码正确。4.2.4键盘扫描程序:uchar keyscan()uchar cord_h,cord_l;/行列值 P3=0 x0f;/列线输出全为 0,扫描行 cord_h=P3&0 x0f;/读入行线值 if(cord_h!=0 x0f)/先检测有无按键按下 delay(100);/去抖 if(cord_h
15、!=0 x0f)led=1;/有按键按下闭锁 cord_h=P3&/读入行线值 P3=0 xf0;/行线输出全为 0,扫描列 cord_l=P3&0 xf0;/读入列线值 do/等待键释放 P3=0 x0f;x+)/按键显示,延时 P2=x;del=P3;while(del!=0 x0f);return(cord_h+cord_l);return(0 xff);/返回该值 确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。先将列线 p3.7-p3.4 置 0111,然后检测行线的状态。如果 p3.3-p3.0为 0111,则 k0
16、被按下;如果 p3.3-p3.0 为 1011,则 k1 被按下;如果 p3.3-p3.0为 1101,则 k2被按下,如果 p3.3-p3.0 为 1110,则 k3被按下。以此类推,对键盘进行循环扫描,实现对键盘的读入数据。4.2.5密码组成程序:if(key!=0 xff)for(j=0;j15;j+)if(key=keydj)dispm-1=segj;keywm-1=keydj;当有按键按下后,经过 for循环 15次后,检测是按下第几号建,然后依次放入keywm-1中,组成一个 8位的输入密码。4.3 密码比较及对错处理:密码输入完成之后,进行密码比较,即将设定密码 11111111
17、 与输入密码进行一一比较,如果相同,则密码正确,P10 置低电平,发光二极管亮,开锁,如果密码错误,重新等待输入密码,如果三次错,将会启动禁止键盘读入数据功能。第 5章 实物连接效果图 单片机应用系统的调试,包括硬件调试和软件调试两部分,软件调试是设计一个很重要的环节。硬件调试和软件调试并不能完全分开,许多软件错误都是在硬件调试过程中被发现和纠正的。5.1正确输入密码实物图:图 5.1 输入密码后数码管显示 图 5.1是未按确认建时的 8 位输入密码。5.2正确密码时按下确认键实物图:图 5.2 正确密码时 LED亮 图 5.2是正确密码时按下确认键,led灯亮,即 P10=0,开锁。5.3输
18、入错误密码实物图:图 5.3错误密码显示 图 5.3显示的是随机输入的错误密码,未按下确认键。5.4错误密码时按下确认键的实物图:图 5.4 LED灭 图 5.4显示的是错误密码下按下确认键后的实物图,led没有亮,即 P10=1,闭锁。设计总结 两星期的单片机原理与应用课程设计结束了,我学到了很多同时认识到自己所学知识的不足,以前学习书本知识都只是用来应付考试的,现在感觉到了知识的灵活性和实用性,设计过程中遇到这样那样的问题,有的通过看书或者仔细研究能弄懂,有的东西从来没学过或是学的时候只是学到了皮毛,似懂非懂,用到实际上来确实比较困难,比如矩阵键盘的扫描,微机接口和单片机原理上课的时候只是
19、粗略的讲了一下行扫描法的最简单的实现方法,智能密码锁需用到 4x4 矩阵键盘的扫描,原理我还是懂的,具体到编程我就遇到困难了,怎么样让程序一直在执行键盘扫描,不断调用显示,变量与存储空间的分配问题等。这些问题都需要重新学习,慢慢解决,程序编译后进行仿真的时候会出现原本意料不到的问题,跟自己想象的调试结果完全不一样,只能联系现象回到程序中去寻找相关问题,一直在执行编译与调试的步骤,知道出现理想的结果为止。不少同学一起讨论相互帮助,解决问题,解决不了的问题找别人帮忙或是找老师解答,能学到不少自己欠缺的东西。课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,
20、是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。课程设计是结束了,不过学习单片机知识的过程还没有终结,探索学习的奥妙,培养学习的兴趣,养成良好的学习习惯对我们来说才是最重要的,学习不仅仅是学习书本知识,不是为了学习本身而去学习,方法很重要,以后要更加努力,多搞一些实际性的东西,做对自己有用的事。参考文献 1 许立梓.微型计算机原理及应用M.机械工业出版社.2002 2 刘乐善.微型计算机接口技术及应用M.华中理工大学出版社.2000 3
21、邹逢兴.计算机硬件技术基础试验教程M.高等教育出版社.2000 4 周佩玲.16位微型计算机原理接口及其应用M.中国科学技术大学出版社.2000 5 吴秀清.微型计算机原理与接口技术M.中国科学技术出版社.2001 6 邓亚平.微型计算机接口技术M.清华大学出版社.2001 7 王迎旭.单片机原理与应用M.机械工业出版社.2001 8 周航慈.单片机应用程序设计技术M.北京航空航天大学出版社.2002 9 谢宜仁.单片机实用技术问答M.人民邮电出版社.2002 附录 1 源程序清单#include#define uchar unsigned char#define uint unsigned
22、int sbit led=P10;uchar passw8=0 xde,0 xde,0 xde,0 xde,0 xde,0 xde,0 xde,0 xde;uchar keyw8;/按键 uchar disp8;/按键显示代码 unsigned char const seg=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/0-f显示代码 unsigned char const keyd=0 xee,0 xde,0 xbe,0 x7e,0 xed,0
23、xdd,0 xbd,0 x7d,0 xeb,0 xdb,0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77;/0-F 按键代码 bit f;/f为开、闭锁标志,uchar m,n,j,x,d,key,del,t,k;uchar keyscan();void delay(uint i);void main()/*主函数*/t=3;m=8;/按键次数 while(1)if(t=0)continue;key=keyscan();=0 xff)/有按键按下,保存按键代码 for(j=0;/显代码 keywm-1=keydj;/按代码 m-;if(m=0)m=8;if(key=0 x77)/确认键按下,判断密码是否正确 for(n=0;/判断密码 if(f=1)/密码错,闭锁 led=1;/密码正确,开锁 for(x=0;uchar keyscan()/键盘扫描函数,使用行列反转扫描 uchar cord_h,cord_l;/返回键盘最后组合码 return(0 xff);/返回该值 void delay(uint i)/延时函数 while(i-);附录 2 硬件实物图
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1