1、智能门禁系统摘 要:智能门禁系统采用凌阳十六位单片机作为系统控制关键,运用其强大语音识别功能,不仅实现了语音播放功能,完毕了语音提醒规定,并且实现了语音控制门禁系统;运用其内置Flash闪存,实现了密码断电保护。除此而外,在键盘输入方面,强大功能选择键满足了系统规定;16*2液晶显示屏选择使操作规定清晰明了。此套智能门禁系统强烈体现了其人性化一面。关键词:智能门禁系统、语音识别、凌阳十六位单片机。引言家用防盗门早已经进入到千家万户,但防盗门操作麻烦给顾客带来了许多不便,当今市场迫切需要一种既安全又以便门禁系统,鉴于此,我们“智能门禁系统”带语音识别、液晶显示功能电子密码锁便应运而生。为了向大家
2、简介此智能门禁系统,我们将从如下几种方面简介:1、 系统制作意义。2、 系统制作初期设想及其实现方案简介。3、 系统功能最终实现及演示。4、 系统硬件部分原理简介。5、 系统软件部分设计实现。6、 对系统自我评价。(存在及要处理问题)7、 制作心得和体会。8、 参照文献。9、 附录(一):凌阳单片机最小系统。10、 附录(二):凌阳单片机下电子密码锁程序实现。11、 附录(三):器件列表。1系统制作意义目前人们生活水平提高了,安全防备,是人们考虑首要问题。而锁是处理安全问题重要产品。目前市场上电子锁产品功能不全,性能和安全性不高,且造价高。低质量电子锁,给顾客财产安全导致很大威胁,同步,由于功
3、能不健全,给顾客使用带来了一定麻烦。故我们试图研制一种智能化、多功能、更人性化门禁系统。我们研制带语音识别功能电子控制密码锁,不仅给顾客带来了安全保障,以便享有,并且此电子锁语音识别功能愈加体现了他人性化一面,此种类型电子密码锁将成为未来社会供求亮点。2系统制作初期设想及其实现方案简介1初期设想预期实现功能如下:(1)、键盘简化及编码方式改善;键盘简化及编码方式改善:一般数字键密码锁虽然有使用简朴特点,不过键盘暴露在外,易受破坏,或者保密性不高;此外,键盘数量简化又同步增长了使用难度,顾客使用不以便。大家也许见到过某些进口温控制器(如日本RKCINSTRUMENT INC.生产REX_C700
4、温控器)面板设计为:温度测量只用4位LED数码管显示,输入设定值显示也用4位LED。综合以上原因考虑,我们采用四按键形式,输入键分为加、减、左、右移动键,按下加法键(减法键)确定一位密码值,然后使用左右移动键移向下一位密码,再一次使用加、减键确定此位密码值。 (备注:这部分虽然没有实现,但我们16位键盘设置愈加体现了系统功能强大性)(2)、语音识别系统控制;语音识别功能,语音控制门禁开关。(3)、语音提醒功能;(4)、自动实现报警;当门禁系统输入密码错误过多时,自动报警(5)、断电密码保护;出现断电、多次错误密码输入时处理(6)、限时开门系统;(这部分功能我们没能实现,很是遗憾)(7)、液晶显
5、示功能;在初期设计电路时,我们计划采用51单片机作为我们控制关键,然而,语音识别功能、语音提醒功能、密码断电保护功能需要我们外扩集成芯片才能满足系统规定。其功能实现原理方框图如下:在此种条件下我们用51单片机做出了一种简朴系统,基本实现了电子密码锁键盘输入和液晶显示功能。详细电路图如下:其软件编程实现程序见附录(一):其实现功能如下:1、 设置密码,断电不保护;2、 输入密码,与系统原有密码或者设置新密码比较;3、 液晶显示功能;4、 报警功能;显然,这个“最小系统”制作无法满足我们预期功能实现,假如采用外扩集成芯片做法,不仅从技术上,还是从经济方面考虑都不是一种明智选择。鉴于此,我们采用凌阳
6、单片机作为我们控制电路关键,凌阳十六位单片机不仅内置32kFlash(闪存),并且集成了语音识别模块,从主线上,凌阳单片机满足了系统基本规定,详细功能实现以及电路设计在如下详细简介。3系统功能最终实现及演示此系统现阶段包括如下几种模块:1)、键盘输入密码此系统采用4*4按键输入模式,密码初始设置为4位,(从软件上很轻易实现更多位数密码操作,为操作演示计,我们采用4位)。各个按键功能定义如下:1、 09数字健指定为密码设置健(仅且只有他们可以作为密码值)2、 A确认健(按下此键,即比较输入密码值对如否)3、 B取消键(按下此键,即取消上一次操作)4、 C启动语音功能键(按下此键,再次输入密码,就
7、可以启动语音控制功能)5、 D关闭语音功能键(按下次键,就可以关闭语音控制功能)6、 E修改密码键(按下次键,再次输入密码,通过验证后,持续输入两次新密码就可以设置新密码)7、 F更改语音控制口令(按下次键,再次输入密码,通过验证后,即可进入语音口令修改程序操作)2)、语音控制输入进入语音控制功能后,先进行语音控制训练操作(训练过后此操作可跳过),训练成功后,方可进行语音控制,并且时时可以关闭语音功能。此外,语音口令还可以时时修改,再次进行语音控制训练操作即可。3)、密码修改操作此系统密码设置存在Flash中,断电不丢失,密码修改后,系统原密码作废,新密码生效,并存入Flash中。4)、语音提
8、醒操作对应于每一种操作,系统均予以一定语音提醒。如:“请输入密码”、“密码错误”等。5)、液晶显示功能对应于每一种操作,系统均予以一定显示提醒,以便操作。6)、液晶背光功能实现为了实现液晶背光功能,我们设计了一下三种电路:超声波探测电路、光敏传感电路、按键触发电路,在光线好状况下,液晶不背光显示,光线差时,有按键或探测到有人靠近时背光显示。7)、系统执行机构系统执行机构我单片机I/O口输出控制继电器。8)、报警蜂鸣器9)、电源信号指示灯10)、控制信号指示灯4系统硬件部分原理简介此系统硬件部分电路关键部分为凌阳单片机及其外围电路(包括语音识别、输出电路),外围电路有:键盘输入、液晶显示、执行机
9、构电路,此外,为了实现液晶显示屏背光功能,我们采用了超声波探测电路、光敏传感电路、输出延时电路等。电路总体设计模块方框图如下:液晶显示提醒功能实现键盘输入电路控制液晶显示背光功能凌阳十六位单片机控制系统语音输出语音输入电路执行、报警机构超声波探测电路、光敏传感电路、输出延时电路、键盘按键检测。15V、5V电源部分为了详细简介我们电路功能模块,我们将在下面分块简介本系统各个功能模块:1、 电源部分:2、 电源信号灯:3、 凌阳十六位单片机控制电路:见附录(一) 4、 被控制继电器:5、 控制信号灯:6、 蜂鸣器:7、 键盘输入部分:8、 液晶显示部分:9、 背光功能控制模块基本方框图如下:1)、
10、超声波探测发射部分:(含波形)2)、超声波探测接受放大电路:3)、光敏传感检测电路:4)、输入信号延迟电路:5系统软件部分设计实现1、软件设计操作平台简介:(nSP IDE)nSP IDE工作界面如下:2、此系统功能复杂,但软件设计较为简朴,程序功能实现简介图如下:开始系统初始化键盘扫描FEDCBA数字键取消更改语音口令关闭语音功能启动语音功能设置新密码检查密码对与否输入四位数字则为密码,否则跳到功能键上返回按照液晶显示提醒进行操作,输入四位密码后按确认键。密码对执行对应操作;密码错误超过三次报警对操作程序解释以及规定:1、 直接输入密码开门;输入四位密码后按确认键,比较密码,密码对表启动门禁
11、系统,并有“门已经打开,请进”提醒余音。2、 设置新密码;按下B键后,输入原密码,确认后输入新密码,确认后再次输入新密码,检查对后,密码修改成功,原密码作废。3、 启动语音功能;按下C键,输入密码确认后,进入语音识别模式。假如是第一次进入语音识别模式,需要进行语音识别训练,训练两遍对后,完毕训练操作,此时语音识别功能实时监测。在语音识别实时监测同步,我们键盘扫描并没有停止,也就是说我们键盘输入等级高于语音识别模式,在任何状况下键盘输入都是有效。4、 关闭语音识别功能;按下D键,不需要输入密码即可关闭语音识别功能,要想启动此项功能,必须按下C键启动语音识别功能。5、 更改语音口令;按下E键,进入
12、语音识别口令修改模块,输入密码确认后,进入语音口令修改训练模块,根据语音提醒以及液晶显示很以便就可以成功更改语音口令。6、 取消键;按下F键,即可取消所有操作,回到系统初始化后界面。主程序见附录(二):6对系统自我评价在总体上,我们对这个系统设计还是比较满意,不过,虽然我们对这个项目投入了大量时间和精力,由于知识有限,我们在诸多方面有诸多局限性之处。如下我将从硬件和软件两个方面来论述这个系统各个部分:硬件部分:1我们认为,我们做得比较成功地方就是通过超声波探测、光敏传感以及延时电路构成实现了液晶显示屏背光功能 2此外,我们液晶显示和键盘电路十分简洁。 3遗憾是,超声波探测精度不高,精确性有待改
13、善。软件部分:1 一提是,在整个系统设计过程中,语音控制和语音输出提醒一直是我们软件设计重点,同步也是我们亮点,体现了我们设计系统人性化一面。2 键盘扫描和液晶驱动工程中,我们详尽地应用了科学软件设计思想,使程序简洁,有效。3 此外,我们主程序设计,构造鲜明,条理清晰。4 不过,美中局限性是,我们在启动语音功能时,系统时钟不停变化,因此导致键盘扫描不成熟,此处有待改善。7系统设计过程中实践体验通过对该系统设计,我们不仅收获颇丰,并且体会也颇深。1 过这次设计,我们深深体会到,理论指导着实践,但实践才是最终目标。我们在设计过程中,往往碰到这样状况,设计电路从理论上毫无差错,但实现起来却是困难重重
14、。只有在不停探索中才能找到界却问题措施。2 们深深体会到团体合作,在项目制作过程中十分重要,好合作精神需要我们时时刻刻牢记在心。3 在任何时候,科技离不开创新,在设计项目同步,我们需要抛弃成见,标新立异,勇于实现。在这一点上,我认为我们做得比较成功。在设计系统初始,我们采用51系列单片机,而语音功能却只能外扩专用芯片,实现起来比较困难,最终我们大胆采用凌阳单片机一举处理语音控制问题。制作过程中,齐明老师在技术上予以极大协助和支持。在此,感谢齐明老师对我们电子制作指导!总之,这次活动给我们带来了无穷收获和乐趣,感谢学校和老师给我们提供了一种锻炼大舞台。8参照文献凌阳十六位单片机应用教程MCS-5
15、1 单片机应用设计元器件手册9附录附录(一):凌阳单片机最小系统:附录(二):凌阳单片机下电子锁程序实现:#include bsrsd.h#define HaveKey 1#define NoKey 0#define NAME_ID 0x100#define RSP_AGAIN1#define RSP_NOVOICE2#define RSP_NAMEDIFF3#define RSP_CMDDIFF4#define RSP_STAR 5#define RSP_NOISY6/宏定义#define HaveKey 1#define NoKey 0/.全程变量.extern void ClearWat
16、chDog();int PlayFlag = 0;unsigned int Key_Value;unsigned int KeyDownTimes; /保留按键次数 /按键标识 /*/函数申明void Clear_Password();unsigned int F_Affirm_New_Password();unsigned int F_Affirm_Password();void Save_New_Pwd_To_Flash();void LCD_SHOW(char Sentence);void PlayRespond(int Result);int TrainWord(int WordID,
17、 int RespondID);/全局变量定义extern Pwd_Init1;unsigned int Password4;unsigned int Password_Temp4;unsigned int Key_Flag=0;unsigned int Key_Num=0;unsigned int Trained=0;/*/main()int res, timeCnt = 0, random_no = 0,Error_No=0,NoKey_Times=10;int i;int Pass=0;/*/变量定义unsigned State=1,Voice_State=0;/这个变量用于判断目前除在
18、哪中输入状态中/1:一般开门状态2:更改密码,输入原密码状态3:更改密码,第一次输入新密码状态 /4:更改密码,第二次输入新密码状态 5:进入语音系统时输入密码状态 6:进入语音系统重新训练/ 输入密码验证/*/Protect_Clock();InitIO();/键盘KeyDownTimes = 0; Key_Flag = NoKey; ClearWatchDog();BSR_DeleteSDGroup(0);/ 初始化存储器RAMLCD_INIT();INIT_GONGNENG();Clear_Password();LCD_SHOW(Welcome!);SET_Address2();LCD_
19、SHOW(A?B?C?D?E?F?.);if(F_FlashRead(Pwd_Init)F_FlashErase(0xfe00);for(i = 0;i4;i+)F_FlashWrite1Word(0xfe00+i,i);F_FlashWrite1Word(Pwd_Init,0); while(1) ClearWatchDog();Protect_Clock();InitIO();/键盘if(Voice_State) Protect_Clock_fast();else Protect_Clock(); F_Key_Scan();while(Key_Flag = HaveKey)/有按键按下 K
20、ey_Value=F_Get_Key() ; if(Voice_State=0) while(NoKey_Times!=0) F_Key_Scan(); if(Key_Flag=NoKey) NoKey_Times-; else NoKey_Times=10; NoKey_Times=10;LCD_LIGHT_OPEN();/打开背光功能 Key_Flag = NoKey; switch(Key_Value)/判断键值/09表达输入是密码,将等待下一种键输入case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case
21、8: case 9:if(Key_Num = 0)LCD_CLEAR();LCD_SHOW(Password:);SET_Address2();if(Key_Num 4) Key_Num +; LCD_ADD(*); DELAY();break;case 10:/6:进入语音系统重新训练输入密码验证LCD_CLEAR();LCD_SHOW(Train the voice!);SET_Address2();LCD_SHOW(Check you ID:);PlayRespond(6);/语音提醒*请输入密码-(6)!Protect_Clock();State=6;Key_Num =0;break;
22、case 11:/确认键/输入新密码时两个状态处理方式有所不一样if(State =3)if(Key_Num = 4)LCD_CLEAR();LCD_SHOW(Please Again!);SET_Address2();LCD_SHOW(Input new PWD:);PlayRespond(8);/语音提醒*“请再次输入新密码-(7)“!Protect_Clock();for(i = 0;i4;i+)/*把这个密码存到临时变量Password_Temp中*/Password_Tempi=Passwordi;Pass=0;Key_Num =0;State = 4;break;elseLCD_C
23、LEAR();LCD_SHOW(4 bit PSW!);SET_Address2();LCD_SHOW(Please Again!);PlayRespond(7);/语音提醒*“密码错误-(3)”!Protect_Clock();LCD_CLEAR();LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(A?B?C?D?E?F?.);Key_Num =0;State = 1;break;else if(State = 4)Pass=0;Pass = F_Affirm_New_Password();/第二遍输入密码时验证elsePass=0;Pass = F_A
24、ffirm_Password(); /验证密码if(Pass = 1)/密码对/判断目前状态,确定这个对密码是用来干吗Pass = 0;Error_No=0;LCD_LIGHT_OFF();switch(State)case 1:DOOR_OPEN();/*开门*/LIGHT_OPEN();LCD_CLEAR();LCD_SHOW(DOOR OPENED);PlayRespond(12);/语音提醒*“主人您好,门已经开了(!Protect_Clock();SET_Address2();LCD_SHOW(Best Wishes!);DOOR_OFF();LIGHT_OFF();LCD_CLEA
25、R();LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(A?B?C?D?E?F?.);Key_Num=0;State = 1;break;case 2:LCD_CLEAR();LCD_SHOW(Password right!);SET_Address2();LCD_SHOW(New password:);PlayRespond(8);/语音提醒*请输入新密码!Protect_Clock();State = 3;break;case 4:Save_New_Pwd_To_Flash();/ 保留新密码LCD_CLEAR();LCD_SHOW(Successfu
26、lly!);SET_Address2();LCD_SHOW(Remenber The New);PlayRespond(9);/语音提醒*密码修改成功,要记住哦!Protect_Clock();LCD_CLEAR();LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(A?B?C?D?E?F?.);State = 1;break;case 5:if(Trained)Voice_State=1;elsewhile(TrainWord(NAME_ID,0) != 0) ; BSR_InitRecognizer(BSR_MIC); /辨识器初始化Protect_Cl
27、ock();/*保护时钟*BSR_EnableCPUIndicator(); /启动实时监控PlayRespond(RSP_STAR); /*播放开始辨识提醒音Protect_Clock();/*保护时钟*Trained = 1;Voice_State=1;LCD_CLEAR();LCD_SHOW(Voice on);SET_Address2();LCD_SHOW(Remember it!);PlayRespond(13);/语音提醒*语音功能已经启动!Protect_Clock();LCD_CLEAR();LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(
28、A?B?C?D?E?F?.);State=1;break;case 6:/重新输入开始语音训练Trained=0;if(Trained)Voice_State=1;elseBSR_DeleteSDGroup(0);/ 初始化存储器RAMwhile(TrainWord(NAME_ID,0) != 0) ; BSR_InitRecognizer(BSR_MIC); /辨识器初始化BSR_EnableCPUIndicator(); /启动实时监控PlayRespond(RSP_STAR); /播放开始辨识提醒音Protect_Clock();Trained = 1;Voice_State=1;LCD
29、_CLEAR();LCD_SHOW(Voice Trained!);SET_Address2();LCD_SHOW(Remember it!);PlayRespond(9);/语音提醒*语音密码修改成功!Protect_Clock();InitIO();/键盘KeyDownTimes = 0; Key_Flag = NoKey; /BSR_DeleteSDGroup(0);/ 初始化存储器RAMLCD_INIT();INIT_GONGNENG();LCD_CLEAR();LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(A?B?C?D?E?F?.);Stat
30、e=1;break;default:break;/Switch(State)Clear_Password();Key_Num=0;break;/if(pass=1)elseError_No+;if(Error_No3) LCD_CLEAR(); LCD_SHOW(error pwd); SET_Address2(); LCD_SHOW(Remember it!);PlayRespond(7);/语音提醒*密码错误!Protect_Clock(); LCD_CLEAR(); LCD_SHOW(Welcome!); SET_Address2(); LCD_SHOW(A?B?C?D?E?F?.);e
31、lse LCD_CLEAR(); LCD_SHOW(error pwd); SET_Address2(); LCD_SHOW(Remember it!); ALARM(); PlayRespond(10);/语音提醒*我要报警了! Protect_Clock(); LCD_CLEAR(); LCD_SHOW(Welcome!); SET_Address2(); LCD_SHOW(A?B?C?D?E?F?.);Clear_Password();Key_Num=0;State = 1;break;case 12:/取消键LCD_CLEAR();LCD_SHOW(Cancel);SET_Addres
32、s2();LCD_SHOW(Do it again!);Clear_Password();LCD_CLEAR(); LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(A?B?C?D?E?F?.);Key_Num=0;State = 1;break;case 13:/更改键LCD_CLEAR();LCD_SHOW(Modify passwd!);SET_Address2();LCD_SHOW(Check you ID:);PlayRespond(6);/语音提醒*请输入密码!Protect_Clock();State = 2;break;case 14:/进入
33、语音LCD_CLEAR();LCD_SHOW(Open voice!);SET_Address2();LCD_SHOW(Check you ID:);PlayRespond(6);/语音提醒*请输入密码!Protect_Clock();State = 5;break;case 15:/关闭语音LCD_CLEAR();LCD_SHOW(VOICE OFF);SET_Address2();LCD_SHOW(Remember it!);Voice_State=0;PlayRespond(11);/语音提醒*语音功能关闭!Protect_Clock();LCD_CLEAR(); LCD_SHOW(Welcome!);SET_Address2();LCD_SHOW(A?B?C?D?E?F?.);break;default:break;