已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的电子密码锁设计 我国工业企业的自动化程度普遍较低,单片机产品有很大的应用空间,如机械行业80%以上的设备仍采用传统的继电器和接触器进行控制。因此,单片机在我国的应用潜力远没有得到充分发挥。 我国大中型企业普遍采用了先进的自动化系统对生产过程进行控制,但绝大部分小型企业尚未应用自动化系统和产品对生产过程进行控制,以提高企业的经济效益和竞争实力。 基于单片机设计的电子密码锁,具有设计简单,操作方便的特点,该产品有很大的市场前景。该设计运用Proteus等仿真软件仿真电子锁,解决了手工绘图慢的缺点,同时设计过程还引用了电子锁常用的标准件和常用件,尽量将所设计的电子锁标准化,这样就大大缩短了电子锁设计周期,进而缩短了新产品的开发周期并降低了电子锁的制造成本;增强了产品的竞争力,公司的整体实力也得到增强。 第一章 概述1.1 设计目的 1.通过本次课程设计进一步熟悉和掌握单片机的结构及工作原理,巩固和加深“单片机C语言”课程的基本知识,掌握电子设计知识在实际中的简单应用。 2.综合运用“单片机C语言”课程的技巧以及生产实际知识去分析和解决电子设计问题,进行电子设计的训练。 3.学习电子设计的一般方法,掌握AT89C51芯片以及简单的电子设计过程和运行方式,培养正确的设计思想和分析问题、解决问题的能力、特别是总体设计能力。 4.通过计算和绘制原理图、布局图和流程图,学会运用标准、规范、手册、图册、和查阅有关技术资料等,培养电子设计的基本技能。1.2 设计要求 1.若不小心输入错误数字,可以返回重新输入。 2.输入错误次数达到3次时,将锁定键盘一定时间。 3.可以更改密码。 4.显示解锁键盘余剩时间。 第二章 系统的硬件结构设计2.1 实验原理 主体电路:电子密码锁控制模块。这部分电路主要由AT89C51单片机的I/O端口、定时计数器、外部中断扩展等组成。 本设计的P0端口为段码端口,P2端口为位码端口,P1和P3为键盘端口。初始时红灯亮,绿灯灭,并且数码管无任何显示。当输入数字时,数码管不会显示所输入的数字,但会显示出一横表示输入了数字,输入“返回”时可以返回上一步。当输入了4个数字时,再按“确定”,若输入的密码正确,红灯灭,绿灯亮,输入“锁定”后可以重新上锁;若输入的密码不正确,红灯将会闪烁3次,之后重置输入的数字。如果输入错误次数达到3次,键盘将会被锁定,红灯和绿灯均熄灭,无法输入任何数字,数码管显示1800并且开始倒数1800秒。1800秒后,电子锁将会自动解锁。若在电子锁解锁期间按“更改密码”可以改变密码,此时若按数字键时会显示输入的密码,输入“返回”可以返回上一步。输入完毕后,按“确定”键绿灯将会闪烁3次表示更改密码完成。 本设计的程序中采用定时器中断的方式设计。2.2.工作流程图流程如图2.2-1 图2.2-1 工作流程图2.3 硬件设计2.3.1 单片机结构 单片微机(Single-Chip Microcomputer)简称为单片机。他在一块芯片上集中了中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时/计数和多功能输入/输出I/O口,如并行I/O、串行口I/O和转换A/D等。就其组成而言,一块单片机就是一台计算机,由于它具有体积小、功能强和价格便宜等优点,因而被广泛地应用于产品智能化和工业控制自动化上。2.3.2 主要元器件选择 如图2.3.2-1 图2.3.2-1 主要元器件选择 第三章 控制系统的软件设计3.1 软件设计3.1.1 单片机中中断系统基本结构 中断是一项重要的计算机技术,是处理正常工作与紧急状态的好办法,是实现人机实时交互的重要途径,在单片机应用系统中,终端技术得到了广泛应用。下面详细介绍单片机中断系统基本结构、与中断相关的特殊寄存器的设置及中断应用系统编程方法。 当CPU查询到系统有中断请求时,如果系统处于中断允许状态,CPU将停止当前的工作,相应中断请求,转向中断服务,中断服务完成后,返回源程序继续执行当前任务,这叫单片机中断。 能让CPU产生中断的信号源叫中断源。8051单片机有INT0、INT1、T0、T1、TI、RI六个中断源,但是只有EX0、ET0、EX1、ET1、ES五个向量,下面简要介绍六个中断源。 INT0、INT1:外部中断源,右P3.2和P3.3引脚输入。具有低电平和脉冲两种出发方式,在每个机器周期的S5P2采样引脚信号,如有效则由硬件将它的中断请教标志IE置1,请求中断.当CPU响应中断时,由硬件复位。 T0、T1:定时/计数器中断,当定时/计数器产生溢出时,置位中断请求标志TF请求中断处理。 RI、TI:串行中断,RI是接受,TI为发送。单片机串行口接受到一个字符后RI置1,发送完一个字符TI置1。值得注意的是,RI、TI在响应中断后,必须由用指令将其复位。3.1.2 中断响应 CPU在执行程序的过程中,在每个机器周期的S5P2对中断位置位按中断优先级进行查询,一旦查询到有中断请求,CPU只要不在执行同级或高级的中断服务程序和当前指令(RETI指令或访问IE、IP的指令除外)执行完毕两种情况,则响应中断。如果当前正在执行的指令是RETI或访问IE、IP的指令,则当前指令执行完毕后,CPU才可响应中断。中断响应时间可以从中断信号被查询开始算起,中断响应时间在以下三种情况,响应还会更长: CPU正在执行一个比响应的中断源优先级相当或更高的中断源的中断服务程序,此时必须等到中断服务程序执行完毕才可中断响应。 正在执行的当前指令不是在最后一个机器周期,只有指令执行完后才响应中断。 如果当前执行的是RETI或访问IE、IP的指令,则当前指令执行完毕后,CPU需再执行一条指令才可以中断响应,因此附加等待响应时间不会超过5个机器周期。3.1.3 中断入口:单片机响应中断后,将转向特定的入口进行中断服务,单片机的中断入口地址如下表3.1.3-1中 断 源入 口 地 址IE0(外部中断0)0003HTF0(定时器0 溢出中断)000BHIE1(外部中断1)0013HTF1(定时器1 溢出中断)001BHRI+TI(串行口中断)0023H 表3.1.3-1单片机中断入口地址表 从表中可以看出,两相邻中断源的入口地址间隔为8个单元。这意味着如果要把中断源对应的中断服务程序从入口地址开始存放,则程序的长度不能超过8个字节,否则会影响到下一个中断源的入口地址的使用。而通常情况下,中断服务程序的长度不止8个字节,因此,常见的处理方法是:在入口地址处存放一条无条件转移指令,通过这条转移指令转向对应的中断服务程序入口,中断服务程序以RETI为结束。3.1.4 中断请求的撤销 CPU响应中断请求,在中断返回(RETI)之前,该中断请求应被撤除,否则会引发另一次中断。 定时/计数器中断请求撤销:CPU在响应中断之后,由硬件自动清除中断请求标志TF。 外部中断请求撤销:如果采用脉冲触发方式,CPU在响应中断后,由硬件自动清除中断请求标志IE;对于电平触发方式的外部中断请求,中断标志的撤销是自动的,由于造成中断请求的低电平继续存在,所以在响应中断后再次会产生中断请求,为此响应中断后要撤销外部信号。3.1.5 每秒钟的设定 延时方法可以右两种,一种是利用MCS-51内部定时器溢出中断来确定1秒的时间,另一种是采用软延时的方法。3.1.6 计数器初值计算 定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算公式:TC=M-C。3.2 实验程序#include#include#define INT8U unsigned char#define INT16U unsigned intsbit red=P36;/定义红灯,即锁定状态sbit green=P37;/定义绿灯,即解锁状态sbit k1=P10;/定义数字键“1”sbit k2=P11; /定义数字键“2”sbit k3=P12; /定义数字键“3”sbit k4=P13; /定义数字键“4”sbit k5=P14; /定义数字键“5”sbit k6=P15; /定义数字键“6”sbit k7=P16; /定义数字键“7”sbit k8=P17; /定义数字键“8”sbit k9=P30; /定义数字键“9”sbit k0=P31; /定义数字键“0”sbit ka=P32;/定义“返回”键sbit kb=P33;/定义“确定”键sbit kc=P34;/定义“更改密码”键sbit kd=P35;/定义“锁定”键INT8U mod=1,i,error,j,change,state,right;/定义初始模式、位码、错误次数、取反次数、更改密码模式、按键状态、密码是否相等INT16U t=0,poi=1800,tt=0;/定义定时、倒计时数、时间累计INT8U code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF;/定义段码INT8U array=0,0,0,0;/保存数位分解结果的数组INT8U nico_A=0,0,0,0;/密码A数组INT8U nico_B=0,0,0,0;/密码B数组void INT_TO_4Digit(INT16U n)/数位分解函数array0=0;while(n=1000)array0+;n-=1000;array1=0;while(n=100)array1+;n-=100;array2=0;while(n=10)array2+;n-=10;array3=n;void DSY_Show() interrupt 1/T0中断函数TH0=-1000/256;/1ms定时TL0=-1000%256;if(k1=0|k2=0|k3=0|k4=0|k5=0|k6=0|k7=0|k8=0|k9=0|k0=0) state=1;/若任意数字键按下,state=1if(k1!=0&k2!=0&k3!=0&k4!=0&k5!=0&k6!=0&k7!=0&k8!=0&k9!=0&k0!=0&state=1) state=2;/若无数字键按下,且按键状态为1时,按键状态更改为2if(ka=0&state=0) state=3;/若“返回”键按下,且按键状态为0,按键状态更改为3if(ka!=0&state=3) state=4;/若“返回键”没有按下,且按键状态为3,按键状态更改为4if(nico_A0!=nico_B0|nico_A1!=nico_B1|nico_A2!=nico_B2|nico_A3!=nico_B3) right=1;/若密码A数组任一位不等于密码B数组,即密码不相等if(nico_A0=nico_B0&nico_A1=nico_B1&nico_A2=nico_B2&nico_A3=nico_B3) right=2;/若密码A数组与密码B数组完全相等,即密码相等if(ka=0|kb=0|kc=0|kd=0) tt=0;/如果“返回”、“确定”、“更改密码”、“锁定”任意一键按下,时间累计清零switch(mod)/选择模式case 1:if(change=0) red=0;green=1;/若不是在更改密码模式,红灯亮,绿灯灭if(change=1&state=4) change=0;mod=5;state=0;/若在更改密码状态,且按键模式为4时,变为输入密码状态,且模式变为5,按键状态变为1P0=0xFF;/关闭段码if(k1=0) nico_B0=1;/若按下数字键“1”,密码B的第0位为1if(k2=0) nico_B0=2;if(k3=0) nico_B0=3;if(k4=0) nico_B0=4;if(k5=0) nico_B0=5;if(k6=0) nico_B0=6;if(k7=0) nico_B0=7;if(k8=0) nico_B0=8;if(k9=0) nico_B0=9;if(k0=0) nico_B0=0;if(t+=1000) t=0;tt+;/定时1秒,然后t清零,时间累计+1if(tt=1800) tt=0;error=0;/半小时内无任何操作,错误次数清零if(state!=2) return;/如果按键状态不为2,返回tt=0;/时间累计清零state=0;/按键状态变为0mod=2;/模式变为2break;/退出本次循环case 2:if(change=1)/若为更改密码状态,会显示数字P0=0xFF;/关闭段码P2=(10);/输出位码P0=DSY_CODEnico_B0;/输出段码if(change=0)/若为输入密码状态,会显示一横P0=0xFF;P2=(10);P0=DSY_CODE10;if(state=4) mod=1;state=0;/若按键状态为4,模式变为1,且按键状态变为1if(k1=0) nico_B1=1;if(k2=0) nico_B1=2;if(k3=0) nico_B1=3;if(k4=0) nico_B1=4;if(k5=0) nico_B1=5;if(k6=0) nico_B1=6;if(k7=0) nico_B1=7;if(k8=0) nico_B1=8;if(k9=0) nico_B1=9;if(k0=0) nico_B1=0;if(t+=1000) t=0;tt+;if(tt=1800) tt=0;error=0;if(state!=2) return;tt=0;state=0;mod=3;break;case 3:if(change=1)P0=0xFF;P2=(1i);P0=DSY_CODEnico_Bi;if(change=0)P0=0xFF;P2=(1i);P0=DSY_CODE10;i=(i+1)%2;/i的输出结果在0、1之间循环if(state=4) mod=2;state=0;if(k1=0) nico_B2=1;if(k2=0) nico_B2=2;if(k3=0) nico_B2=3;if(k4=0) nico_B2=4;if(k5=0) nico_B2=5;if(k6=0) nico_B2=6;if(k7=0) nico_B2=7;if(k8=0) nico_B2=8;if(k9=0) nico_B2=9;if(k0=0) nico_B2=0;if(t+=1000) t=0;tt+;if(tt=1800) tt=0;error=0;if(state!=2) return;tt=0;state=0;mod=4;break;case 4:if(change=1)P0=0xFF;P2=(1i);P0=DSY_CODEnico_Bi;if(change=0)P0=0xFF;P2=(1i);P0=DSY_CODE10;i=(i+1)%3;if(state=4) mod=3;state=0;if(k1=0) nico_B3=1;if(k2=0) nico_B3=2;if(k3=0) nico_B3=3;if(k4=0) nico_B3=4;if(k5=0) nico_B3=5;if(k6=0) nico_B3=6;if(k7=0) nico_B3=7;if(k8=0) nico_B3=8;if(k9=0) nico_B3=9;if(k0=0) nico_B3=0;if(t+=1000) t=0;tt+;if(tt=1800) tt=0;error=0;if(state!=2) return;tt=0;state=0;mod=5;break;case 5:if(change=1)P0=0xFF;P2=(1i);P0=DSY_CODEnico_Bi;if(change=0)P0=0xFF;P2=(1i);P0=DSY_CODE10;i=(i+1)%4;if(ka=0|kb=0|kc=0|kd=0) t=0;/如果“返回”、“确定”、“更改密码”、“锁定”任意一键按下,定时清零if(change=1&kb=0&green=0) nico_A0=nico_B0;nico_A1=nico_B1;nico_A2=nico_B2;nico_A3=nico_B3;mod=8;/若在更改密码状态且绿灯亮时按下确定,密码B会代入密码A,且模式变为8if(state=4&red=0|state=4&green=0&change=1) mod=4;state=0;/若在按键状态为4且红灯亮时或者按键状态为4,绿灯亮且为更改密码状态时,模式变为4,按键状态变为1if(kb=0&right=2&red=0) red=1;green=0;error=0;/若在密码相同且红灯时按下“确定”,红灯灭,绿灯亮 ,错误次数清零if(kd=0&green=0&change=0) mod=1;/若在绿灯亮且在输入密码状态时按下“锁定”键,模式变为1if(kb=0&right=1&red=0) mod=6;/若在密码不相等且红灯时按下“确定”,模式变为6if(kc=0&green=0&change=0) mod=1;change=1;/若在绿灯且输入密码状态时按下“更改密码”,模式变为1,且变为更改密码状态if(kb=0&error=2&right=1&red=0) red=1;green=1;mod=7;/若在错误次数为2,且密码不相等并且红灯亮时按下确定键,红灯绿灯均熄灭并且模式变为7if(t+=1000) t=0;tt+;if(tt=1800) tt=0;error=0;break;case 6:P0=0xFF;P2=(1i);P0=DSY_CODE10;i=(i+1)%4;if(t+!=500) return;/定时500mst=0;red=red;j+;/t归0,红灯取反,j=j+1if(j!=6) return;/如果没有取反6次,返回j=0;error+;/取反次数归0,累计1次错误次数mod=1;break;case 7:INT_TO_4Digit(poi);P0=0xFF;P2=(1i);P0=DSY_CODEarrayi;i=(i+1)%4;if(t+!=1000)return;/定时1秒t=0;poi-;/每过1秒,倒计时数减1if(poi!=0)return;/如果倒计时数不等于0,就返回error=0;mod=1;poi=1800;/错误次数清零,模式变为1,倒计时数变为1800break;case 8:P0=0xFF;P2=(1i);P0=DSY_CODE10;i=(i+1)%4;if(t+!=500) return;t=0;green=green;j+;if(j!=6) return;j=0;change=0;mod=5;break;void main()TMOD=0X01;/T0工作于方式1IE=0x82;/使能T0中断TR0=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年分类中班说课稿
- 电子电气产品安全检验员岗前培训效果考核试卷含答案
- 天线线务员岗位责任担当考核试卷含答案
- 碾泥工岗前技能考核试卷含答案
- 余压利用工安全知识水平考核试卷含答案
- 仪器仪表维修工安全检查竞赛考核试卷含答案
- 2025-2026学年30分内写说课稿
- 头面工岗前实操知识能力考核试卷含答案
- 熔体镁工岗位沟通技巧考核试卷含答案
- 2025-2026学年abb句式说课稿
- 消防水泵房安装专项施工方案
- 保安员证考试题库(含答案)2026年
- 2025年中级安全工程师《化工安全》考试真题及答案解析
- 光明区2025广东深圳市光明区科技创新服务中心博士后招聘笔试历年参考题库典型考点附带答案详解
- 《长颈鹿与小鸟》教学设计-北师大版小学二年级数学上册第九单元第一课时
- 2026年建行信息技术类笔必背题库【夺冠】附答案详解
- 《濒危野生动植物种国际贸易公约》附录中文版2026
- 超声介入管理制度
- 杭州雷峰塔图文课件
- 乒乓球教练基本知识培训课件
- 人工智能导论知到智慧树章节测试课后答案2024年秋天津大学
评论
0/150
提交评论