单片机课程设计密码锁.docx
《单片机课程设计密码锁.docx》由会员分享,可在线阅读,更多相关《单片机课程设计密码锁.docx(30页珍藏版)》请在冰豆网上搜索。
单片机课程设计密码锁
1绪论
在日常生活和工作中,住宅与部门的安全防患、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的方法解决。
目前门锁主要用弹子锁,其钥匙容易丢失;保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
针对这些所具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
它的出现为人们的生活带来了很大的方便,有很广阔的市场前景。
由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引脚的2051系列单片机来实现的,但密码简单,易破解。
随着电子元件的进一步发展,电子密码也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的但密码输入发展到现在的,密码加感应元件,实现了真正的电子加密,用户只有密码或电子钥匙中一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提1高出现了越来越多的电子密码锁。
出于安全、方便等方面的需要许多电子密码锁已相继问世。
但这类产品的特点是针对特定有效卡、指纹或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等。
由于数学、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子防盗锁获得高度的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗锁,这样对盗贼而言是“道高一尺,魔高一丈”、组合使用信息也能够使电子防盗锁获得无穷扩展的肯,是产品多样化,对用户而言是“千挑百选、自得其所"。
可以看出组合使用电子信息是电子密码锁以后的发展的趋势。
本次设计使用AT89S52单片机构成最小系统,接以键盘,报警系统,液晶显示构成人性化的方便易用的电子密码锁。
2设计内容及要求
2.1设计目的与任务
学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
2.2设计内容与要求
(1)课程设计中,锁体用LED代替(如“绿灯亮”表示开锁,“红灯亮”表闭锁)。
(2)其密码为8位十进制数。
(3)进入准备工作状态。
(4)密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
(5)选择电路方案,完成对确定方案电路的设计。
计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。
安装调试设计电路,查阅参考文献。
2.3设计总体方案介绍及工作原理说明
2.3.1总体方案介绍
采用以单片机为核心的控制方案,由于单片机总类繁多,各种型号都用一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。
一般来说在选择单片机时下面几个方面考虑:
性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些还有一些最基本的比如:
中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。
在开发过程中单片机还受到:
开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。
基于以上因素本设计选用单片机AT89S52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,以及控制的准确性,实现基本的密码锁功能。
另外采用外接LCD1602A显示器用于显示作用。
本设计的原理框图如图1所示:
图1系统设计框图
(1)电源:
本设计电路采用三脚电源接口,方便使用。
外围接有六角开关,方便电路的开关控制。
(2)显示器:
本设计的显示部分由液晶显示器LCD1602A(自带英文字库)取代普通的数码管来完成。
只有按下电源开关后,显示器才处于开启状态。
同理只有按下电源开关后显示器才处于关闭状态。
开始时数码管显示提示“INPUTPASSWORD:
”输入密码。
输入密码后按下确认键,若输入密码正确则显示“MissionSuccess!
”。
否则,显示“ForgotPassword?
”。
(3)蜂鸣器:
若输入密码时,每输入一位蜂鸣器响一次。
密码输入错误后蜂鸣器报警。
(4)LED:
LED灯设有绿色和红色两种,若密码输入正确,则绿灯亮,反之红灯亮。
(5)3×4键盘:
该矩阵键盘分别为0、1、2、3、4、5、6、7、8、9、确认输入Enter、重新输入AC。
(6)复位电路:
单片机复位电路是使CPU和系统的其他功能部件处在一个正确的初始状态,并从这个状态开始工作。
2.3.2工作原理说明
在单片机的外围电路外接以3×4矩阵键盘、LED、蜂鸣器等。
矩阵键盘分别为0、1、2、3、4、5、6、7、8、9、确认输入Enter、重新输入AC。
系统开始显示“INPUTPASSWORD:
”,提示输入密码;若输入密码与设定的密码相同,即密码正确,液晶屏显示为“MissionSuccess!
”提示锁打开,同时LED绿灯亮;若在输入过程中发现输入错误的数字,可通过重新输入AC键清除所有数字;若密码不正确,LED显示电路显示提示“ForgotPassword?
”,LED红灯亮,蜂鸣器发出警报声同时锁定键盘,不能进行任何操作,给锁的主人以提示,及时阻止盗窃行为。
3硬件系统的设计
3.1硬件系统各模块功能简要介绍
3.1.1复位和晶振部分
单片机复位是使CPU和系统的其他功能部件处在一个正确的初始状态,并从这个状态开始工作。
在接通电源瞬间,电容上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。
AT89S52引脚XTAL1和XTAL2与晶体振荡器及其两电容连接。
晶振、电容构成了电容三点式振荡器,振荡信号频率与晶振频率及电容的容量有关,但主要有晶振频率决定,范围在0~33MHz之间,电容取值范围在5~30pF之间。
根据实际情况,本设计采用12MHz作为系统的外部晶振。
电容取值为25pF。
AT89S52复位及晶振电路结构原理图如图2所示:
图2系统的复位和晶振电路
3.1.2键盘输入部分
按键采用矩阵式排列的独立式按键键盘,它由行线和列线组成,按键位于行列的交叉点上,密码锁的密码有按键输入完成,本系统采用3×4矩阵键盘,12个按键分为输入数字键:
0、1、2、3、4、5、6、7、8、9;功能键:
确认输入Enter、重新输入AC。
键盘与单片机相连接,其连接方式为前四行分别P1.0—1.3连接;后三列分别与PP1.5—17连接分别控制。
键盘输入结构图如图3所示:
图3键盘电路原理图
3.1.3显示部分
为了使该密码锁能人性化的显示输入密码的状态以及密码输入正确与否和提高密码锁的密码显示效果能力。
本设计的显示部分由液晶显示器LCD1602A(自带英文字库)取代普通的数码管来完成。
只有按下电源开关后,显示器才处于开启状态。
同理只有按下电源开关后显示器才处于关闭状态。
否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后再显示器上显示一个*,输入多少位就显示多少个*,当密码输入完成时,按下确认键,如果输入的密码正确的话,显示真确的提示信息,如果密码不正确,就会显示错误的信息,通过LCD显示屏,可以清楚的判断出锁所处的状态。
其显示部分引脚接口如图4所示:
图4液晶显示电路
3.1.4开锁控制电路部分
开锁控制电路的功能是当密码输入正确后将锁打开。
本设计采用LED灯和蜂鸣器来作为开锁部分的信号状态。
若密码输入正确,则绿灯亮,表示开锁成功。
反之密码输入错误,则红灯亮,表示开锁失败,同时蜂鸣器发出警报声,给锁的主人以提示。
报警部分由报警蜂鸣器及外围电路组成,加电后不发声,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P35引脚为高电平,三极管Q1导通轰鸣器发出噪鸣声报警,其电路图如图5所示:
图5开锁控制电路图
3.2电路原理图、PCB图、元器件布局图
设计电路原理图、PCB图、元器件布局图分别见附录A、附录B、附录C。
3.3主要元器件介绍
3.3.1主控芯片AT89S52
AT89S52时一种低功耗,高性能CMOS8位单片机,片内含8K字节ISP的可反复擦写1000次的flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S52性能简介:
AT89S52具有如下特点:
40个引脚,8K字节Flash片内程序存储器,256字节的随机存储数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S52设计和配置了振荡频率可为0Hz可通过软件设置省电模式,空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需要。
其引脚图如图6所示:
图6AT89S52引脚图
主要功能特性:
·兼容MCS-51指令系统
·全双工UART串行中断口线
·低功耗空闲和省电模式
·中断唤醒省电模式
·双数据寄存器指针
·8k可反复擦写(>1000次)ISPFlashR
·32个双向I/O口
·4.5-5.V工作电压
·3个16位可编程定时/计数器
·3个16位可编程定时/计数器
·时钟频率0-33MHz
·2个外部中断源
·3个16位可编程定时/计数器
·看门狗(WDT)电路
·软件设置空闲和省电功能
·灵活的ISP字节和分页编程
3.3.2LCD1602A显示器
现在的字符型液晶显示器模块已经是单片机应用设计中最常用的信息显示器件了。
1602A型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602A型LCD可以显示2行16个字符,有8位数据总线D0-D7和RS,RW,E三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
1602A型LCD的接口信号说明如表1所示:
表11602A型LCD的接口信号说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
DATAI/O
2
VDD
电源正极
10
D3
DATAI/O
3
V0
液晶显示偏压信号
11
D4
DATAI/O
4
RS
数据/命令选择端
12
D5
DATAI/O
5
RW
读写选择端
13
D6
DATAI/O
6
E
使能信号
14
D7
DATAI/O
7
D0
DATAI/O
15
BLA
背光源正极
8
D1
DATAI/O
16
BLK
背光源负极
1602A型LCD的主要技术参数如表2所示:
表21602A型LCD的主要技术参数
显示容量
16×2个字符
芯片工作电压
4.5~5.5V
工作电流
2.0mA
模块最佳工作电压
5.0V
字符尺寸
2.95×4.35mm
基本操作程序:
读状态:
输入:
RS=L,RW=L,E=H
输出:
D0~D7=状态字
读数据:
输入:
RS=H,RW=H,E=H
输出:
无
写指令:
输入:
RS=L,RW=L,D0~D7=指令码,E=高脉冲
输出:
D0~D7=数据
写数据:
输入:
RS=H,RW=L,D0~D7=数据,E=高脉冲
输出:
无
3.3.3元器件清单
元器件清单见附录D
4软件系统的设计
4.1密码锁使用单片机资源的情况
本系统程序部分使用C语言编写,C语言是一种高级程序设计语言,它的优点是简洁明了、可移植性高。
P2口作为显示输出,P1口作为键盘输入,P3.6脚和P3.5脚分别与开锁电路与报警电路相连,P3.1、P3.0分别于液晶显示器的E、RS脚相连。
RST脚接复位电路,XTAL1和XTAL2脚接晶振电路。
4.2密码锁系统各模块功能简要介绍
键盘和显示程序:
开始时数码管显示提示“INPUTPASSWORD:
”输入密码。
输入密码后按下确认键,系统会将所输入与系统密码进行比对。
若输入密码正确显示器显示“MissionSuccess!
”。
若密码不正确,则显示“ForgotPassword?
”,显示器判断是否有键按下,如果有,确定按键位子,键盘对应的功能。
主程序实现各初始化,启动程序,键盘扫描。
4.3软件系统程序流程框图
(1)主程序流程图如图7所示:
图7主程序流程图
主程序清单:
voidmain()
{
uinti;/*预置初始化*/
P30=1;/*开启数据/命令*/
P31=0;/*禁止读写*/
P35=0;/*关闭报警*/
P36=0;/*关闭开锁*/
write_com(0X38);/*设置数据总线为8位,分2行显示*/
delay(5);
write_com(0X01);/*显示器清零,光标归位*/
delay(5);
write_com(0X0f);/*打开显示功能*/
delay(5);
write_com(0X06);/*每写入一个数据光标右移*/
delay(5);
write_com(0X80+0X00);/*写入字符码,显示器显示相应字符*/
delay(5);
for(i=0;i<15;i++)
{
write_dat(table[i]);/*显示器显示INPUTPASSWORD:
等待输入密码*/
delay(10);
}
write_com(0Xc0);/*输入指令*/
delay(5);
while
(1){
if(key_press())/*如果有键按下*/
{
key_scan();/*键盘扫描*/
}
}
}
voidkey_scan()/*确认所按按键的具体位置*/
{ucharkey,i=0X7F,j;
delay(10);
if(key_press());/*如果有键按下*/
{
do{
i=(i<<1)|(i>>7);/*行列扫描*/
P1=i;/*输出行扫描码*/
key=P1;
j=key&0XF0;
}while(j==0XF0);/*有键按下*/
while(key_press());/*定义键码*/
switch(key)
{
case0X7E:
key=0;break;/*定义第1行第1列键码值为0*/
case0XBE:
key=1;break;/*定义第1行第2列键码值为1*/
case0XDE:
key=2;break;/*定义第1行第3列键码值为2*/
case0X7D:
key=3;break;/*定义第2行第1列键码值为3*/
case0XBD:
key=4;break;/*定义第2行第2列键码值为4*/
case0XDD:
key=5;break;/*定义第2行第3列键码值为5*/
case0X7B:
key=6;break;/*定义第3行第1列键码值为6*/
case0XBB:
key=7;break;/*定义第3行第2列键码值为7*/
case0XDB:
key=8;break;/*定义第3行第3列键码值为8*/
case0X77:
key=9;break;/*定义第4行第1列键码值为9*/
case0XB7:
key=10;break;/*定义第4行第2列键码值为10*/
case0XD7:
key=11;break;/*定义第4行第3列键码值为11*/
}
if(key<10)
{new[k]=key;k++;/*key<10为密码输入*/
write_dat(table1[0]);/*定义密码输入时显示符号**/
}
elseif(key==11)jiaodui();/*定义11为确定键*/
elseif(key==10){k=0;write_com(0X80+0X40);}/*定义10为复位键*/
}
}
(2)开锁程序流程图如图8所示:
图8开锁程序流程图
开锁程序清单:
voidjiaodui()
{uchari=0,j=0;
while(password[i]==new[i])/*密码比较*/
{i++;
if(i==8)break;}
if(i==8)/*如果密码全部正确*/
{P36=1;/*开锁(绿灯亮)*/
write_com(0X80+0X40);/*写入字符码,显示器显示相应字符*/
delay(5);/*调用延时*/
for(i=0;i<17;i++)
{
write_dat(table2[i]);/*显示器显示MissionSuccess!
*/
delay(20);
}}
else
if(i<8)/*密码错误*/
{P35=1;/*警告(红灯亮)*/
write_com(0X80+0X40);/*写入字符码,显示器显示相应字符*/
delay(5);/*调用延时*/
for(i=0;i<17;i++)
{
write_dat(table3[i]);/*显示器显示ForgotPassword?
*/
delay(20);
}
while
(1);
}
elseif(j!
=3)
{k=0;
write_com(0X80+0X40);/*锁定键盘*/
}
}
4.4软件系统程序清单
程序清单见附录D
5设计总结
5.1设计结论及使用说明
本程序从经济实用的角度出发,采用美国Atmel公司的单片机AT89S52作为控制中心,结合外围的键盘输入、显示、报警、开锁等电路并用汇编语言编写主控芯片的控制程序,研制了一款具有报警功能的电子密码锁。
设计基本达到设计目的。
使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本低,安全可靠,操作方便等特点,可用于住宅、办公室的保险箱及档案柜等需要防盗的场所,有一定的实用性。
该电路设计还具有按键有效提示,输入错误提示,控制开锁电平,控制报警电路等功能。
保密性强,灵活性高,特别适用于家庭、办公室、学生宿舍及宾馆等场所。
使用说明:
本密码锁初始密码为88888888,当用户要开锁时,先要打开电源开关,显示器上会显示“INPUTPASSWORD:
”,提示用户输入密码,输完密码后,按下确定键后显示器上显示“MissionSuccess!
”,提示锁打开,同时LED绿灯亮;若在输入的时候发现输入不对,可按复位键重新输入。
若密码不正确,显示器显示“ForgotPassword?
”,LED红灯亮,实现开锁,如果输入不正确,密码锁就会报警,并将键盘锁定,无法进行任何操作。
5.2仿真结果
(1)打开电源开关,显示器上显示“INPUTPASSWORD:
”,提示输入密码。
图9提示输入密码仿真图
(2)密码输入正确后,显示器显示“MissionSuccess!
”,提示锁打开。
图10密码输入正确后仿真图
(3)密码不正确后,显示器显示“ForgotPassword?
”。
图11密码输入错误后仿真图
5.3误差分析
当硬件电路焊接完成调试,发现蜂鸣器一直处于报警状态,而仿真时并未出现这种现象。
用万用表检查电压发现三极管一直处于导通状态,基极电压大于导通电压。
主要原因是口P3.5的电压不为零,而电阻不够大,不足以分压使得基极电压小于三极管的开启电压,导致三极管一直处于导通状态。
解决办法:
将原来电阻取下,换成大电阻,这样就能在电阻上分得很大的电压使得基极电压小于三极管的开启电压。
5.4设计体会
通过本次课程设计实践,我对单片机有了更深的理解。
同时也加深了对设计方法的理解,进一步理解了软件设计中整体与局部的关系,本次实践我就运用了从整体到局部的设计思想,达到了满意的效果,它使我少走了很多弯路,既节约了时间,又很好的组织了软件系统各部的联系。
同时也对Proteus软件有了更熟悉的操作,硬件电路的制作(如PCB的绘制和电路的焊接等)又有了进一步的提高。
不过也发现了自己的很多不足。
主要是C编还是没有完全能应用自如,这方面与不少同学有很大的差距,还需继续努力。
5.5教学建议
对于单片机与C编语言的学习,我觉得应该加强创造性思维的培养,同时结合实验加以实践。
我觉得思维是知识的灵魂,只有加强了思维的训练与培养,才能使知识的能量达到最大化。
就像好的文章要有好的作家,要有他们那种创造精妙语言的思维,软件系统设计也是一种对语言的运用实践,精妙的思维也就必不可少。
创造性思维是丰富的,因此应加强老师与同学们、同学们之间的思维互动,加强探讨,加强课程设计实践。
结束语
此次单片机课程设计我们差不多历时一个学期。
从开始接触单片机开始,就在凌云老师的教导下学会了protel原理图的绘制,并绘制了PCB图,学会了单片机系统的的仿真,同时也制作了第一块单片机实物。
因为操作的不熟练,出现了不少错误,尤其是布局的不科学而导致最后的布线出现了不少麻烦。
最后在制作实物时由于焊接的经验不足,导致而虚焊,最后利用万用表仔细检查后才得以顺利完成硬件制作任务。
在编程时使我认识到本人对单片机方面知识的不足,尤其是C编。
对于书本上的很多知识还不能灵活运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得花费的时间和精力不少。
通过此次密码锁的设计,使我对单片机有了进一步的了解与掌握,本次的设计使我从中学会了如何从理论到实践的转化,此次设计给我奠定了一个实践基