数字式密码电子锁电路设计
更新时间:2023-12-25 14:48:01 阅读量: 教育文库 文档下载
课程设计任务书
学生姓名: 专业班级: 指导教师: 工作单位:
题 目: 数字式密码电子锁电路设计 初始条件:
本设计既可以使用集成电路和必要的元器件等。本设计也
可以使用单片机系统构建数字密码电子锁。自行设计所需工作电源。电路组成原理框图见图1,数字密码锁的实际锁体一般由电磁线圈、锁栓、弹簧和锁柜构成。当线圈有电流时,产生磁力,吸动锁栓,即可开锁。反之则不开锁。
图1 数字式电子锁电路原理框图
要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)
1、课程设计工作量:1周。 2、技术要求:
①课程设计中,锁体用LED代替(如“绿灯亮”表示开锁,“红灯亮”表示闭锁)。 ②其密码为方4位(或8位)二进制代码(代码自设定)。
③开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开。当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁。(报警动作为响1分钟,停10秒)
④选择电路方案,完成对确定方案电路的设计。计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。安装调试设计电路。
3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。
时间安排:
1、 2012 年 7 月 1 日集中,作课设具体实施计划与课程设计报告格式的要求说明。 2、 2012 年 7 月 1 日,查阅相关资料,学习电路的工作原理。
2、 2012 年 7 月 2 日 至 2012 年 7 月 3 日,方案选择和电路设计。
2、 2012 年 7 月 4 日 至 2012 年 7 月 5 日,电路调试和设计说明书撰写。 3、 2012 年 7 月 6 日上交课程设计成果及报告,同时进行答辩。 课设答疑地点:鉴主14楼实验室。
指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日
1
摘要
本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超时报警、超次锁定、声光提示、修改用户密码基本的密码锁的功能。依据实际的情况还可以添加管理员解密、调电存储、遥控功能。本系统成本低廉,功能实用
关键词:电子密码锁,单片机系统,液晶显示,密码检验
2
1.绪论
随着人们生活水平的提高,家庭防盗这一问题越来越引人注目,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。
设计本课题时构思了两种方案:一种是用以MSP430为主控芯片的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案电路复杂,控制度比较低,难以满足现在的安全需求,所以本设计采用前一种方案。
本次课程设计就是利用所学的数字电路知识,忽略复杂的实物锁体器件的驱动,简单模拟实现数字密码锁原理功能,从而复习相关知识,达到理论与实践相结合的目的。
2.设计内容及要求
2.1 设计的初始条件及主要任务
课程设计中,锁体用LED代替(如“绿灯亮”表示开锁,“红灯亮”表示闭锁)。 其密码为方4位(或8位)二进制代码(代码自设定)。
开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开。当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁。(报警动作为响1分钟,停10秒)
选择电路方案,完成对确定方案电路的设计。计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。安装调试设计电路。
2.2 设计思路
本次的设计任务,运用集成逻辑器件组成的门电路也可以完成,但是考虑到输入信号的数量、逻辑判断的复杂度可以预知其数字逻辑电路会是相当复杂的。而运用具有可以写入程序,按程序完成相关逻辑判断、电平控制的单片机芯片则会大大降低系统的复杂度,因此基于单片机来完成此次设计成为了总体设计方案的首选。
本设计使用的是MSP430单片机,该单片机芯片功能齐全,体积小,性价比高,使用该芯片可以轻易完成该设计任务。配合上外围电路独立按键、1602液晶、蜂鸣器和LED
3
灯构成整个系统。实物电路体积小巧,结构精简。
设计从总体可以分为硬件与软件两个部分。在硬件部分中,由单片机最小系统、1602液晶显示模块、按键控制模块和声光报警模块几个部分构成,其相关控制关系如图2.1;在软件部分中,由按键键值读取、1602液晶显示函数、延时模块、密码读取模块、密码设置模块、密码比较模块、密码找回模块、声光状态模块等几部分组成。
系统整体框架图如下:
MSP430 Flash掉电存储 单片机 声光指示电路 独立按键控制电路 LCD1602显示电路 图2.2 系统整体框架图
3.模块硬件电路设计
3.1 单片机最小系统
此为一个单片机最小系统,其有P1~P6六组I/O口,可以进行相关的电平状态读取与控制操作。最小系统中使用了两个晶振,32768Hz的低速晶振和8MHz的高速晶振,为系统提供可选择的时钟源。由于MSP430单片机工作电压为3.3V,故最小系统中使用了输出3.3V的稳压电路。最小系统电路图如图3.1所示:
4
图3.1单片机最小系统
3.2 独立按键
本设计使用了三个独立按键进行电路设计控制,硬件结构简单,免去了矩阵键盘的大体积,通过程序控制可以通过独立按键输入2进制和10进制数,使用方便。其电路图如图3.2所示:
图3.2 独立按键电路
5
for(i = 0; i < 16; i++)
void LCD_Operation_Question() { uchar i;
Write_Com(0x80); for(i = 0; i < 16; i++) { Write_Date(table1_6[i]); } Write_Com(0x80+0x40); for(i = 0; i < 16; i++) { Write_Date(table2_0[i]); } }
void LCD_Operation_Answer(uchar i) { Write_Com(0x80+0x40+6+location); Write_Com(0x0f); Write_Date( i + 0x30); Write_Com(0x80+0x40+6+location); }
void LCD_Operation_Succeed() { uchar i;
Write_Com(0x80); for(i = 0; i < 16; i++) { Write_Date(table1_1[i]); } Write_Com(0x80+0x40); for(i = 0; i < 16; i++) { Write_Date(table2_7[i]); } }
void LCD_Operation_Congratulation() { uchar i;
Write_Com(0x80); for(i = 0; i < 16; i++) {
16
Write_Date(table1_9[i]); } Write_Com(0x80+0x40); for(i = 0; i < 11; i++) { Write_Date(table2_9[i]); } Write_Date(ps[0] + 0x30); Write_Date(ps[1] + 0x30); Write_Date(ps[2] + 0x30); Write_Date(ps[3] + 0x30); Write_Date(' '); }
void LCD_Operation_Bye() { uchar i;
Write_Com(0x80); for(i = 0; i < 16; i++) { Write_Date(table1_8[i]); } Write_Com(0x80+0x40); for(i = 0; i < 16; i++) { Write_Date(table2_3[i]); } }
/*****************************************************************/
void Reset() { errorcount = 0; lockflag = 0; unlockflag = 0; answerflag = 0; startflag = 0; errorflag = 0; succeedflag = 0; changeflag = 0; Write_Com(0x0c); }
/****************************Part:Flash****************************/ void Flash_Init() {
17
FCTL2 = FWKEY + FSSEL0 + FN4 + FN3; // MCLK/25 for Flash Timing Generator }
void Flash_Write() // Write 'bj' and 'waveform' to flash { uchar i;
uchar *Flash_ptr; // Flash pointer Flash_ptr = (uchar *) 0x1080; // Initialize Flash pointer FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY; // Clear Lock bit *Flash_ptr = 0; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for(i = 0;i < 4;i++) { *Flash_ptr++ = ps[i]; } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit }
void Flash_Read() // Read 'bj' and 'waveform' from flash { uchar i;
uchar *Flash_ptrA; Flash_ptrA = (uchar *) 0x1080; // Initialize Flash segment A pointer FCTL1 = FWKEY; // Set Erase bit FCTL3 = FWKEY + LOCK; // Clear Lock bit for(i = 0;i < 4;i++) { ps[i] = *Flash_ptrA++; } }
/*****************************************************************/
void All_Init() {
Clock_Mode(); LCD_Ctrl_Dir = 0xff; LCD_Data_Dir = 0xff; Ab1; Blue1; Red1; P1IES = 0x0f; P1IE = 0x0f; P1IFG &= ~0x0f;
18
P1DIR = 0xf0; LCD_Init(); Flash_Init(); Timer_A_Init(); }
void main() { uchar i; All_Init(); LCD_Operation_Init(); Flash_Read(); for(i = 0;i < 4;i++) { if(ps[i]>2) { ps[i] = 0; } } _EINT(); while(1) { if(unlockflag == 1) { Blue0; Red1; } else { Blue1; Red0; } } }
#pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) {
P1IFG=0; uchar keytemp; keytemp = Key_In; keytemp &= 0x07; if(keytemp != 0x07) { Delayms(15);
// If there is external interrupt
19
if(keytemp != 0x07) { while(Key_In != 0x07); switch(keytemp) { case 0x06: if(busy == 0) { if(lockflag == 0 && unlockflag == 0 && answerflag == 0 && errorflag == 0) { function++; if(function == 1) { LCD_Operation_Find(); } if(function == 2) { function = 0; LCD_Operation_Init(); Reset(); } } if(lockflag == 1 && unlockflag == 0 && answerflag == 0 && errorflag == 0) { function++; if(function == 1) { LCD_Operation_Find(); } if(function == 2 ) { function = 0; if(succeedflag == 1) { LCD_Operation_Init(); Reset(); } else { LCD_Operation_Lock(); } } } } break;
20
password;
case 0x05:
if(function == 0 && errorflag == 0 )//Function=0:enter password;function=1:find
//function=1:change password { if(lockflag == 0 && unlockflag == 0 && answerflag == 0) { temp[location] = 0; LCD_Operation_Enter(); busy = 1; location++; LCD_Operation_Check(); } }
if(function == 1 && errorflag == 0) { if(lockflag == 1 && unlockflag == 0 && answerflag == 0) { LCD_Operation_Lock(); function = 0; } if(lockflag == 0 && unlockflag == 0 && answerflag == 0) { LCD_Operation_Init(); function = 0; } }
if(answerflag == 1 && startflag == 1 && errorflag == 0) { if(num == 0) { num = 10; }
num--;
LCD_Operation_Answer(num); }
if(answerflag == 1 && startflag == 0 && errorflag == 0) { LCD_Operation_Answer(num); startflag = 1; }
if(function == 2 && errorflag == 0) { if(changeflag == 1) {
21
if(sureflag == 0) { ps[location] = 0; LCD_Operation_Enter(); location++; if(location == 4) { location = 0; sureflag = 1; LCD_Operation_Makesure(); } } else { ps_1[location] = 0; LCD_Operation_Enter(); location++; } } else { LCD_Operation_Unlock(); function = 0; } } break; case 0x03:
if(function == 0 && errorflag == 0) { if(lockflag == 0 && unlockflag == 0 && answerflag == 0) { temp[location] = 1; LCD_Operation_Enter(); busy = 1; location++; LCD_Operation_Check(); } } if(answerflag == 1 && startflag == 1 && errorflag == 0) { num++; if(num == 10) { num = 0; }
22
LCD_Operation_Answer(num); }
if(answerflag == 1 && startflag == 0 && errorflag == 0) { LCD_Operation_Answer(num); startflag = 1; }
if(function == 1 && startflag == 0 && errorflag == 0) { LCD_Operation_Question(); answerflag = 1; }
if(function == 2 && errorflag == 0) {
if(changeflag == 1) { if(sureflag == 0) { ps[location] = 1; LCD_Operation_Enter(); location++; if(location == 4) { location = 0; sureflag = 1; LCD_Operation_Makesure(); } } else { ps_1[location] = 1; LCD_Operation_Enter(); location++; if(location == 4) { location = 0; sureflag = 0; } } } else { changeflag = 1; LCD_Operation_New();
23
} } break; } } } }
#pragma vector = TIMERA0_VECTOR __interrupt void TA0_ISR(void) {
_DINT(); ms++; if(ms == 500) { s++; ms = 0; if(s <= 120) { if(s%2 == 1) { Ab0; } else { Ab1; } } else { Ab1; } if(s >= 140) { s = 0; } } _EINT(); }
// There is two vector in timer bj,
// TIMERA0_VECTOR is owned by CCR0
24
2.coded_lock.h头文件
/*------------------------------------------------------------------------------ ** Created by: Xu Yuanchun ** Created date: 2012.06.02 ** Version: V1.0
** Descriptions: The coded_lock.h of trick lock
*******************************************************************************/ #ifndef _coded_lock_h #define _coded_lock_h
/*********Define for keys********/ #define Key_Dir P1DIR #define Key_Out P1OUT #define Key_In P1IN #define Key_1 (P1IN & 0x06) // Select the function #define Key_2 (P1IN & 0x05) // Increase to change #define Key_3 (P1IN & 0x03) // Decrease to change /********************************/
/*********Define for LCD*********/ #define LCD_Ctrl_Dir P3DIR #define LCD_Ctrl_Port P3OUT #define LCD_Data_Dir P2DIR #define LCD_Data_Port P2OUT #define LCD_RS BIT0 #define LCD_EN BIT1
#define LCD_RES_RS LCD_Ctrl_Port &= ~LCD_RS #define LCD_SET_RS LCD_Ctrl_Port |= LCD_RS #define LCD_RES_EN LCD_Ctrl_Port &= ~LCD_EN #define LCD_SET_EN LCD_Ctrl_Port |= LCD_EN /********************************/
#define Ab0 LCD_Ctrl_Port &= ~BIT2 #define Ab1 LCD_Ctrl_Port |= BIT2 #define Blue0 LCD_Ctrl_Port &= ~BIT4 //0代表亮,1代表灭 #define Blue1 LCD_Ctrl_Port |= BIT4 #define Red0 LCD_Ctrl_Port &= ~BIT5 #define Red1 LCD_Ctrl_Port |= BIT5 /********Function declare********/ void Delayms(uint); void LCD_Init();
void Write_Com(uchar); void Write_Date(uchar); #include \
25
#endif
3.LCD1602.c文件
/*------------------------------------------------------------------------------ ** Created by: Xu Yuanchun ** Created date: 2012.06.02 ** Version: V1.0
** Descriptions: The LCD1602.c of trick lock
*******************************************************************************/
void Write_Com(uchar com) // Write command {
LCD_RES_RS; LCD_RES_EN; LCD_Data_Port=com; Delayms(5); LCD_SET_EN; Delayms(5); LCD_RES_EN; }
void Write_Date(uchar date) // Write data { LCD_SET_RS; LCD_RES_EN; LCD_Data_Port=date; Delayms(5); LCD_SET_EN; Delayms(5); LCD_RES_EN; }
void LCD_Init() // Initialize { LCD_RES_EN; Write_Com(0x38); //设置16*2显示,5*7点阵,8位数据接口 Write_Com(0x0c); //设置开显示,不显示光标 Write_Com(0x06); //写一个字符后地址指针加1 Write_Com(0x01); //显示清零,数据指针清零 }
26
27
本科生课程设计成绩评定表
姓 名 专业、班级 徐元春 性 别 男 电子科学与技术电子1003班 课程设计题目: 数字式密码电子锁电路设计 课程设计答辩或质疑记录: 问题一:你的电路硬件框架? 答:我所设计的电路中使用了单片机芯片AT89C52作为主控芯片,外围器件有矩阵键盘,1602液晶,蜂鸣器和LED灯。 问题二:电路能否记忆设定密码?如何实现? 答:可以。我在电路中使用AT89C52自带的E2PROM作为电路的存储模块,存储当前的密码。 问题三:如果三次密码错误会出现什么现象? 答:程序中设置了一个标志变量,当三次密码错误,标志变量置位,不能再次输入密码。 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年 月 日
28
正在阅读:
数字式密码电子锁电路设计12-25
实验九--羧酸和取代羧酸的性质04-30
如何在大学校园开展“阳光体育运动”05-28
追逐云的孩纸散文11-21
散文:失败是可以玩的11-21
影视鉴赏 名词解释 简答题03-30
2013华科建筑规划学院考研复试分数线06-10
ATL COM appWizard04-10
组织实施方案及各项保障措施04-23
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 电子锁
- 数字式
- 电路设计
- 密码
- 换言之翻译第四章讲义
- 南京大学应用学科教授研究方向汇编
- 新编大学英语第二册1-7单元课文翻译及课后答案
- 福师大作业 比较视野下的外国文学
- 混凝土及砌体结构试题及答案 - 图文
- “案例积淀式”校本研训的实践与探索
- 2016国网江苏省电力公司招聘高校毕业生1000人
- 2018-2019学年高二数学上学期期中模拟试题文 - 图文
- 庆阳市正宁县五顷塬回族乡简介概况 - 图文
- 图式理论在初中英语阅读教学中的有效运用
- 四川省成都市2016届高三第三次诊断考试文综历史试题
- 红领巾广播站稿(第一期)
- 成都信息工程学院C语言第一类题参考答案
- 监督执纪工作规则心得体会
- 哈九中物理试题高三模拟演练
- 管理信息化实训云平台技术参数 - 图文
- 企业文化、企业精神、发展理念、服务理念口号标语大全 企业理念大全
- 广西民族大学留学生招生简章越南语版本 - 图文
- 2019年整理乡镇城乡环境综合治理工作总结
- 3D Max - 图文