单片机的电子密码锁设计课程设计.docx
- 文档编号:11164562
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:27
- 大小:237.46KB
单片机的电子密码锁设计课程设计.docx
《单片机的电子密码锁设计课程设计.docx》由会员分享,可在线阅读,更多相关《单片机的电子密码锁设计课程设计.docx(27页珍藏版)》请在冰点文库上搜索。
单片机的电子密码锁设计课程设计
题目基于单片机的电子
密码锁设计
学生姓名顾梦晓
专业班级11级通信工程2班
学号201151046
院(系)信息工程学院
指导老师周喜
完成时间2015年01月16日
郑州科技学院
单片机课程设计任务书
专业11级通信工程班级2班学号201151046姓名顾梦晓
一、设计题目基于单片机的电子密码锁设计
二、设计任务与要求
(1)本设计为防止密码被窃取在输入密码时屏幕上显示8。
(2)设计开锁密码位为六位密码的电子密码锁。
(3)能够在密码正确时显示“1HELLO”,密码错误时显示“2ERROR”,输入密码的位数时显示为8的个数。
(4)4×4的矩阵键盘中包括0-9的数字键确认键和消除键的功能键。
(5)本产品具备报警功能,当输入密码错误时蜂鸣器响
(6)在密码输入过程中,若输入错误,可以利用“C”键删除刚才输入的错误的数字。
在输入密码的过程中可以随时对输入的密码进行修改。
三、主要参考文献
[1]何宏主编.单片机原理与接口技术.[M]北京:
国防工业出版社.2006.07
[2]赵益、徐晓林、周振峰.电子密码锁的系统原理.[M]北京:
清华大学出版社.2003.
[3]张培仁.基于C语言编程MCS-51单片机原理与应用.北京:
清华大学出版社.2002.12
四、设计时间
2015年01月16日至2015年01月16日
指导教师签名:
年月日
1电子密码锁的背景1
2总体设计方案的确定1
2.1电子密码锁设计要求1
2.2总体设计方案选定2
3系统硬件设计2
3.1设计原理2
3.2单片机STC89C52简介3
3.4七段数码管显示器部分6
3.5键盘设计7
3.6蜂鸣器模块7
4系统软件设计8
4.1主程序模块8
5系统制作及调试9
5.1焊接注意事项9
5.2硬件调试问题及解决方法9
6结论10
参考文献11
附录1:
实物图12
附录2:
元件清单13
附录3:
电路原理图14
附录4:
程序15
1电子密码锁的背景
随着社会物质财富的日益增长,如何实现家庭防盗这一问题也变的尤其的突出,而锁自古以来就是把守门户的铁将军,人们对它要求甚高,即要安全可靠地防盗,又要使用方便。
目前普遍使用的机械锁结构简单、使用方便、价格便宜。
但在使用过程中暴露了很多缺点。
随着人们生活水平的提高,电子密码防盗作为防盗卫士的作用日趋重要。
电子密码锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。
该电子密码锁利用单片机作为主控核心,单片机(AT89S51)所具有的特殊功能使得电子密码锁的保密性能大大加强,这样就可以有效的防止多次试探密码的可能性。
随着单片机和其它智能芯片的进一步开发防盗锁将实现智能化,这将是锁的安全性能大大提高。
本系统实现密码一次输入的提示功能,若密码输入不正确将发出“嘀嘀”的报警声,引起他人警觉。
同时可添加外围设备实现远程报警(如添加继电器一类设备可以连接到主人的电话上,是主人知道家里有人非法操作,及时报警)。
若密码输入正确将发出“叮咚”的门铃声。
本系统使用的单片机所具有强大的功能能够实现智能控制用来完成密码的输入、判断和比较从而执行相应的开锁显示或报警等功能。
2总体设计方案的确定
2.1电子密码锁设计要求
(1)本设计为防止密码被窃取在输入密码时屏幕上显示8。
(2)设计开锁密码位为六位密码的电子密码锁。
(3)能够在密码正确时显示“1HELLO”,密码错误时显示“2ERROR”,输入密码的位数时显示为8的个数。
(4)4×4的矩阵键盘中包括0-9的数字键确认键和消除键的功能键。
(5)本产品具备报警功能,当输入密码错误时蜂鸣器响
(6)在密码输入过程中,若输入错误,可以利用“C”键删除刚才输入的错误的数字。
在输入密码的过程中可以随时对输入的密码进行修改。
2.2总体设计方案选定
采用一种是用以STC89C52为核心的单片机控制方案。
选用单片机STC89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接四位数码管实现显示功能。
可以看出方案二控制灵活准确性好且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案。
3系统硬件设计
3.1设计原理
本系统硬件设计由单片机(AT89S51)部分、4×4行列式键盘部分、四联七段共阴数码管部分、报警器部分4个部分所组成。
主控器件是单片机,通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。
本系统共有两部分构成,即硬件部分与软件部分。
其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分组成,软件部分对应的由主程序、初始化程序、晶体管显示程序、键盘扫描程序、启动程序、关闭程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
3.2单片机STC89C52简介
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
表3-1STC89C52功能特性
标准MCS-51内核和指令系统
片内8kROM(可扩充64kB外部存储器)
32个双向I/O口
256x8bit内部RAM(可扩充64kB外部存储器)
3个16位可编程定时/计数器
时钟频率3.5-12/24/33MHz
向上或向下定时计数器
改进型快速编程脉冲算法
6个中断源
5.0V工作电压
全双工串行通信口
布尔处理器
—帧错误侦测
4层优先级中断结构
—自动地址识别
兼容TTL和CMOS逻辑电平
空闲和掉电节省模式
PDIP(40)和PLCC(44)封装形式
STC89C52引脚介绍
VCC:
供电电压。
GND:
接地。
1、P0口:
P0口为一个8位漏级开路双向I/O口,名称为P0.0~P0.7。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
本系统中把“单片机系统”区域中的P0.0端口用导线连接到报警器上,用来提示密码输入的正确或错误并发出相应的声音。
2、P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,名称为P1.0~P1.7。
P1口的输出缓冲器可驱动(吸收或输出电流)4个TTL逻辑门电路。
本系统中把“单片机系统”区域中的P1.0—P1.7用导线连接到数码管显示器的一端。
用来实现数码管的显示。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,名称为P2.0~P2.7。
本系统中把“单片机系统”区域中的P2.0—P2.7用导线连接到三极管的一端通过三极管放大输入到数码管显示器上。
本系统中由“单片机系统”区域中的P1口和P2口共同来完成数码管的显示。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,名称为P3.0~P3.7。
本系统中把单片机系统中P3.0-P3.3和P3.4-P3.7端口分别连接到的4×4行列式键盘中的四条横线、四条竖线上,用来完成密码的输入。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两/PSEN有效。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
图3-2STC89C52引脚图
最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片机始终处于正常的运行状态。
(1)时钟电路
STC89C52单片机的时钟信号通常有两种方式产生:
一是内部时钟方式,二是外部时钟方式。
内部时钟方式如图3-3所示。
在STC89C52单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。
图3-3STC89C52内部时钟电路
(2)复位电路
当在STC89C52单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作。
本设计就是用的按键手动复位。
按键手动复位有电平方式和脉冲方式两种。
其中电平复位是通过RST(9)端与电源Vcc接通而实现的。
图3-4STC89C52复位电路
3.4七段数码管显示器部分
七段LED显示器由7个发光二极管组成,其中7个长条形的发光管排列成“日”字形,如上图所示,由七个发光二极管组成的七段显示器。
如再加一个贺点形的发:
共阴和共阳结构的LED显光管在显示器的右下角作为显示小数点用,则组成八段LED显示器。
它能显示各种数字及部份英文字母。
LED显示器有两种不同的形式:
一种是8个发光二极管的阳极都连在一起的,称之为共阳LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴LED显示器
图3-5STC89C52复位电路
3.5键盘设计
36蜂鸣器模块
4系统软件设计
4.1主程序模块
本系统软件设计由主程序、初始化程序、数码管显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
图4-1主程序的流程图
4.2软件调试
在硬件支持的环境下,用proteus设计好的电路,Keil编好的程序编译成芯片可识别的hex文件,利用PC机写进proteus程序图芯片内进行仿真测试,并对其出现的错误进行修改。
5系统制作及调试
5.1焊接注意事项
LCD的注意事项:
(1) 焊接LCD基板时,将其小心、平衡地插入万用板插孔焊接,,以避免损坏基板也比较美观。
(2) 焊接时,基板不宜长时间置于焊锡蒸汽中,焊接时间保持在10秒以内。
(3)显示器表面保护膜直到焊接完成再揭掉,以免污染显示器表面。
单片机焊接注意事项:
STC89C52单片机芯片相比较而言是脆弱的,所以需要使用芯片底座,一切焊接结束之后下载好程序再把单片机插入底座。
其他的电子器件焊接注意事项:
5.2硬件调试问题及解决方法
本设计在焊接调试时遇到的问题以及解决方法:
数码管显示器焊接时的问题:
(1)接通电源后,Lcd显示不亮,调整电路之后,显示亮度合适。
(2)接通电源后不能正常运行,推断可能是程序出现问题。
重新下载程序,可以运行。
6结论
我们刚开始决定做这个课题时,感觉对此摸不透头绪,可以说是一头雾水,毫无经验可言。
题目确定以后开始做这个设计。
我们小组先是进行了收集资料,选择方案,确定要用到的器件然后手工绘制简单的原理图以及编写程序。
之后我们分工合作,一人主攻对各个器件的原理、功能以及器件各引脚的分布、作用。
一人主攻熟悉仿真软件和程序编译、下载。
一人主攻实物焊接。
虽然各有主攻方向但遇到问题时依然是相互探讨商议。
在做课程设计的过程中原理图绘制颇费了点劲但最终还是做到了,理论上可以实现。
接下来是焊接部分,这块完成的很快,只是在显示焊接上有点问题,经调整之后,可正常运行。
通过这次的课程设计,发现自己对于编程这块欠缺太多,对C理解和运用不够深。
而在原理图和焊接方面比较熟练,遇到的问题可以解决。
也明白做一件事需要耐心和知识,再者就是查资料和合作。
细心的坚持下去就可以做到想做的事。
在以后的学习工作中依然需要努力,加油向上。
参考文献
[1]何宏.单片机原理与接口技术.[M]北京:
国防工业出版社.2006.07.10~50
[2]谢宜仁.单片机实用技术问答.[M]北京:
人民邮电出版社 .2003.02.80~121
[3]梁丽.电子密码锁的计算机仿真设计.[M]北京:
国防工业出版社.2005.45~80
[4]赵益、徐晓林、周振峰.电子密码锁的系统原理.[M]北京:
清华大学出版社.2003.15.10~14
[5]房小翠、王金凤.单片机实用系统设计技术.[M]北京:
国防工业出版社 .1999.06.60~128
[6]张培仁.基于C语言编程MCS-51单片机原理与应用.[M]北京:
清华大学出版社.2002.12.90~160
[7]龚运新.单片机C语言开发技术.[M]清华大学出版社.2006.10.52~97
附录1:
实物图
附录2:
元件清单
序号
名称
规格
数量
1
线路板
单面pcb板
1
2
按键
12*12
1
3
数码管
4位
2
4
电阻
4.7K
9
5
电阻
1K
2
6
电阻
10K
1
7
排阻
1k
1
8
三极管
9012
9
9
蜂鸣器
1
10
单片机
STC89C52
1
11
电解电容
10uf
1
12
瓷片电容
30pf
2
13
瓷片电容分
104
2
14
集成电路插座
40脚
1
15
晶振
12m
1
16
发光二极管LED
1
17
按键
6*6
12
附录3:
电路原理图
附录4:
程序
#include
unsignedcharwl[]={1,2,3,4,5,6}。
unsignedcharcodewl1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}。
//扫描
unsignedcharcodewl2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x73,0xff}。
//数码管显示数字部分
unsignedcharcodewl8[]={0x00,0x00,0x77,0x3f,0x77,0x77,0x79,0x5b}。
//数码管显示2error
unsignedcharcodewl9[]={0x00,0x00,0x3f,0x38,0x38,0x79,0x76,0x06}。
//数码管显示1hello
unsignedcharwl3[8]={18,16,16,16,16,16,16,16}。
unsignedcharwl4。
unsignedcharwl5。
unsignedcharwl6。
unsignedcharwl7。
unsignedcharzw。
unsignedcharzq。
unsignedcharwl7count。
unsignedcharwllen=6。
unsignedchargetwl[6]。
bitwl7overflag。
biterrorflag。
bitrightflag。
unsignedintsecond3。
unsignedintaa,bb。
unsignedintcc。
bitwl8flag。
bitalarmflag。
bithibitflag。
unsignedcharwl8a,wl8b。
voidmain(void)
{unsignedchari,j。
TMOD=0x01。
TH0=(65536-300)/256。
TL0=(65536-300)%256。
TR0=1。
ET0=1。
EA=1。
while
(1)//键盘输入部分
{P3=0xff。
P3_4=0。
wl6=P3。
wl6=wl6&0x0f。
if(wl6!
=0x0f)
{
for(i=10。
i>0。
i--)
for(j=248。
j>0。
j--)。
wl6=P3。
wl6=wl6&0x0f。
if(wl6!
=0x0f)
{wl6=P3。
wl6=wl6&0x0f。
switch(wl6)
{
case0x0e:
wl7=12。
break。
case0x0d:
wl7=13。
break。
case0x0b:
wl7=14。
break。
case0x07:
wl7=15。
break。
}
wl6=P3。
//P1_1=~P1_1。
if((wl7>=0)&&(wl7<10))
{if(wl7count<6)
{getwl[wl7count]=wl7。
wl3[wl7count+2]=19。
}
wl7count++。
if(wl7count==6)
{wl7count=6。
}
elseif(wl7count>6)
{wl7count=6。
wl7overflag=1。
//wl7overflow}
}
elseif(wl7==12)//deletewl7
{
if(wl7count>0)
{
wl7count--。
getwl[wl7count]=0。
wl3[wl7count+2]=16。
}
else
{
wl7overflag=1。
}
}
elseif(wl7==15)//enterwl7
{
if(wl7count!
=wllen)
{
errorflag=1。
rightflag=0。
second3=0。
}
else
{
for(i=0。
i i++) { if(getwl[i]! =wl[i]) { i=wl7count。 errorflag=1。 rightflag=0。 second3=0。 gotoa。 } } errorflag=0。 rightflag=1。 a: i=wl7count。 } } wl6=wl6&0x0f。 while(wl6! =0x0f) { wl6=P3。 wl6=wl6&0x0f。 } wl7overflag=0。 //? ? ? ? ? ? ? ? ? } } P3=0xff。 P3_5=0。 wl6=P3。 wl6=wl6&0x0f。 if(wl6! =0x0f) { for(i=10。 i>0。 i--) for(j=248。 j>0。 j--)。 wl6=P3。 wl6=wl6&0x0f。 if(wl6! =0x0f) { wl6=P3。 wl6=wl6&0x0f。 switch(wl6) { case0x0e: wl7=11。 break。 case0x0d: wl7=3。 break。 case0x0b: wl7=6。 break。 case0x07: wl7=9。 break。 } wl6=P3。 //P1_1=~P1_1。 if((wl7>=0)&&(wl7<10)) { if(wl7count<6) { getwl[wl7count]=wl7。 wl3[wl7count+2]=19。 } wl7count++。 if(wl7count==6) { wl7count=6。 } elseif(wl7count>6) { wl7count=6。 wl7overflag=1。 //wl7overflow } } elseif(wl7==12)//deletewl7 { if(wl7count>0) { wl7count--。 getwl[wl7count]=0。 wl3[wl7count+2]=16。 } else { wl7overflag=1。 } } elseif(wl7==15)//enterwl7 { if(wl7count! =wllen) { errorflag=1。 rightflag=0。 second3=0。 } else { for(i=0。 i i++) { if(getwl[i]! =wl[i]) { i=wl7count。 errorflag=1。 rightflag=0。 second3=0。 gotoa4。 } } errorflag=0。 rightflag=1。 a4: i=wl7count。 } } wl6=wl6&0x0f。 while(wl6! =0x0f) { wl6=P3。 wl6=wl6&0x0f。 } wl7overflag=0。 //? ? ? ? ? ? ? ? ? } } P3=0xff。 P3_6=0。 wl6=P3。 wl6=wl6&0x0f。 if(wl6! =0x0f) { for(i=10。 i>0。 i--) for(j=248。 j>0。 j--)。 wl6=P3。 wl6=wl6&0x0f。 if(wl6! =0x0f) { wl6=P3。 wl6=wl6&0x0f。 switch(wl6) { case0x0e: wl7=10。 break。 case0x0d: wl7=2。 break。 case0x0b: wl7=5。 break。 case0x07: wl7=8。 break。 } wl6=P3。 //P1_1=~P1_1。 if((wl7>=0)&&(wl7<10)) { if(wl7count<6) { getwl[wl7count]=wl7。 wl3[wl7count+2]=19。 } wl7count++。 if(wl7count==6) { wl7count=6。 } elseif(wl7count>6) { wl7count=6。 wl7overflag=1。 //wl7overflow } } elseif(wl7==1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子 密码锁 设计 课程设计