课程设计报告单片机实现密码锁.doc

上传人:仙人指路1688 文档编号:4150568 上传时间:2023-04-07 格式:DOC 页数:19 大小:151KB
返回 下载 相关 举报
课程设计报告单片机实现密码锁.doc_第1页
第1页 / 共19页
课程设计报告单片机实现密码锁.doc_第2页
第2页 / 共19页
课程设计报告单片机实现密码锁.doc_第3页
第3页 / 共19页
课程设计报告单片机实现密码锁.doc_第4页
第4页 / 共19页
课程设计报告单片机实现密码锁.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《课程设计报告单片机实现密码锁.doc》由会员分享,可在线阅读,更多相关《课程设计报告单片机实现密码锁.doc(19页珍藏版)》请在三一办公上搜索。

1、 电气工程课程设计报告单片机实现密码锁学号:姓名: 学院:指导老师: 日期:单片机实现密码锁自动化学院 摘要:随着科技的发展和社会生活水平的提高,人们对日常生活中安全保险器件的要求越来越高,电子安全密码锁是基于这一要求的保险器件。目前使用的密码锁种类繁多,如指纹密码锁、红外密码锁、GPS密码锁等,各具特色。本文从经济实用的角度出发,介绍了如何采用AT89C51单片机,设计一款具有报警功能的电子密码锁。该设计方法合理,简单易行,成本低,适用于家庭、宾馆、办公室等场所。关键字:单片机密码锁报警Abstract :With technological development and social i

2、mprovement of living standards, people in daily life-safe devices have become increasingly demanding, electronic security locks is based on the requirements of the insurance device. Currently use a wide range of locks, such as fingerprint lock, password lock infrared, GPS lock and other distinguishi

3、ng features. This article from the economical point of view, describes how to use AT89C51 single-chip, designed with an electronic lock with alarm function. The design is reasonable, simple, low cost, suitable for families, hotels, offices and other places.Keywords: MCU Password Lock Alarm1、 概述本文介绍了

4、采用AT89C51单片机设计一款电力密码锁,它具有按键提示、输入错误提示、密码显示、密码出错报警、控制开锁、密码重置等功能,具体功能如下:1.1、 密码输入:用户通过键盘输入正确密码后,系统自动解锁。使用确定按键结束密码输入,使用退格键可以返回前面某处重新输入密码,使用闭锁键可以使密码锁重新闭锁。1.2、 提示与报警:系统使用不同的声音作为用户不同操作的提。短叫一声表示有按键输入,长叫一声表示密码正确,长叫5S表示密码错误,长叫3min表示连续三次输入密码错误。1.3、 数码管显示:系统使用6位字符表示有关信息。第一个字符表示功能,P表示密码锁处于闭锁状态,等待用户输入开锁密码;表示系统已开锁

5、;显示A表示密码多次错误而报警。1.4、 电子锁控制:当用户输入正确密码后,系统开锁;否则系统闭锁。当系统处于开锁状态时,可以使用按键闭锁。1.5、 密码重置:当用户在开锁状态下时,可以通过密码重置键进入密码重置模式,连续两次输入密码正确之后,重置密码成功,原密码失效,新密码生效。2、 设计思路及流程根据上述功能介绍,密码锁系统可以分为用户密码输入、显示和控制报警3大功能,因此可以键盘模块、显示模块、报警模块、电子锁控制模块和单片机模块。系统模块图如图1所示。各模块设计思路如下:2.1、键盘设计。密码键有10个(09),功能键有3个,一个共需要13个按键,因此系统采用44的行列矩阵键盘,可安装

6、16个按键,足够满足要求。2.2、数码管设计。系统只需6为数码管显示器,为了简化设计,采用动态显示方法。3、 硬件电路设计3.1、键盘电路设计按键模块采用44行列矩阵结构,由4条行线和4条列线构成。行线和列线共有16个交叉点每个交叉点可以放置一个按键,这样共可以放置16个按键。按键电路如图2所示。图2KEYL0KEYL3为行线,分别接单片机的P2.0P2.3;KEYR0KEYR3为列线,分别接单片机的P2.4P2.7。软件编程采用线翻转法,该方法要求行线和列线上 都有上拉电阻。由于AT89C51单片机的P2口内部集成了上拉电阻,所以系统未加。图中顺序前十个按键为09,最后3个按键分别为退格键、

7、闭锁键和确认键。3.2、显示电路设计显示电路由6个共阳极数码管构成。软件编程时采用动态显示方法,其结构图如图3所示。图3软件编程时,按照下面的步骤显示字符:(1)、首先从P0口输出共阳极字符的段码;(2)、然后从LCONi输出低电平。3.3、报警电路设计报警电路主要由PNP三极管和蜂鸣器构成。报警电路图如图4所示。图4LS1为一个5V的压电蜂鸣器,当对其1、2号引脚施加5V电压时,便会鸣叫。由图4可知,当ALARMCON输出低电平时,三极管饱和导通,蜂鸣器鸣叫;当ALARMCON输出高电平时,三极管饱截止,蜂鸣器停止鸣叫。通过控制ALARMCON输出低电平的时间长短来控制蜂鸣器长叫或短叫。3.

8、4、电子锁控制电路电子锁控制电路主要由继电器、三极管和发光二极管构成。电子锁控制电路图如图5所示。图5继电器线圈的一个引脚接电源正极,另一端接NPN三极管的集电极。三极管的基极通过一个电阻接单片机的引脚。当LOCKCON输出高电平时,三极管导通,继电器线圈得电,触点闭合,发光二极管发光,相当于电子锁闭锁;当LOCKCON输出低电平时,三极管截止,继电器线圈失电,触点释放,发光二极管熄灭,相当于电子锁开锁。图中普通二极管是继电器线圈的续流二极管,为感应电动势提供回路,以免损坏三极管。3.5、单片机电路单片机电路主要由单片机、振荡电路和复位电路构成。由于AT89C51内部集成了12MHz的振荡电路

9、,所以系统外部未加。单片机电路图如图6所示。图6AT89C51单片机的P0口用于输出显示器段码。P1口的P1.0P1.5用于6个LED的亮与灭。P2口用于构成行列矩阵键盘。P3.3用于控制蜂鸣器的鸣叫。P3.5用于控制电子锁的开闭。4、 软件设计软件设计主要是对键盘进行扫描,根据按键控制报警电路、电子锁电路,并将结果显示。因此整个软件分为按键子程序、显示子程序、报警子程序、电子锁控制子程序及主程序。/常量、变量说明/#includetypedefunsigned char uchar;typedef unsigned int uint;/键盘子程序相关说明#define BLANKCHAR 1

10、0 /定义空白常量#define PCHAR 11 /定义字符P常量#define OPENCHAR 12 /定义开锁字符常量#define ALARMCHAR 13 /定义字符A常量#define LINECHAR 14 /定义字符-常量#define SETCHAR 15 /定义字符B常量#define BACKKEY 0X0D /定义退格键常量#define ENTERKEY 0X0F /定义确定键常量#define LOCKKEY 0X0E /定义闭锁键常量#define SETKEY 0X0C /定义设定键常量#define NO_KEY 20 /定义无按键返回常量#define K

11、EYPORT P2 /定义键盘端口uchar KeyPre; /保存上次扫描按键的键值uchar KeyUp; /用于控制按键去抖动操作#define LEDPORT P0 /定义显示器段码输出端口#define LEDCON P1 /定义显示器位码输出端口uchar code SEGCODE=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,/09的共阳极段码0XFF,/不显示的共阳极段码0X8C,/字符P的共阳极段码0X8F,/的共阳极段码0X88,/字符A的共阳极段码0XBF, /字符-的共阳极段码0X00;/LED位码 uchar co

12、de BITCODE=0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80;uchar DispBuf6; /保存显示的字符bit DispNormal;/控制显示时是正常显示还是闪烁显示uchar DispCnt;/控制闪烁显示的频率#define LONG_TIME 200 /蜂鸣器响2s#define SHORT_TIME 20/蜂鸣器响200ms #define LONGER_TIME 18000/蜂鸣器响3minsbit ALARMCON=P34; /定义报警控制引脚bit AlarmEnable; /定义是否报警或声音提示uint AlarmTime; /

13、定义报警时间长度sbit LOCKCON=P33; /定义电子锁控制引脚uchar PassWord=1,2,2,2,1; /定义初始密码表uchar PassInBuf6; /保存输入的密码字符uchar PassInBuf16; /设定密码时保存第一次输入的密码uchar PassPosi=1;/用户输入的密码字符在PassInBuf6中的位置bit TimerBit;/20ms定时时间到标志uchar SysMode;/系统所处的模式:0输入密码模式1报警模式2开锁模式uchar ErrorCnt; /用户连续输入密码出错次数long int j;char i=0;char h=0; /

14、密码重新输入错误标志位char q;char p=0; /重置密码输入次数标志char SET=0; /设定密码标志位 /显示子程序/ /信息填充函数void Fill_Buf(uchar FillChar)/将字符FillChar写入缓冲区uchar t;for(t=0;t6;t+)DispBuft=FillChar;PassInBuft=FillChar;void Fill_Buf_P() /将系统闭锁时的信息写入缓冲区Fill_Buf(BLANKCHAR);DispBuf0=PCHAR;void Fill_Buf_O() /将系统开锁时的信息写入缓冲区Fill_Buf(BLANKCHAR

15、);DispBuf0=OPENCHAR;void Fill_Buf_A() /将系统报警时的信息写入缓冲区Fill_Buf(LINECHAR);DispBuf0=ALARMCHAR; void Fill_Buf_B() /将系统设定密码时的信息写入缓冲区Fill_Buf(BLANKCHAR);DispBuf0=SETCHAR; /缓冲区显示函数 void Disp_Led_Sin(uchar DispChar,uchar DispPosi) /在某个LED上显示字符LEDPORT=SEGCODEDispChar;LEDCON=BITCODEDispPosi; void Disp_Led_OFF

16、() /关闭显示器uchar T;LEDCON|=0X3F;for(T=0;T6;T+)Disp_Led_Sin(BLANKCHAR,T);void Disp_LED(uchar i)/当系统处于不同模式下时显示某个显示器DispCnt+;DispCnt%=10;if(DispCnt=0)DispNormal=DispNormal;if(SysMode=1)if(!DispNormal)Disp_Led_OFF();return;Disp_Led_Sin(DispBufi,i);/报警子程序/void Sys_Speaker(uint stime) /设置报警时间及报警标志位AlarmEnab

17、le=1;AlarmTime=stime;void Sys_Alarm() /控制蜂鸣器鸣叫if(AlarmEnable=1)ALARMCON=0;AlarmTime-;if(AlarmTime=0)AlarmEnable=0;ALARMCON=1;if(SysMode=1)SysMode=0;Fill_Buf_P();/键盘子程序/uchar Find_Key()/扫描一次键盘返回按键值 uchar KeyTemp,i,j;KEYPORT=0XF0;KeyTemp=KEYPORT;if(KeyTemp=0XF0)return NO_KEY;switch(KeyTemp)case 0x70:

18、j=4; break; case 0xb0: j=3; break; case 0xd0: j=2; break; case 0xe0: j=1; break;default: break;KEYPORT=0x0f;KeyTemp=KEYPORT;switch(KeyTemp) case 0x07: i=4; break; case 0x0b: i=3; break; case 0x0d: i=2; break; case 0x0e: i=1; break; default: break; return (4*(i-1)+j-1);uchar Scan_Key() /负责按键去抖动等操作uch

19、ar KeyTemp;KeyTemp=Find_Key();if(KeyTemp=NO_KEY)if(KeyUp2)KeyUp=0;return NO_KEY;if(KeyUp=2)KeyUp=3;return NO_KEY;if(KeyUp=3)KeyUp=0;return KeyPre;elseif(KeyUp=0)KeyUp=1;KeyPre=KeyTemp;else if(KeyUp=1)if(KeyPre=KeyTemp)KeyUp=2;elseKeyPre=KeyTemp;else if(KeyUp=3)KeyUp=2;return NO_KEY;void Key_Process(

20、uchar Key) /按键处理函数uchar i;if(Key=NO_KEY)return;switch(SysMode)case 0:switch(Key)case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:DispBufPassPosi=LINECHAR;PassInBufPassPosi=Key;if(PassPosi1)PassPosi-;Sys_Speaker(SHORT_TIME);break;case ENTERKEY:for(i=0;i=5)Fill_Buf_O();PassPosi=1;

21、LOCKCON=1;ErrorCnt=0;Sys_Speaker(LONG_TIME);SysMode=2;elseErrorCnt+;if(ErrorCnt2)ErrorCnt=0;Fill_Buf_A(); PassPosi=1; Sys_Speaker(LONGER_TIME);SysMode=1;elseFill_Buf_P();PassPosi=1; Sys_Speaker(LONG_TIME);break;case LOCKKEY:Fill_Buf_P();PassPosi=1;Sys_Speaker(SHORT_TIME);break;break;case 2:if(Key=LO

22、CKKEY)Fill_Buf_P();SysMode=0;LOCKCON=0;Sys_Speaker(SHORT_TIME);break;if(Key=SETKEY)/密码重置if(SET=0)Fill_Buf_B();SET=1;break;break;if(SET=1)switch(Key)case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:DispBufPassPosi=LINECHAR;PassInBufPassPosi=Key;if(PassPosi1)PassPosi-;Sys_Speaker(

23、SHORT_TIME);break;case ENTERKEY:if(PassPosi5)break;if(p=0)p=1;Fill_Buf_B();PassPosi=1;for(i=0;i5;i+)(PassInBuf1i=PassInBufi+1);break;elsefor(i=0;i5;i+)if(PassInBufi+1!=PassInBuf1i)h=1;break;if(h=1)h=0;Fill_Buf_A();PassPosi=1;LOCKCON=0; Sys_Speaker(LONG_TIME);SysMode=1;break;for(q=0;q5)i=0;Sys_Alarm(

24、);KeyTemp=Scan_Key();Key_Process(KeyTemp);TimerBit=0; 5、 总结本文详细介绍了如何使用AT89C51单片和其他元器件设计一款电子密码锁。首先介绍了系统的具体要求实现的功能,在此基础上将整个系统划分为键盘模块、显示模块、报警模块、电子锁控制模块和单片机模块;然后给出了每个模块的硬件电路图,并对硬件电路图作了相应的说明;最后根据功能和硬件电路图给出了系统相关模块的子程序和系统主程序。通过本密码锁的设计,使我对单片机有了更深的了解。特别是键盘扫描方法,以前只是理论上知识,而本次设计让我有机会去实践了这一知识。本设计只是一个简单的密码锁,还有很多功能可以添加上去,如密码不必必须是5位,少于5位也可以;密码的明码显示等参考文献:【1】 51单片机C语言应用开发技术大全龙脉工作室 刘坤、宋戈、赵红波、张宪栋 编著,人民邮电出版社【2】 51单片机应用设计与仿真基于Keil与Proteus丁明亮、唐前辉 主编,北京航空航天大学出版社附:1、整体电路图2、元器件清单元器件名称数目元器件名称数目Button16BUZZER1G2RL-1A-DC121LED1RES(320)8DIODE1PNP1RES(2k)1RES(1k)37SEG-MAX6-CA1NPN1AT89C511

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号