课程设计任务书
学生姓名: 专业班级: 指导教师: 工作单位:
题 目: 数字式密码电子锁电路设计 初始条件:
本设计既可以使用集成电路和必要的元器件等。本设计也
可以使用单片机系统构建数字密码电子锁。自行设计所需工作电源。电路组成原理框图见图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
3.3 1602液晶显示
图3.3为1602液晶的引脚分布。1,2为液晶显示供电,3接滑动变阻器改变3的相对电位,调节显示对比度。4,5,6为液晶的控制端,其中5脚是使能端,为方便使用,直接将其接地让其有效工作。7~14为液晶的数据输入端,15、16为液晶背光的电源接口。17,18可以悬空不接。
图3.3 1602液晶显示
3.4 声光显示
光显示有红绿两种颜色的发光二极管组成,负极接单片机引脚,正极结一个限流电阻后接地。当单片机输出高电平,其不亮,当单片机输出低电平,二极管点亮。(图略)
声信号告警有长鸣蜂鸣器与一个三极管、电阻组成,三极管在单片机的控制下驱动蜂鸣器正常工作。长鸣蜂鸣器,在给予有效电平时可以不间断的以一定的频率发出蜂鸣。如图3.4所示:
6
图3.4 蜂鸣器工作电路
4.模块软件程序设计
4.1 按键键值读取模块
按键接在P1口的低三位,由于只用了三个按键,所以每个按键有多种功能,这需要在软件中设置一些标志变量,在不同的状态下不同的标志变量置位,按键的功能也随之发生改变。比如在输入密码的时候其中两个按键是用来输入2进制值,当找回密码时那两个按键的功能又变成了输入十进制值。按键的读取是通过MSP430单片机的P1口的外部中断读取的,按下按键,IO口接收一个下降沿,触发中断,再根据各IO的高低电平,判断所按下按键,从而可以读取按键值。
4.2 1602液晶显示模块
1602具有三个工作状态控制端,调节他们的高低变化配合数据口的信息,可以显示2×16的字母或者数字,通过子函数可以实现检测初始化LCD、写指令到LCD、LCD状态、LCD清屏、输入一个字节数据到LCD、LCD光标定位到x处、LCD光标归位、输入一个字符到LCD、输入一个字符串到LCD等功能。
7
4.3 密码输入及读取模块
密码的读取是在密码输入的界面状态下进行的,在其他界面下按键不能输入密码。输入过程中密码的显示是“*”号,从而有保密的功能。四位二进制数输入完成时密码读取功能也同时完成。
4.4 密码比较模块
密码读取完毕后系统就会自动进行密码比较,当四位二进制输入值和设定密码的四位二进制值都相同时,密码正确,显示开锁成功;当不相等时,密码错误,自动回到密码重新输入状态,在此状态下可以再次输入密码。但是,当三次密码都错误时密码锁便会锁住,不能再次输入密码,在此时只能使用找回密码功能。
4.5密码找回模块
当密码输入错误的时候可以进行找回密码,找回密码的过程实际上就是一个回答密保问题的过程,本设计在程序中设定了一个密保问题是“My birthday? ”,当开锁者在此时界面下输入“0829”四位十进制数即可找回密码,找回的密码显示在1602液晶上;但是,如果在找回密码的过程中回答错误锁体便会终极锁住,不能再次输入任何值,也不能再次找回密码,只能通过复位程序恢复。
4.6 密码修改模块
为了达到修改密码的目的,在输入密码正确时可以进入修改密码界面,在此界面下可以输入四位二进制密码。同样为了保密,输入密码过程中同样是显示“*”。输完四位二进制密码后还需再次输入密码以确定修改密码,只有当两次输入的密码一样密码才会被修改,否则需要重复确认修改密码。
4.7 声光状态模块
本模块通过读取相关控制变量,控制声光部件的状态。当闭锁状态点亮红灯,开锁状
8
态点亮绿灯;当需要进行异常告警时,利用延时函数周期性的变换蜂鸣器的响静。鸣响状态下,响250ms,停250ms;鸣响状态保持50s后,静止10s,后继续进入鸣响状态,如此反复。在三次密码错误时发生异常告警,找回密码后告警停止。
9
4.8系统软件流程图
综合以上模块,得到系统软件流程图如图4.8所示:
否A键按下输入新密码显示P.正确否?否开始输入原密码是
开锁是选择功能输入新密码修改密码是一致否否否输入密码错误三次是密码正确否输入超级密码是修改密码结束图4.8.1 总程序流程图 图4.8 总程序流程图
10
5.模块组合调试
按照前述模块进行设计,制作实物电路、编写软件程序代码,然后进行相关调试。
5.1 硬件调试
由于使用了单片机,所以硬件电路比较简单,故调试过程比较顺利。
5.2 软件调试
由于这个系统主要部分是软件程序,比较复杂,所以在软件调试过程中出现了一些问题,如有时不能读取按键键值,有时不能退出某个状态界面,但是通过不断调试,所有问题都已经解决,软件调试成功。
6.系统调试
综合硬件电路和软件程序进行调试,最后系统成功地实现了开锁、闭锁、修改密码、
找回密码和声光报警功能。达到并超额完成了课程设计的要求。
7.心得体会
本次课程设计不仅仅是对于一学期数字电子技术课程学习的一个简单考核,更是是我们在数电方向、电子方向继续学习深造的一个无尽动力。在完成课程设计的过程中,遇到了一些问题,经过不断地修改,问题都被解决。同时,自己的知识也一点点地提升。这次课程设计也让我对我自己所学习专业有了更多的兴趣,我相信在接下来的时间里我会更加努力地学习专业知识,争取能够在专业内有所建树。
11
参考文献
[1] 伍时和等.数字电子技术基础.北京:清华大学出版社,2009.4. [2] 张天凡等.51单片机C语言开发详解.北京:电子工业出版社,2008.6. [3] 马忠梅等.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,
2007.1.
[4] 梅丽凤等. 单片机原理及接口技术. 北京: 清华大学出版社;北京交通大学出版
社,2004.2
[5] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005.7.
12
附录: 数字式密码电子锁程序源代码
1.主函数:
/*------------------------------------------------------------------------------ ** Created by: Xu Yuanchun ** Created date: 2012.06.02 ** Version: V1.0
** Descriptions: The main.c of trick lock
*****************************************************/ #include #define uchar unsigned char #define uint unsigned int #define ulint unsigned long int #include\"coded_lock.h\" const uchar table1_0[] = \" Enter password:\"; const uchar table2_0[] = \" ____ \"; const uchar table1_1[] = \" ^_^ ^_^ \"; const uchar table2_1[] = \" Welcome! \"; const uchar table1_2[] = \" Wrong password \"; const uchar table2_2[] = \" Enter again! \"; const uchar table1_3[] = \" -_- -_- \"; const uchar table2_3[] = \" LOCK \"; const uchar table1_4[] = \" Find password? \"; const uchar table2_4[] = \" 0:No 1:Yes \"; const uchar table1_5[] = \"Change password?\"; const uchar table1_6[] = \" My birthday? \"; const uchar table2_7[] = \" Succeed \"; const uchar table1_8[] = \" Bye Bye \"; const uchar table1_9[] = \" Congratulation!\"; const uchar table2_9[] = \" Password: 0000 \"; const uchar table1_10[] = \" New password: \"; const uchar table1_11[] = \" Make sure: \"; const uchar table2_12[] = \" Unequal \"; uchar ps[4],ps_1[4]; uchar num,function,busy; uchar location; uchar errorcount; 13 uchar lockflag; // Flag defination uchar unlockflag; uchar answerflag; uchar startflag; uchar errorflag; uchar succeedflag; uchar changeflag; uchar sureflag; uchar changedflag; uchar temp[4],answer[4]; uint ms,s; void Delayms(uint z) // Delay about 1 ms { uint x,y; for(x =z; x >0; x--) for(y =1000; y>0; y--); } void Clock_Mode() // Select 8 Mhz XT2 for SMCLK { uchar i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 &= ~XT2OFF; // Activate XT2 high freq xtal do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i > 0; i--); // Time for flag to set } while (IFG1 & OFIFG); // OSCFault flag still set? BCSCTL2 |= SELM_2 + SELS; // SMCLK = XT2 (8Mhz) HF XTAL (safe) } void Timer_A_Init() { CCR0 = 8000; // Interrupt every 1/1000 s TACTL = TACLR + MC_1 + TASSEL_2;// Up mode, SMCLK } void Alarm() { uchar i; for(i = 0; i < 10; i++) { Ab0; Delayms(1000); 14 Ab1; Delayms(1000); } } /****************************Part:LCD****************************/ void LCD_Operation_Init() { uchar i; Write_Com(0x80); for(i = 0; i < 16; i++) { Write_Date(table1_0[i]); } Write_Com(0x80+0x40); for(i = 0; i < 16; i++) { Write_Date(table2_0[i]); } } void LCD_Operation_Enter() { Write_Com(0x80+0x40+6+location); Write_Date('*'); } void LCD_Operation_Unlock() { 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_1[i]); } } void LCD_Operation_EnterAgain() { uchar i; Write_Com(0x80); 15 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 \"LCD1602.c\" 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班 课程设计题目: 数字式密码电子锁电路设计 课程设计答辩或质疑记录: 问题一:你的电路硬件框架? 答:我所设计的电路中使用了单片机芯片ATC52作为主控芯片,外围器件有矩阵键盘,1602液晶,蜂鸣器和LED灯。 问题二:电路能否记忆设定密码?如何实现? 答:可以。我在电路中使用ATC52自带的E2PROM作为电路的存储模块,存储当前的密码。 问题三:如果三次密码错误会出现什么现象? 答:程序中设置了一个标志变量,当三次密码错误,标志变量置位,不能再次输入密码。 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日 28
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务