单片机密码锁课程设计.docx
- 文档编号:8073580
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:23
- 大小:351.99KB
单片机密码锁课程设计.docx
《单片机密码锁课程设计.docx》由会员分享,可在线阅读,更多相关《单片机密码锁课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
单片机密码锁课程设计
《单片机原理及应用课程设计》报告
——单片机密码锁课程设计
专业:
班级:
姓名:
学号:
2013年5月
1.课程设计目的
1.1巩固和加深对单片机原理和接口技术知识的理解;
1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;
1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;
1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;
1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.课程设计要求
以单片机为核心,设计一个电子密码锁:
只有通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。
密码可以由用户自己修改设定。
修改密码之前必须再次输入密码,以防止误操作。
3.硬件设计
3.1设计思想
本设计主要由单片机、矩阵键盘、液晶显示器等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确。
本系统共有两部分构成,即硬件部分与软件部分。
其中硬件部分由键盘输入部分、显示部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、按键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
3.2主要元器件介绍
3.2.1主控芯片AT89S51
AT89S51性能简介
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
其主要功能特性:
兼容MCS-51指令系统4k可反复擦写ISPFlashROM
32个双向I/O口4.5-5.5V工作电压
2个16位可编程定时/计数器时钟频率0-33MHz
全双工UART串行中断口线128x8bit内部RAM
2个外部中断源低功耗空闲和省电模式
中断唤醒省电模式3级加密位
看门狗(WDT)电路软件设置空闲和省电功能
灵活的ISP字节和分页编程双数据寄存器指针
3.2.2LCD1602显示器
现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数据总线D0-D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比
度调节和背光功能。
接口信号说明
1602型LCD的接口信号说明如表3-1所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
DataI/O
2
VDD
电源正极
10
D3
DataI/O
3
V0
液晶显示偏压信号
11
D4
DataI/O
4
RS
数据/命令选择端(H/L)
12
D5
DataI/O
5
R/W
读写选择端(H/L)
13
D6
DataI/O
6
E
使能信号
14
D7
DataI/O
7
D0
DataI/O
15
BLA
背光源正极
8
D1
DataI/O
16
BLK
背光源负极
图3-11602型LCD的接口信号说明
主要技术参数
1602型LCD的主要技术参数如下表所示:
显示容量
16X2个字符
芯片工作电压
4.5~5.5V
工作电流
2.0mA(5.0V)
模块最佳工作电压
5.0V
字符尺寸
2.95X4.35(WXH)mm
图3-21602型LCD的主要技术参数
1602基本操作步骤
读状态:
输入:
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原理图及功能电路介绍
在确定了选用什么型号的单片机后,就要确定在外围电路,其外围电路包括电源输入部
分、键盘输入部分、显示部分组成,根据实际情况键盘输入部分选择4*4矩阵键盘,显示部分选择字符型液晶显示LCD1602。
其仿真图如图3-3所示:
图3-3电路仿真图
3.3.1键盘输入部分
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。
采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。
本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。
键盘的每个按键功能在程序设计中设置。
其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3-4所示:
图3-4键盘按键引脚图
3.3.2显示部分
为了提高密码锁的密码显示效果能力。
本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。
只有按下键盘上的开启按键后,显示器才处于开启状态。
同理只有按下关闭按键后显示器才处于关闭状态。
否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。
当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD子显示“RIGHT”,单片机其中P2.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“ERROR”,P2.0输出的是高电平,电子密码锁不能被打开。
通过LCD显示屏,可以清楚的判断出锁所处的状态。
其显示部分引脚接口如图3-5所示:
图3-51602显示屏引脚图
4.软件设计
本系统软件设计由主程序模块、初始化模块、LCD显示模块、键盘扫描模块、键功能程序、密码设置程序等组成。
4.1主程序模块
主程序流程图如图4-1所示:
图4-1主程序流程图
主程序代码如下所示:
main()
{
L1602_init();
while
(1)
{
keydown();
}
}
4.2按键功能模块
按键功能流程图如图4-2所示:
图4-2按键功能流程图
按键功能程序代码如下所示:
if(key==11)
{
L1602_string(1,1,"inputoldcode");
L1602_string(2,1,"");
i=0;j=1;
flag2=1;
}
if(key==12)
{
L1602_string(1,1,"inputyourcode");
L1602_string(2,1,"");
i=0;j=1;
}
if(key==13)
{
L1602_string(1,1,"showpassword");
for(k=0;k<6;k++)
{L1602_char(2,k+1,init_val[k]+48);}
delayms(255);delayms(255);delayms(255);delayms(255);
L1602_string(2,1,"");
}
if(key==14)
{
if(flag==1)
{
if(m!
=0)
{L1602_char(2,n-1,0);delayms(255);m--;n--;}
}
else
{
if(i!
=0)
{L1602_char(2,j-1,0);delayms(255);i--;j--;}
}
}
if(key==15)
{
L1602_string(1,1,"alreadyreset");
L1602_string(2,1,"");
for(i=0;i<6;i++){init_val[i]=1;show_val[i]=0;}
i=0,j=1,m=0,n=1,flag=0,flag2=0;
}
}
4.3修改密码模块
修改密码程序流程图如图4-3所示。
图4-3密码设置流程图
修改密码程序代码如下所示:
if(key==10)
{
if(check_input_pw()==1)
{
L1602_string(1,1,"inputerror");
L1602_string(2,1,"");
i=0;j=1;
delayms(255);
times++;
if(times==3)
{
P3=0xfe;
L1602_string(1,1,"systemclocked");
while
(1){};
}
L1602_string(1,1,"inputcodeagain");
L1602_string(2,1,"");
}
else
{
L1602_string(1,1,"dooropen");
L1602_string(2,1,"");
P3=0X7F;
delayms(255);delayms(255);
P3=0XFF;
}
}
4.4开锁模块
开锁程序流程图如图4-4所示:
图4-4开锁流程图
开锁程序代码如下所示:
if(check_input_pw()==1)
{L1602_string(1,1,"inputerror");
L1602_string(2,1,"");
i=0;j=1;
delayms(255);
times++;
if(times==3)
{P3=0xfe;
L1602_string(1,1,"systemclocked");
while
(1){};
}
L1602_string(1,1,"inputcodeagain");
L1602_string(2,1,"");
}
else
{L1602_string(1,1,"dooropen");
L1602_string(2,1,"");
P3=0X7F;
delayms(255);delayms(255);
P3=0XFF;
}
4.5源程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
staticucharshow_val[6];
staticucharinit_val[6]={1,1,1,1,1,1};
ucharkey,times=0;
unsignedcharcodekey_code[]={0Xee,0Xed,0Xeb,0Xe7,0Xde,0Xdd,0Xdb,0Xd7,0Xbe,
0Xbd,0Xbb,0Xb7,0x7e,0x7d,0x7b,0x77};
//以下是1602程序
sbitE=P2^2;//1602使能引脚
sbitRW=P2^1;//1602读写引脚
sbitRS=P2^0;//1602数据/命令选择引脚
voiddelay()
{
inti,j;
for(i=0;i<=100;i++)
for(j=0;j<=20;j++)
;
}
voidenable(uchardel)
{
P0=del;
RS=0;
RW=0;
E=0;
delay();
E=1;
delay();
}
voidwrite(uchardel)
{
P0=del;
RS=1;
RW=0;
E=0;
delay();
E=1;
delay();
}
voidL1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
voidL1602_char(ucharhang,ucharlie,charsign)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
write(sign);
}
voidL1602_string(ucharhang,ucharlie,uchar*p)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
while
(1)
{
if(*p=='\0')break;
write(*p);
p++;
}
}
//以上是1602显示程序
voiddelayms(uintms)
{
uchart;
while(ms--)
{
for(t=0;t<120;t++);
}
}
uintcheck_input_pw()
{
uinti,k;
k=0;
for(i=0;i<6;i++)
{
if(show_val[i]!
=init_val[i])k=1;
}
returnk;
}
ucharkeyscan()
{
ucharscan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!
=0xf0)//判键是否按下
{
delayms(30);//延时30ms
scan1=P1;
if((scan1&0xf0)!
=0xf0)//二次判键是否按下
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2;//组合成键编码
for(j=0;j<=15;j++)
{
if(keycode==key_code[j])
{
key=j;
returnkey;
}
}
}
}
elseP1=0xff;
}
voidkeydown()
{
staticuchari=0,j=1,m=0,n=1,flag=0,flag2=0;
uchark;
P1=0xf0;
if((P1&0xf0)!
=0xf0)
{
keyscan();
if(key<10)
{
if(flag==1)
{
init_val[m]=key;
L1602_char(2,n,key+48);
delayms(255);
m++;
n++;
if(m==6)
{
m=0;n=1;flag=0;
L1602_string(1,1,"getnewcode");
L1602_string(2,1,"");
}
}
else
{
L1602_string(1,1,"inputtingcode");
L1602_string(2,j,"*");
show_val[i]=key;
i++;
j++;
if(i==6)
{
i=0;j=1;
if(flag2==1)
{
if(check_input_pw()==0)
{
L1602_string(1,1,"coderight");
delayms(255);
flag=1;flag2=0;
L1602_string(1,1,"inputnewcode");
L1602_string(2,1,"");
}
else
{
L1602_string(1,1,"codewrong");
L1602_string(2,1,"inputcodeagain");
}
}
}
}
}
if(key==10)
{
if(check_input_pw()==1)
{
L1602_string(1,1,"inputerror");
L1602_string(2,1,"");
i=0;j=1;
delayms(255);
times++;
if(times==3)
{
P3=0xfe;
L1602_string(1,1,"systemclocked");
while
(1){};
}
L1602_string(1,1,"inputcodeagain");
L1602_string(2,1,"");
}
else
{
L1602_string(1,1,"dooropen");
L1602_string(2,1,"");
P3=0X7F;
delayms(255);delayms(255);
P3=0XFF;
}
}
if(key==11)
{
L1602_string(1,1,"inputoldcode");
L1602_string(2,1,"");
i=0;j=1;
flag2=1;
}
if(key==12)
{
L1602_string(1,1,"inputyourcode");
L1602_string(2,1,"");
i=0;j=1;
}
if(key==13)
{
L1602_string(1,1,"showpassword");
for(k=0;k<6;k++)
{L1602_char(2,k+1,init_val[k]+48);}
delayms(255);delayms(255);delayms(255);delayms(255);
L1602_string(2,1,"");
}
if(key==14)
{
if(flag==1)
{
if(m!
=0)
{L1602_char(2,n-1,0);delayms(255);m--;n--;}
}
else
{
if(i!
=0)
{L1602_char(2,j-1,0);delayms(255);i--;j--;}
}
}
if(key==15)
{
L1602_string(1,1,"alreadyreset");
L1602_string(2,1,"");
for(i=0;i<6;i++){init_val[i]=1;show_val[i]=0;}
i=0,j=1,m=0,n=1,flag=0,flag2=0;
}
}
}
main()
{
L1602_init();
while
(1)
{
keydown();
}
}
5.调试运行
当按下“我要开锁”键,实现
接着输入密码111111,实现
当按下密码显示,实现
当按下修改密码,实现
当按下初始化,实现
当密码在三次及三次以内被输入正确时,二极管绿灯亮;当密码在输入三次以上错误时,二极管红灯亮,起到报警的功能。
6.设计心得体会
经过紧张设计,终于顺利完成了设计任务。
本次课程设计主要是针对密码锁系统做了详细介绍,以AT89S51单片机为核心,并运用LCD1602信息显示器,通过调试运行可以实现密码输入的相关信息,通过十位数字按键(0—9)设置密码,实现设计要求所需要完成的功能。
通过课程设计让我对单片机系统有了较详细的了解,而且触及到与其相关的很多新知识,而且随着电子技术的发展简易数字电压表也会越来越完善,作为大学生的我们应该跟上时代的步伐,时刻关注形势的变化,不断充实更新自己的知识。
在设计中既应用到了基础知识,也用到了专业知识,它是对三年来所学知识的考察。
最重要的是我通过这次的课程设计,亲自画了原理图,增强了对keil以及protues软件运用熟练程度,这对我以后的学习和工作将有很大的帮助。
参考书目:
[1]石文轩,宋薇.基于单片机MCS-51的智能密码锁设计[M].武汉工程职业技术学院学报,2004,(01)
[2]袁新燕。
浅谈单片机应用系统的调试[J]。
自动化与仪器仪表,2000,(03)
[3]童诗白,华成英,模拟电子技术基础[M],北京:
高等教育出版社,2000
[4]阎石主.数字电子技术基础[M],北京:
高等教育出版社,1998
[5]吴春国,李文石。
单片机控制电子锁技术剖析[S]。
东北林业大学学报,2002,(05)
[6]李景宏,马学文。
电子技术实验教程[M]。
沈阳:
东北大学出版社,2004
[7]贾正松。
单片机系统复位电路设计[J]。
科技资讯,2007,(36)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 密码锁 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)