简易电子密码锁
科信学院
课程设计说明书
(2010/2011学年第 二学期)
课程名称 : 单片机应用 题 目 : 简易电子密码锁 专业班级 : 学生姓名 : 学 号: 指导教师 : 设计周数 : 两周
设计成绩 :
2011年6月24日
目录
1、课程设计目的 .............................................................................................................................. 2 2、设计方案简述 .............................................................................................................................. 2
2.1设计思路 ............................................................................................................................. 2 2.2 设计原理框图 .................................................................................................................... 2 2.3 设计原理分析 .................................................................................................................. 3 2.4 硬件设计 ............................................................................................................................ 3
2.4.1单片机最小系统 ..................................................................................................... 3 2.4.2 密码显示电路 ........................................................................................................ 6 2.4.3 键盘电路 ................................................................................................................ 6 2.4.4 报警电路 ................................................................................................................ 7 2.5 程序设计 ............................................................................................................................ 8
2.5.1程序分析 ................................................................................................................. 8 2.5.2 程序编写 ................................................................................................................ 8 2.6 设计结果及分析 .............................................................................................................. 17
2.6.1性能指标 ............................................................................................................... 17 2.6.2不足之处 ............................................................................................................... 17 2.6.3性能改进方案 ....................................................................................................... 17
3、课程设计总结或结论 ................................................................................................................ 18 4、参考文献 .................................................................................................................................... 19
1、课程设计目的
随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。现在市场上主要是基于单片机技术的电子密码锁,但可靠性较差。通常简单的数字电路就可实现密码不限次数重写,也就是说现在的硬件设计和软件设计一样灵活、方便。相对于基于单片机技术的电子密码锁,用简单门电路来来构成系统,可靠性提高,并且价格便宜。
通过本次设计掌握数字电路系统设计的方法,熟悉电子密码锁设计相关硬件的使用,了解电子密码锁的系统构成,利用数字门电路实现电子密码锁的设计与实现,可以加深自己对所学专业的认识,关联知识,增强自己的动手能力,积累实践经验,为以后的工作打好基础。
2、设计方案简述
2.1设计思路
打开一把电子密码锁的关键在于正确的输入密码 , 本设计提供了一个 3位拨码式按键输入开关 , 一个3位拨码式按键密码预设开关。用户必须按下确认按钮后方可知用户输入的密码是否与预置密码一致, 一致时密码锁可打开 , 本设计有高低电平检测装置。如锁控制端为高电平发光二极管亮则锁可以打开。密码不正确时,则再次提示输入密码,如三次密码不正确蜂鸣器响,为了方便测试按取消键可取消报警。
2.2 设计原理框图
设计原理方框图如图2-1所示 。
图 2-1 设计原理方框图
2.3 设计原理分析
密码锁电路包含 :拨码设密、拨码输入 、密码检测 、脉冲电路 、开锁示意电路 、报警电路以及显示电路 。
2.4 硬件设计
2.4.1单片机最小系统
51单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。单片机最小系统晶振Y1也可以采用6MHz 或者11.0592MHz ,在正常工作的情况下可以采用更高频率的晶振,晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k 。
单片机接线电路如下图:
图2-2 单片机接线图
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片, 使用+5v单电源供电。在这里为电脑和单片机通讯进行电平转换。 MAX232转换电路如下:
图2-3 MAX232电路
串口接口电路如下:
图2-4 串口接口电路
2.4.2 密码显示电路
显示电路采用共阳极数码管显示,用三个pnp 型三极管进行驱动,p1.0、p1.1、p1.2口控制。 显示电路如下图:
图2-5 密码显示电路
2.4.3 键盘电路
采用4*4键盘,用线翻转法和逐行扫描法进行判定是否有按键按下并且读取相应键值。 键盘电路如下:
图2-6 键盘电路
2.4.4 报警电路
采用鸣声器报警。有一pnp 型三极管驱动,p1.4进行控制。 报警电路如下图:
图2-7 鸣声器报警电路
2.5 程序设计
2.5.1程序分析
通对电子密码锁要求分析绘制程序流程图如下图所示:
图 2-8 主程序流程图
2.5.2 程序编写
/******************************************************************** * 文件名 : 简易电子密码锁
*********************************************************************/ #include #include
#define uint unsigned int #define uchar unsigned char
uchar mima[3] ={0,0,0};
uchar cuowu,mima2[3]={10,10,10},jishu,baojing2; sbit Show_MEN = P1^3; sbit LED1 = P1^0; sbit LED2 = P1^1;
sbit LED3 = P1^2; sbit BAOJING = P1^4; uchar
code
table[16]
=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x31,0xbf,0xbf,0xbf,0xbf}; // 共阴极
/******************************************************************** * 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无
***********************************************************************/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j
}
/******************************************************************** * 名称 : delay()
* 功能 : 延时, 延时时间大概为140US 。 * 输入 : 无 * 输出 : 无
***********************************************************************/
void delay() {
int i,j;
for(i=0; i
for(j=0; j
}
/********************************************************************
* 名称 : xianshi()
* 功能 : 显示数字
* 输入 : 无
* 输出 : 无
***********************************************************************/
void xianshi(void)
{int i;
for(i=0;i
{delay();
P0=table[mima2[i]];
if(i==0){LED1=0;LED2=1;LED3=1;}
if(i==1){LED1=1;LED2=0;LED3=1;}
if(i==2){LED1=1;LED2=1;LED3=0;}
}
}
/********************************************************************
* 名称 : cuowu(void)
* 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
* 输入 : 无
* 输出 : 按键值
***********************************************************************/
void chucuo(void)
{
mima2[0]=13;
mima2[1]=13;
mima2[2]=13;
}
/********************************************************************
* 名称 : Keyscan()
* 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
* 输入 : 无
* 输出 : 按键值
***********************************************************************/
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j
{
P2 = Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
delay();
temp = 0x01; for(i=0; i
{
if(!(P2 & temp))
{
return (i+j*4);
}
temp
}
}
}
/********************************************************************
* 名称 : baojing()
* 功能 : 鸣声器报警
* 输入 : 无
* 输出 : 无
***********************************************************************/ void baojing(void)
{baojing2=0;
}
/********************************************************************
* 名称 : gaimima()
* 功能 : 修改密码
* 输入 : 无
* 输出 : 无
***********************************************************************/ void gaimima(void)
{
int i;
i=0;
if(Show_MEN)
{
while(1)
{xianshi();
P2 = 0xf0;
if(P2 != 0xf0)
{
Delay_1ms(100); //按键消抖
if(P2 != 0xf0)
{
mima2[i] = Keyscan(); if(mima2[i]
else
{
chucuo();
break;
}
if(i==3)break;
}
}
}
xianshi();
}
if(i==3)
{
mima[0]=mima2[0];
mima[1]=mima2[1];
mima[2]=mima2[2];
mima2[0]=15;
mima2[1]=15;
mima2[2]=15;
}
else
{mima2[0]=15;
mima2[1]=15;
mima2[2]=15;
}
}
/********************************************************************
* 名称 : kaimen()
* 功能 : 开门函数p1.3置1
* 输入 : 无
* 输出 : 无
***********************************************************************/ void kaimen(void)
{Show_MEN=1;
}
/********************************************************************
* 名称 : chuli(uchar t)
* 功能 : 显示函数
* 输入 : 按键数值
* 输出 : 无
***********************************************************************/ void chuli(uchar t)
{
if(t=3)jishu=0; if(t==10) { if(mima[0]==mima2[0] && mima[1]==mima2[1] && mima[2]==mima2[2])//ok键 密 码正确命令
{kaimen();
jishu=0;
mima2[0]=11;
mima2[1]=11;
mima2[2]=11;
cuowu=0;
}
else
{cuowu++;//密码错误
if(cuowu>=3)
{ baojing();
cuowu=0;
jishu=0;
mima2[0]=14;
mima2[1]=14;
mima2[2]=14;
}else
{jishu=0;
mima2[0]=11;
mima2[1]=11;
mima2[2]=11;}
}
}
if(t==11)//取消键 命令
{
jishu=0;
mima2[0]=10;
mima2[1]=10;
mima2[2]=10;
Show_MEN=0;
baojing2=1;
if(t==12)
{
mima2[0]=mima[0];
mima2[1]=mima[1];
mima2[2]=mima[2];
gaimima();
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/ void Main(void)
{
uchar Key_Value; //读出的键值
jishu=0;
cuowu=0;
Show_MEN = 0;
BAOJING=1;
baojing2=1;
while(1)
{
if(baojing2==0)
BAOJING=~BAOJING;
P2 = 0xf0;
if(P2 != 0xf0)
Delay_1ms(100); //按键消抖
if(P2 != 0xf0)
{
Key_Value = Keyscan(); //按键查询部分结束
chuli(Key_Value);
}
}
xianshi();
}
}
2.6 设计结果及分析
2.6.1性能指标
实现了所有基本功能和一些自由发挥功能,密码为3位二进制数。
2.6.2不足之处
1.密码位数较少
2.没有设置灭零
2.6.3性能改进方案
1.可以将拨码开关增加到8位
2.设置灭零信号,较少耗能
3、课程设计总结或结论
电子密码锁的设计是在单片机课程后,自己设计的课外科技活动。是教学计划中实践方面的重要组成部分,也是落实本科学生科研训练计划的要求。在着重基础、注重前沿的前提下,促进电子信息类专业和课程的建设,促进教学改革,在教学中注重培养大学生的创新能力、动手能力;加强科学研究和工程实践素质的训练,提高自己对实际问题进行设计、制作的综合能力;为后续的毕业设计和在今后工作岗位上独立开展科学研究打下良好基础。同时提升了同学间的团结协作能力。
对我而言,在这次课程设计中,通过我们大家团结努力共同设计研究下终于做成了我们的电子密码锁。在制作的过程中,我们相互鼓励相互学习将课上讲的原理付诸于实践,更加深刻的体会里单片机的原理。同时,也提高了我们的动手能力。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!
4、参考文献
[1].李连华. 基于FPGA 的电子密码锁设计[J].中国科技信息,2006
[2].许琦. 基于FPGA 的电子密码锁的设计[J].科技信息,2006
[3].张毅刚 单片机原理及应用. 高等教育出版社,2009
[4].STC90C52AD 单片机器件手册
注:此表必须在同一页面。