单片机课程设计密码锁文档格式.docx

上传人:b****5 文档编号:19283344 上传时间:2023-01-05 格式:DOCX 页数:30 大小:621.83KB
下载 相关 举报
单片机课程设计密码锁文档格式.docx_第1页
第1页 / 共30页
单片机课程设计密码锁文档格式.docx_第2页
第2页 / 共30页
单片机课程设计密码锁文档格式.docx_第3页
第3页 / 共30页
单片机课程设计密码锁文档格式.docx_第4页
第4页 / 共30页
单片机课程设计密码锁文档格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

单片机课程设计密码锁文档格式.docx

《单片机课程设计密码锁文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计密码锁文档格式.docx(30页珍藏版)》请在冰豆网上搜索。

单片机课程设计密码锁文档格式.docx

(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显示部分

为了使该密码锁能人性化的显示输入密码的状态以及密码输入正确与否和提高密码锁的密码显示效果能力。

否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键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位可编程定时/计数器

时钟频率0-33MHz

2个外部中断源

看门狗(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

3

V0

液晶显示偏压信号

11

D4

4

RS

数据/命令选择端

12

D5

5

RW

读写选择端

13

D6

6

E

使能信号

14

D7

7

D0

15

BLA

背光源正极

8

D1

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密码锁系统各模块功能简要介绍

键盘和显示程序:

输入密码后按下确认键,系统会将所输入与系统密码进行比对。

若输入密码正确显示器显示“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);

/*显示器清零,光标归位*/

write_com(0X0f);

/*打开显示功能*/

write_com(0X06);

/*每写入一个数据光标右移*/

write_com(0X80+0X00);

/*写入字符码,显示器显示相应字符*/

for(i=0;

i<

15;

i++)

{

write_dat(table[i]);

/*显示器显示INPUTPASSWORD:

等待输入密码*/

delay(10);

}

write_com(0Xc0);

/*输入指令*/

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;

/*定义第1行第2列键码值为1*/

case0XDE:

key=2;

/*定义第1行第3列键码值为2*/

case0X7D:

key=3;

/*定义第2行第1列键码值为3*/

case0XBD:

key=4;

/*定义第2行第2列键码值为4*/

case0XDD:

key=5;

/*定义第2行第3列键码值为5*/

case0X7B:

key=6;

/*定义第3行第1列键码值为6*/

case0XBB:

key=7;

/*定义第3行第2列键码值为7*/

case0XDB:

key=8;

/*定义第3行第3列键码值为8*/

case0X77:

key=9;

/*定义第4行第1列键码值为9*/

case0XB7:

key=10;

/*定义第4行第2列键码值为10*/

case0XD7:

key=11;

/*定义第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;

/*开锁(绿灯亮)*/

/*调用延时*/

17;

write_dat(table2[i]);

/*显示器显示MissionSuccess!

*/

delay(20);

}}

else

if(i<

8)/*密码错误*/

{P35=1;

/*警告(红灯亮)*/

write_com(0X80+0X40);

delay(5);

for(i=0;

write_dat(table3[i]);

/*显示器显示ForgotPassword?

*/

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编。

对于书本上的很多知识还不能灵活运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得花费的时间和精力不少。

通过此次密码锁的设计,使我对单片机有了进一步的了解与掌握,本次的设计使我从中学会了如何从理论到实践的转化,此次设计给我奠定了一个实践基

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1