智能门禁系统
bsp;
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与非门一块; |
|