最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

智能门禁系统详细设计概要

来源:动视网 责编:小OO 时间:2025-10-02 18:08:43
文档

智能门禁系统详细设计概要

智能门禁系统摘要:智能门禁系统采用凌阳十六位单片机作为系统控制核心,利用其强大的语音识别功能,不仅实现了语音播放功能,完成了语音提示的要求,而且实现了语音控制门禁系统;利用其内置的Flash闪存,实现了密码的断电保护。除此而外,在键盘输入方面,强大的功能选择键满足了系统的要求;16*2液晶显示器的选择使操作要求清晰明了。此套智能门禁系统强烈体现了其人性化的一面。关键词:智能门禁系统、语音识别、凌阳十六位单片机。引言家用防盗门早已经进入到千家万户,但防盗门的操作麻烦给用户带来了许多不便,当今市场
推荐度:
导读智能门禁系统摘要:智能门禁系统采用凌阳十六位单片机作为系统控制核心,利用其强大的语音识别功能,不仅实现了语音播放功能,完成了语音提示的要求,而且实现了语音控制门禁系统;利用其内置的Flash闪存,实现了密码的断电保护。除此而外,在键盘输入方面,强大的功能选择键满足了系统的要求;16*2液晶显示器的选择使操作要求清晰明了。此套智能门禁系统强烈体现了其人性化的一面。关键词:智能门禁系统、语音识别、凌阳十六位单片机。引言家用防盗门早已经进入到千家万户,但防盗门的操作麻烦给用户带来了许多不便,当今市场
智能门禁系统

摘  要:智能门禁系统采用凌阳十六位单片机作为系统控制核心,利用其强大的语音识别功能,不仅实现了语音播放功能,完成了语音提示的要求,而且实现了语音控制门禁系统;利用其内置的Flash闪存,实现了密码的断电保护。除此而外,在键盘输入方面,强大的功能选择键满足了系统的要求;16*2液晶显示器的选择使操作要求清晰明了。此套智能门禁系统强烈体现了其人性化的一面。

关键词:智能门禁系统、语音识别、凌阳十六位单片机。

引言

家用防盗门早已经进入到千家万户,但防盗门的操作麻烦给用户带来了许多不便,当今市场迫切需要一种既安全又方便的门禁系统,鉴于此,我们的“智能门禁系统”——带语音识别、液晶显示功能的电子密码锁便应运而生。

为了向大家介绍此智能门禁系统,我们将从以下几个方面介绍:

1、系统的制作意义。

2、系统的制作早期构想及其实现方案简介。

3、系统功能最终实现及演示。

4、系统硬件部分原理介绍。

5、系统软件部分设计实现。

6、对系统的自我评价。(存在及要解决的问题)

7、制作心得和体会。

8、参考文献。

9、附录(一):凌阳单片机最小系统。

10、附录(二):凌阳单片机下电子密码锁程序实现。

11、附录(三):器件列表。

1.系统的制作意义

现在人们生活水平提高了,安全防范,是人们考虑的首要问题。而锁是解决安全问题的重要产品。目前市场上的电子锁产品功能不全,性能和安全性不高,且造价高。低质量的电子锁,给用户的财产安全造成很大威胁,同时,由于功能的不健全,给用户的使用带来了一定麻烦。故我们试图研制一种智能化、多功能、更人性化的门禁系统。

我们研制的带语音识别功能电子控制密码锁,不仅给用户带来了安全的保障,方便的享受,而且此电子锁的语音识别功能更加体现了他人性化的一面,此种类型的电子密码锁将成为未来社会的供求亮点。

2.系统的制作早期构想及其实现方案简介

1.早期构想

预期实现功能如下:

(1)、键盘简化及编码方式的改进;

键盘简化及编码方式的改进:普通数字键密码锁虽然有使用简单的特点,但是键盘暴露在外,易受破坏,或者保密性不高;此外,键盘数量的简化又同时增加了使用的难度,用户使用不方便。大家可能见到过一些进口的温控制器(如日本RKCINSTRUMENT INC.生产的REX_C700温控器)的面板设计为:温度测量只用4位LED数码管显示,输入设定值显示也用4位LED。综合以上因素考虑,我们采取四按键的形式,输入键分为加、减、左、右移动键,按下加法键(减法键)确定一位密码的值,然后使用左右移动键移向下一位密码,再一次使用加、减键确定此位密码的值。 (备注:这部分虽然没有实现,但我们的16位键盘设置更加体现了系统功能的强大性)

(2)、语音识别系统控制;语音识别功能,语音控制门禁开关。

(3)、语音提示功能;

(4)、自动实现报警;当门禁系统输入密码错误过多时,自动报警

(5)、断电密码保护;出现断电、多次错误密码输入时的处理

(6)、限时开门系统;(这部分功能我们没能实现,很是遗憾)

(7)、液晶显示功能;

在初期设计电路时,我们计划采取51单片机作为我们的控制核心,然而,语音识别功能、语音提示功能、密码断电保护功能需要我们外扩集成芯片才能满足系统要求。其功能实现原理方框图如下:

在此种条件下我们用51单片机做出了一个简单的系统,基本实现了电子密码锁的键盘输入和液晶显示功能。具体电路图如下:

其软件编程实现程序见附录(一):

其实现功能如下:

1、设置密码,断电不保护;

2、输入密码,与系统原有密码或者设置新密码比较;

3、液晶显示功能;

4、报警功能;

显然,这个“最小系统”的制作无法满足我们预期的功能实现,如果采用外扩集成芯片的做法,不仅从技术上,还是从经济方面考虑都不是一个明智的选择。鉴于此,我们采用凌阳单片机作为我们的控制电路核心,凌阳十六位单片机不仅内置32kFlash(闪存),而且集成了语音识别模块,从根本上,凌阳单片机满足了系统的基本要求,具体功能实现以及电路设计在以下详细介绍。

3.系统功能最终实现及演示

此系统现阶段包括以下几个模块:

1)、键盘输入密码

此系统采用4*4按键输入模式,密码初始设置为4位,(从软件上很容易实现更多位数的密码操作,为操作演示计,我们采用4位)。

各个按键功能的定义如下:

1、0~9数字健指定为密码设置健(仅且只有他们能够作为密码值)

2、A——确认健(按下此键,即比较输入密码值正确如否)

3、B——取消键(按下此键,即取消上一次操作)

4、C——开启语音功能键(按下此键,再次输入密码,就可以开启语音控制功能)

5、D——关闭语音功能键(按下次键,就可以关闭语音控制功能)

6、E——修改密码键(按下次键,再次输入密码,通过验证后,连续输入两次新的密码就可以设置新的密码)

7、F——更改语音控制口令(按下次键,再次输入密码,通过验证后,即可进入语音口令修改程序操作)

2)、语音控制输入

进入语音控制功能后,先进行语音控制训练操作(训练过后此操作可跳过),训练成功后,方可进行语音控制,并且时时可以关闭语音功能。

此外,语音口令还可以时时修改,再次进行语音控制训练操作即可。

3)、密码修改操作

此系统的密码设置存在Flash中,断电不丢失,密码修改后,系统原密码作废,新的密码生效,并存入Flash中。

4)、语音提示操作

对应于每一种操作,系统均给予一定的语音提示。如:“请输入密码”、“密码错误”等。

5)、液晶显示功能

对应于每一种操作,系统均给予一定的显示提示,方便操作。

6)、液晶背光功能实现

为了实现液晶背光功能,我们设计了一下三种电路:超声波探测电路、光敏传感电路、按键触发电路,在光线好的情况下,液晶不背光显示,光线差时,有按键或探测到有人接近时背光显示。

7)、系统执行机构

系统执行机构我单片机I/O口输出控制的继电器。

8)、报警蜂鸣器

9)、电源信号指示灯

10)、控制信号指示灯

4.系统硬件部分原理介绍

此系统硬件部分电路核心部分为凌阳单片机及其外围电路(包括语音识别、输出电路),外围电路有:键盘输入、液晶显示、执行机构电路,此外,为了实现液晶显示器的背光功能,我们采用了超声波探测电路、光敏传感电路、输出延时电路等。电路总体设计模块方框图如下:

控制液晶显示背光功能

为了详细介绍我们的电路功能模块,我们将在下面分块介绍本系统的各个功能模块:

1、电源部分:

2、电源信号灯:

3、凌阳十六位单片机控制电路:见附录(一) 

4、被控制的继电器:

5、控制信号灯:

6、蜂鸣器:

7、键盘输入部分:

8、液晶显示部分:

9、背光功能控制模块

基本方框图如下:

1)、超声波探测发射部分:(含波形)

2)、超声波探测接收放大电路:

3)、光敏传感检测电路:

4)、输入信号延迟电路:

5.系统软件部分设计实现

1、软件设计操作平台简介:(µ'nSP® IDE)

µ'nSP® IDE工作界面如下:

2、此系统功能复杂,但软件设计较为简单,程序功能实现简介图如下:

对操作程序的解释以及要求:

1、直接输入密码开门;

输入四位密码后按确认键,比较密码,密码正确表开启门禁系统,并有“门已经打开,请进”的提示余音。

2、设置新的密码;

按下B键后,输入原密码,确认后输入新的密码,确认后再次输入新的密码,检验正确后,密码修改成功,原密码作废。

3、开启语音功能;

按下C键,输入密码确认后,进入语音识别模式。如果是第一次进入语音识别模式,需要进行语音识别训练,训练两遍正确后,完成训练操作,此时语音识别功能实时监测。在语音识别实时监测的同时,我们的键盘扫描并没有停止,也就是说我们的键盘输入等级高于语音识别模式,在任何情况下键盘输入都是有效的。

4、关闭语音识别功能;

按下D键,不需要输入密码即可关闭语音识别功能,要想开启此项功能,必须按下C键开启语音识别功能。

5、更改语音口令;

按下E键,进入语音识别口令修改模块,输入密码确认后,进入语音口令修改训练模块,根据语音提示以及液晶显示很方便的就可以成功更改语音口令。

6、取消键;

按下F键,即可取消所有操作,回到系统初始化后的界面。

主程序见附录(二):

6.对系统的自我评价

    在总体上,我们对这个系统的设计还是比较满意的,但是,虽然我们对这个项目投入了大量的时间和精力,由于知识有限,我们在很多方面有很多的不足之处。

    以下我将从硬件和软件两个方面来阐述这个系统的各个部分:

硬件部分:

1.我们认为,我们做得比较成功的地方就是通过超声波探测、光敏传感以及延时电路的组成实现了液晶显示器的背光功能

     2.此外,我们的液晶显示和键盘电路十分简洁。

      3.遗憾的是,超声波探测精度不高,准确性有待改进。

软件部分:

1.一提的是,在整个系统设计过程中,语音控制和语音输出提示一直是我

们软件设计的重点,同时也是我们的亮点,体现了我们设计系统人性化的一面。

2.键盘扫描和液晶驱动工程中,我们详尽地应用了科学的软件设计思想,

使程序简洁,有效。

3.此外,我们的主程序设计,结构鲜明,条理清晰。

4.但是,美中不足的是,我们在开启语音功能时,系统时钟不断变化,所以造成键盘扫描的不成熟,此处有待改进。

7.系统设计过程中的实践体验

    通过对该系统的设计,我们不仅收获颇丰,而且体会也颇深。

1.过这次设计,我们深深体会到,理论指导着实践,但实践才是最终的目

标。我们在设计过程中,往往遇到这样的情况,设计的电路从理论上毫无差错,但实现起来却是困难重重。只有在不断的摸索中才能找到界却问题的方法。

2.们深深体会到团体合作,在项目制作过程中十分重要,好的合作精神需

要我们时时刻刻牢记在心。

3.在任何时候,科技离不开创新,在设计项目的同时,我们需要抛弃成见,标新立异,敢于实现。在这一点上,我认为我们做得比较成功。在设计系统初始,我们采用51系列单片机,而语音功能却只能外扩专用芯片,实现起来比较困难,最后我们大胆采用凌阳单片机一举解决语音控制问题。

制作过程中,齐明老师在技术上给予极大的帮助和支持。在此,感谢齐明老师对我们电子制作的指导!

    总之,这次活动给我们带来了无穷的收获和乐趣,感谢学校和老师给我们提供了一个锻炼的大舞台。

8.参考文献

《凌阳十六位单片机应用教程》

《MCS-51 单片机应用设计》

《元器件手册》

9.附录

附录(一):凌阳单片机最小系统:

附录(二):凌阳单片机下电子锁程序实现:

#include "bsrsd.h"

#define HaveKey  1

#define NoKey    0

#define NAME_ID         0x100

#define RSP_AGAIN        1

#define RSP_NOVOICE        2

#define RSP_NAMEDIFF    3

#define RSP_CMDDIFF        4

#define RSP_STAR        5

#define RSP_NOISY        6

//宏定义

#define HaveKey 1

#define NoKey 0

//..................全程变量....................

extern void ClearWatchDog();

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, int RespondID);

//全局变量定义

extern Pwd_Init[1];

unsigned int Password[4];

unsigned int Password_Temp[4];

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;    //这个变量用于判断目前除在哪中输入状态中

                //1:普通开门状态    2:更改密码,输入原密码状态    3:更改密码,第一次输入新密码状态 

                //4:更改密码,第二次输入新密码状态  5:进入语音系统时输入密码状态 6:进入语音系统重新训练

                //   输入密码验证

/*****************************************************************************************************/    

    Protect_Clock();

    InitIO();//键盘

    KeyDownTimes = 0;                                     

    Key_Flag = NoKey; 

    ClearWatchDog();

    BSR_DeleteSDGroup(0);                            // 初始化存储器RAM

    LCD_INIT();

    INIT_GONGNENG();    

    Clear_Password();

    LCD_SHOW("Welcome!");

    SET_Address2();

    LCD_SHOW("A?B?C?D?E?F?...");

    if(F_FlashRead(Pwd_Init))

    {

        F_FlashErase(0xfe00);

     for(i = 0;i<4;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)    //有按键按下

        {            

          Key_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)    //判断键值

            {    

                //0~9表示输入的是密码,将等待下一个键的输入

                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:

                    if(Key_Num == 0)

                    {

                        LCD_CLEAR();

                        LCD_SHOW("Password:");

                        SET_Address2();

                    }

                 if(Key_Num < 4)

                    {

                        Password[Key_Num ++] = Key_Value;                //保存输入的键值,已输入按键数加一

                         LCD_ADD(Key_Value+'0');                            //屏幕上显示一个*号

                         DELAY();                        

                    }

                 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;

                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;i<4;i++)    /*把这个密码存到临时变量Password_Temp中*/

                            {

                                Password_Temp[i]=Password[i];

                            }

                            Pass=0;

                            Key_Num =0;

                            State = 4;

                            break;

                        }

                        else

                        {    

                            LCD_CLEAR();

                            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();

                        }    //第二遍输入密码时的验证

                    else

                        {Pass=0;

                        Pass = F_Affirm_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_CLEAR();

                                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("Successfully!");

                                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;

                                }

                                else

                                {

                                    while(TrainWord(NAME_ID,0) != 0) ;          

                                    BSR_InitRecognizer(BSR_MIC);                    //辨识器初始化

                                    Protect_Clock();                                //******保护时钟************************

                                    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("A?B?C?D?E?F?...");

                                State=1;

                                break;                            

                            case 6://重新输入开始语音训练

                                Trained=0;

                                if(Trained)

                                {

                                    Voice_State=1;

                                }

                                else

                                {

                                    BSR_DeleteSDGroup(0);                            // 初始化存储器RAM

                                    while(TrainWord(NAME_ID,0) != 0) ;          

                                    BSR_InitRecognizer(BSR_MIC);                    //辨识器初始化

                                    BSR_EnableCPUIndicator();                       //启动实时监控

                                    PlayRespond(RSP_STAR);                            //播放开始辨识的提示音

                                    Protect_Clock();

                                    Trained = 1;

                                    Voice_State=1;

                                }

                                LCD_CLEAR();

                                LCD_SHOW("Voice Trained!");

                                SET_Address2();

                                LCD_SHOW("Remember it!");

                                PlayRespond(9);                    //语音提示*****语音密码修改成功!·!!!!!

                                Protect_Clock();

                                InitIO();//键盘

                                KeyDownTimes = 0;                                     

                                Key_Flag = NoKey; 

                                //BSR_DeleteSDGroup(0);                            // 初始化存储器RAM

                                LCD_INIT();

                                INIT_GONGNENG();

                                LCD_CLEAR();

                                LCD_SHOW("Welcome!");

                                SET_Address2();

                                LCD_SHOW("A?B?C?D?E?F?...");

                                State=1;                            

                                break;                                                                                                            

                            default:

                                break;

                        }        //Switch(State)

                        Clear_Password();

                        Key_Num=0;

                        break;

                    }        //if(pass==1)

                    else

                    {    

                        Error_No++;

                     if(Error_No<3)

                        {

                         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?..");

                        }

                        else

                        {

                         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_Address2();

                    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://进入语音

                    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;

            }//与switch(KeyValue)相对应

      }//与while(有键按下)

      if(Voice_State)

      {

          Protect_Clock_fast();

          res = ProtectA_BSR_GetResult();    

        Protect_Clock();                                                        

     if(res > 0)                              //识别出命令

        { 

                switch(res)

                {

                case NAME_ID:                 //触发命令响应

                                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_CLEAR();

                                LCD_SHOW("Welcome!");

                                SET_Address2();

                                LCD_SHOW("A?B?C?D?E?F?...");

                                Key_Num=0;//**********?

                                State = 1;//********?

                             break;

                 }

         }

        }//if(Voice_state=1)

      

}//while(1)

}//main()

///////////////////////////////////////////////

void Clear_Password()

{

    int i;

for(i = 0;i<4;i++)

    {

        Password[i] = 0;

        Password_Temp[i] = 0;

    }

    Key_Num = 0;

}

/////////////////////////////////////////////////

unsigned int F_Affirm_New_Password()

{

    int i;

for(i=0;i<4;i++)

    if(Password[i]!=Password_Temp[i])

        {return 0;}

    

    return 1;

}

///////////////////////////////////////////////////

unsigned int F_Affirm_Password()

{

    int i;

    unsigned temp;

for(i=0;i<4;i++)

    {

        temp = F_FlashRead(0xfe00 + i);             //确定返回值是r1

        if(

        Password[i] != temp)

        return 0;

    }

    return 1;

}

/////////////////////////////////////////////////////

void Save_New_Pwd_To_Flash()

{

    int i;

    F_FlashErase(0xfe00);

for(i=0;i<4;i++)

    {

        F_FlashWrite1Word(0xfe00+i,Password[i]);

    }

}

///////////////////////////////////////////////////////

void LCD_SHOW(char Sentence[])

{

    int i;

    for(i=0; Sentence[i] != '\\0'; i++)

        LCD_ADD(Sentence[i]);

}

////////////////////////////////////////////////////////

void PlayRespond(int Result)

{

    BSR_StopRecognizer();

    SACM_S480_Initial(1);

    SACM_S480_Play(Result, 3, 3);

    while((SACM_S480_Status()&0x0001) != 0)

    {

        SACM_S480_ServiceLoop();

        ClearWatchDog();

    }

    SACM_S480_Stop();

    BSR_InitRecognizer(BSR_MIC);

    BSR_EnableCPUIndicator();    

}

////////////////////////////////////////////////////////

int TrainWord(int WordID, int RespondID)

{

    int res;

    PlayRespond(RespondID);//----------------------------------请输入触发名称-     (0)-----------

    while(1)

    {    

        ClearWatchDog();

        

        Protect_Clock_fast();

        res = BSR_Train(WordID,BSR_TRAIN_TWICE);

        Protect_Clock();

        

        if(res == 0) break;

        switch(res)

        {

        case -1:                                     //没有检测出声音-----------(1)

            PlayRespond(RSP_NOVOICE);

            return -1;

        case -2:                                     //需要重新训练一遍-----(2)

            PlayRespond(RSP_AGAIN);

            break;

        case -3:                                     //环境太吵--------(3)

            PlayRespond(RSP_NOISY);

            return -1;        

        case -4:                                     //数据库满

             return -1;

        case -5:                                     //检测出声音不同

            if(WordID == NAME_ID)    PlayRespond(RSP_NAMEDIFF);//两次输入名称不同(4)

            else                    PlayRespond(RSP_CMDDIFF);//两次输入命令不同(5)

            return -1;

        case -6:                                     //序号错误

            return -1;

        }

    Protect_Clock();

    }

    return 0;

    Protect_Clock();

}

附录(三):器件列表

凌阳单片机最小系统一套;

16*2 16位液晶显示器一块;

4*4键盘一个;

C945 三极管若干;

继电器一块;

555定时器若干;

超声波探头一对;

LM567音频解码器一个;

电阻电容若干;

74LS00与非门一块;

文档

智能门禁系统详细设计概要

智能门禁系统摘要:智能门禁系统采用凌阳十六位单片机作为系统控制核心,利用其强大的语音识别功能,不仅实现了语音播放功能,完成了语音提示的要求,而且实现了语音控制门禁系统;利用其内置的Flash闪存,实现了密码的断电保护。除此而外,在键盘输入方面,强大的功能选择键满足了系统的要求;16*2液晶显示器的选择使操作要求清晰明了。此套智能门禁系统强烈体现了其人性化的一面。关键词:智能门禁系统、语音识别、凌阳十六位单片机。引言家用防盗门早已经进入到千家万户,但防盗门的操作麻烦给用户带来了许多不便,当今市场
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top