电子密码锁课程设计报告模板Word文件下载.docx
- 文档编号:21145912
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:21
- 大小:455.74KB
电子密码锁课程设计报告模板Word文件下载.docx
《电子密码锁课程设计报告模板Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子密码锁课程设计报告模板Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
4.电子密码锁操作简单易行,一学即会。
5.干扰码功能在输入正确密码前可输入任意码。
6.安保功能。
输入错误一次警示灯会亮起。
7.双重锁定功能
外部强制锁定:
在内部不能开启,适用于外出时,防止有人入侵。
内部强制锁定:
在外部不能开启,让您在家时更安心、安全。
8.自动上锁功能
采用全自动锁芯,门关后6秒内自动上锁,外出更加安全。
系统框图:
第二章硬件设计
硬件是一个系统的支撑核心,硬件的好坏直接关系着一个系统的效果,合理的硬件设计可以简化软件的编程。
硬件又可以分为好几个模块的集合,分别为:
晶振电路、复位电路、步进电机驱动电路、1602液晶显示电路、警示灯电路和矩阵键盘。
矩阵键盘为4x4,用来输入密码,模式选择等;
警示灯用来提示错误;
1602液晶用来显示工作的状态;
步进电机驱动用来控制步进电机,完成开锁关锁等操作;
报警电路用来报警,当密码连续错误三次的时候。
各个电路通过STC89S52单片机耦合在一起,便可以达到设计所需达到的要求。
以下是电路原理图和电路pcb图。
总电路原理图:
画电路原理图时是硬件电路的必须,务必要非常小心,合理的布局会简化pcb板的绘制,减少不必要的麻烦。
画完要非常小心地检查,一处小小的错误就可能让多天的劳动拜拜付出。
电路Pcb图:
绘制电路pcb图的时候合理的布局是重中之重,画好pcb图之后就开始洗pcb板,pcb板的质量决定与打印的图纸、曝光时间、洗板是配置洗板溶液的浓度与掌握洗板时间等,总之一句话:
小心使得万年船。
第三章软件设计
一个应用系统要完成各项功能,首先必须有较完善的硬件作保证。
同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。
甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。
因此充分利用其内部丰富的硬件资源和软件资源,采用与C51系列单片机相对应的51汇编语言和结构化程序设计方法进行软件编程。
程序设计语言有三种:
机器语言、汇编语言和高级语言。
机器语言是机器唯一能“懂”的语言,用汇编语言或高级语言编写的程序(称为源程序)最终都必须翻译成机器语言的程序(成为目标程序),计算机才能“看懂”,然后逐一执行。
高级语言是面向问题和计算过程的语言,它可通过于各种不同的计算机,用户编程时不必仔细了解所用的计算机的具体性能与指令系统,而且语句的功能强,常常一个语句已相当于很多条计算机指令,于是用高级语言C程序的速度比较快,也便于学习和交流,但是本系统却选用了高级语言C程序。
原因在于,本系统是编制程序工作量不大、规模较小的单片机微控制系统。
软件设计流程图:
主程序:
#include<
reg51.h>
#include<
intrins.h>
#include"
lcd1.h"
#defineGPIO_LEDP3
#defineuintunsignedint
#defineucharunsignedchar
sbita=P2^4;
sbitb=P2^3;
sbitc=P2^2;
sbitd=P2^1;
sbitbuzzer=P2^0;
ucharKeyState;
//用来存放按键状态
ucharyszt[]="
*EnterPassword"
;
ucharxgmm[]="
NPassword"
ucharmmcw[]="
Error"
ucharbingo[]="
Welcome"
ucharkeyword[6]="
123456"
//原始密码
ucharkeycmp[6];
ucharxsz[17]={0x00,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
ucharkey=0,num=0,flg=0,cuo=0,zd=0,xs=0,q=0,w=0;
//==============================延迟程序延时x毫秒
voiddelay(uintx)
{uinti,j;
for(i=x;
i>
0;
i--)
for(j=135;
j>
j--);
}
//======================状态显示
voidztxs()
{uchari;
switch(w)
{
case0:
LcdInit();
KeyState=0;
for(i=0;
i<
16;
i++){LcdWriteData(yszt[i]);
}break;
case1:
10;
i++){LcdWriteData(xgmm[i]);
}break;
case2:
i++){LcdWriteData(mmcw[i]);
case3:
i++){LcdWriteData(bingo[i]);
}
//=====================开锁操作
voidksdianji()
{
unsignedinti=1000;
while(i--!
=0)
a=1;
b=1;
c=1;
d=0;
delay
(1);
c=0;
d=1;
b=0;
a=0;
cuo=0;
for(i=1;
7;
i++)
{LcdWriteCom(0x80+xsz[i]);
LcdWriteData('
'
);
//====================关锁操作
voidgsdianji()
{
}
num=0;
17;
i++){LcdWriteCom(0x80+xsz[i]);
//==============================报警程序
voidalarm()
inti,n;
num=0;
xs=0;
GPIO_LED=0xfe;
//1111_1110->
1111_1101
for(n=0;
n<
n++)//左移7次,这样子就会到达最左边
{
GPIO_LED=_crol_(GPIO_LED,1);
//将GPIO_LED左移一位
delay(100);
//延时
}
for(n=0;
n++)//右移7次,这样子就会到达最右边
GPIO_LED=_cror_(GPIO_LED,1);
//将GPIO_LED右移一位
//延时
GPIO_LED=0xff;
if(cuo==3)
n++)
for(i=0;
200;
{
buzzer=0;
delay
(1);
buzzer=1;
}
100;
delay
(2);
cuo=0;
for(i=1;
//==============================密码重置程序
voidset()
uchari=0,n=0;
6;
{
if(keyword[i]==keycmp[i]){zd++;
}
if(zd==6)
zd=0;
w=1;
flg=1;
ztxs();
else
w=2;
zd=0;
cuo++;
alarm();
ztxs();
//==============================确认键程序
voidok()
if(flg==0)
for(i=0;
{
if(keyword[i]==keycmp[i]){zd++;
}
if(zd==6)
ksdianji();
num=7;
w=3;
else
w=2;
if(flg==1)
flg=0;
num=0;
for(n=0;
n++){keyword[n]=keycmp[n];
'
//==============================键盘扫描程序
voidkeyscan()
uchartemp1,temp2;
P1=0xfe;
//令第一列为低电平,检测第1列
temp1=P1;
if(temp1!
=0xfe)
delay(5);
//去抖
temp2=P1;
if(temp1==temp2)
KeyState=1;
switch(temp2)
{
case0x7e:
;
if(num<
6){key='
1'
keycmp[num]=key;
num++;
xs++;
else
if(num!
=7){alarm();
case0xbe:
if(num<
2'
case0xde:
3'
if(num!
case0xee:
=7){alarm();
while(temp1!
=0xfe)temp1=P1;
//等待按键释放
P1=0xfd;
//检测第2列
=0xfd)
switch(temp2)
case0x7d:
4'
else
if(num!
case0xbd:
5'
case0xdd:
6'
case0xed:
if(num==6){set();
=0xfd)temp1=P1;
P1=0xfb;
//检测第3列
temp1=P1;
if(temp1!
=0xfb)
temp2=P1;
if(temp1==temp2)
KeyState=1;
case0x7b:
7'
case0xbb:
8'
if(num!
case0xdb:
9'
case0xeb:
if(num==7){gsdianji();
=0xfb)temp1=P1;
P1=0xf7;
//检测第4列
=0xf7)
if(temp1==temp2)
KeyState=1;
switch(temp2)
case0x77:
a'
case0xb7:
0'
case0xd7:
b'
case0xe7:
if(num==6){ok();
=0xf7)temp1=P1;
//============================主函数
main()
{
while
(1)
{keyscan();
if(KeyState)
{KeyState=0;
LcdWriteCom(0x80+xsz[xs]);
LcdWriteData('
*'
副程序:
voidLcd1602_Delay1ms(uintc)//误差0us
uchara,b;
for(;
c>
c--)
for(b=199;
b>
b--)
for(a=1;
a>
a--);
#ifndefLCD1602_4PINS//当没有定义这个LCD1602_4PINS时
voidLcdWriteCom(ucharcom)//写入命令
LCD1602_E=0;
//使能
LCD1602_RS=0;
//选择发送命令
LCD1602_RW=0;
//选择写入
LCD1602_DATAPINS=com;
//放入命令
Lcd1602_Delay1ms
(1);
//等待数据稳定
LCD1602_E=1;
//写入时序
Lcd1602_Delay1ms(5);
//保持时间
#else
//使能清零
//选择写入命令
//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
//Lcd1602_Delay1ms
(1);
LCD1602_DATAPINS=com<
<
4;
//发送低四位
#endif
#ifndefLCD1602_4PINS
voidLcdWriteData(uchardat)//写入数据
LCD1602_RS=1;
//选择输入数据
LCD1602_DATAPINS=dat;
//写入数据
#else
//选择写入数据
LCD1602_DATAPINS=dat<
//写入低四位
#ifndefLCD1602_4PINS
voidLcdInit()//LCD初始化子程序
LcdWriteCom(0x38);
//开显示
LcdWriteCom(0x0c);
//开显示不显示光标
LcdWriteCom(0x06);
//写一个指针加1
LcdWriteCom(0x01);
//清屏
LcdWriteCom(0x80);
//设置数据指针起点
LcdWriteCom(0x32);
//将8位总线转为4位总线
LcdWriteCom(0x28)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁 课程设计 报告 模板