基于单片机的数字密码锁设计.docx
《基于单片机的数字密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字密码锁设计.docx(13页珍藏版)》请在冰点文库上搜索。
基于单片机的数字密码锁设计
郑州航空工业管理学院
单片机课程设计说明书
2011届电子信息工程专业1113082班级
题目基于单片机的数字密码锁设计
学号111308207
姓名凡涛
指导教师周鹏
二О一三年十二月二十八日
一、基于单片机的数字密码锁的基本原理
本设计选用单片机STC89C52RC作为核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接四位数码管用于显示作用,输入错误显示”OFF”,输入密码正确显示”ON”,密码正确才可以重置密码。
先通过程序将初始密码储存到单片机的ROM存储器中,当输入新密码时就判断所输入密码是否与初始密码相同,输入完成按下确认键,若不同,则在数码管上显示错误提示”OFF”,若相同则显示正确提示,重置密码则是向单片机ROM重新存储数据。
这样,即可实现密码锁的解锁,密码重置等功能。
二、数字密码锁的硬件设计
1、时钟电路设计
时钟产生方式包括内部振荡方式和外部时钟方式两种,本设计采用外部时钟方式,如图1所示,振荡源由12M晶振,和两个微调电容C1,C2组成,与单片机的XTAL1和XTAL2相连接,便可为单片机产生时钟信号。
图1
2、手动复位电路
单片机STC89C52RC的复位信号是由RST引脚输入,高电平有效。
当RST引脚输入高电平并保持2个机器周期以上时,单片机内部就会执行复位操作。
本设计采用手动复位设计,如图2所示,手动复位时电容C3通过1K电阻R3迅速放电,使RST端迅速变为高电平,即可实现复位。
图2
3、显示电路设计
显示电路是由4个共阳极数码管构成,软件编程时采用动态显示方法,其结构图如图3所示。
图3
数码管是由发光二极管组成,有共阴和共阳之分,对于共阳极来说,一位数码管由八个二极管组成,它们的阳极接在一起,接+5V电源,而各个阴极与某个端口如P1的8个引脚相连接,当某个引脚输出低电平的时候,数码管对应的二极管点亮。
4、接口电路设计
本设计采用MAX232芯片实现单片机与计算机的连接。
如图4所示。
图4
5、数字密码锁的完整原理图
6、元器件列表
序号
器件名称
参数
数量
1
USB座
1
2
USB线
1
3
双排针
(2)
1
4
跳帽
2
5
104电容
0.1uF
6
6
LED灯
1
7
电阻
2K
1
8
STC89C52
1
9
晶振
12MHz
1
10
电容
20pF
2
11
复位键
1
12
电阻
10K
1
13
蜂鸣器
1
14
三极管9015
5
15
电阻
330
1
16
16针座
1
17
MAX232
1
18
单排针(5)
1
19
按键
8
20
单排针(3)
1
21
跳帽
1
22
4位LED数码管
1
23
电阻
4.7K
8
24
电阻
330
8
三、数字密码锁的软件设计
1、密码锁设计的程序流程图
系统初始化
2、源程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
/*0123456789灭fn口_gd二全亮Pe*/
ucharcodeDuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x8e,0xc8,0x9c,0xf7,0x90,0xa1,0xfd,0x00,0x8c,0x86};//共阳
ucharcodeWeiMa[]={0x7f,0xbf,0xdf,0xef};//位码
voiddelay_50us(uintt);
ucharxianshi[]={14,14,14,14};
unsignedcharpw[4]={8,8,8,8};
unsignedcharpwin[4]={0,0,0,0};
bitupdataflag;
bitpwflag;//密码正确
ucharcount;//密码位计数
voiddisplay(uchar*point);
voiddelayaj();
voiddelay();
voidbijiao(void);
unsignedcharkeyscan(void);
voidanjian_xianshi();
voidmain()
{
count=0;updataflag=0;pwflag=0;
while
(1){
anjian_xianshi();
display(xianshi);
}
}
voiddelay(uintz)
{
ucharj=244;
for(;z>0;z--)while(--j);
}
voiddelay_50us(uintt)
{
ucharj;
for(;t>0;t--)
for(j=19;j>0;j--)
;
}
voiddelayaj(ucharddd)
{
uchardd;
for(dd=0;dddisplay(xianshi);
}
voiddisplay(uchar*point)
{
unsignedchari=0;
for(i=0;i<4;i++)
{
P2=WeiMa[i];//取位
P0=DuanMa[*(point+i)];
delay_50us(20);
P0=0xFF;//消除重影
P2=0x0;
}
}
voidbijiao(void)
{
unsignedcharj,aa;
aa=0;
for(j=0;j<4;j++)
{
if(pw[j]==pwin[j])
{
aa++;
if(aa==4)
{
pwflag=1;
}
}
else
{pwflag=0;j=4;}
}
if(count<4)//密码小于4位,直接显示OFF
{pwflag=0;count=4;}
if(pwflag==1)//正确显示ON
{xianshi[0]=10;
xianshi[1]=0;
xianshi[2]=12;
xianshi[3]=10;
}
else
{xianshi[0]=10;//显示off
xianshi[1]=0;
xianshi[2]=11;
xianshi[3]=11;
}
}
unsignedcharkeyscan(void)
{
unsignedcharkeyvalue;
P3=0x7F;
switch(P3)
{
case0x7E:
keyvalue=1;break;
case0x7D:
keyvalue=2;break;
case0x7B:
keyvalue=3;break;
case0x77:
keyvalue=4;break;
default:
keyvalue=17;break;
}
if(keyvalue==17)
{
P3=0xBF;
switch(P3)
{
case0xBE:
keyvalue=5;break;
case0xBD:
keyvalue=6;break;
case0xBB:
keyvalue=7;break;
case0xB7:
keyvalue=8;break;
default:
keyvalue=17;break;
}
if(keyvalue==17)
{
P3=0xDF;
switch(P3)
{
case0xDE:
keyvalue=9;break;
case0xDD:
keyvalue=10;break;
case0xDB:
keyvalue=11;break;
case0xD7:
keyvalue=12;break;
default:
keyvalue=17;break;
}
if(keyvalue==17)
{
P3=0xEF;
switch(P3)
{
case0xEE:
keyvalue=13;break;
case0xED:
keyvalue=14;break;
case0xEB:
keyvalue=15;break;
case0xE7:
keyvalue=16;break;
default:
keyvalue=17;break;
}
}
}
}
returnkeyvalue;
}
voidanjian_xianshi()
{ucharn,j;
n=keyscan();
if(n!
=17)
{if(1<=n&&n<=8)
{
if(count<4)
{xianshi[count]=13;
if(updataflag==1)//按下修改密码键
pw[count]=n;
else
pwin[count]=n;
count++;
delay(350);
}
}
elseif(n==14)//确认密码键
{
if(updataflag==0)
bijiao();
else
{
xianshi[0]=15;//good
xianshi[1]=13;
xianshi[2]=13;
xianshi[3]=16;
delayaj(1000);
updataflag=0;
}
}
elseif(n==15)//重新输入键
{
for(j=0;j<4;j++)
xianshi[j]=14;
count=0;pwin[0]=0;pwin[1]=0;pwin[2]=0;pwin[3]=0;
}
elseif(n==16&pwflag==1)//重设密码键
{updataflag=1;
for(j=0;j<4;j++)
xianshi[j]=18;
count=0;pwin[0]=0;pwin[1]=0;pwin[2]=0;pwin[3]=0;
}
}
}
四.课程设计总结
为了能够更好地完成这次课程设计的任务,我通过不同的渠道学习课
题相关的一些知识,这是我课堂上无法学到的,在这短暂的时间里不仅
让我对学过的东西有了很多的巩固,同时也对单片机这一门课程有了
更大的兴趣。
作为一名电子信息工程专业的大三学生,单片机作为我们最主要的
专业课之一,在这课程设计后我们发现自己在一点一滴的努力对单片机
的兴趣在增加,我觉得这次课程设计对我们来说非常重要,虽然过去从
未用过它,但是学习过程中带着问题去学我们发现效率很高,这是我们
课程设计的又一个收获。
五.指导教师评语
成绩指导教师签名