智能防火防盗系统
{
if(EroTimes>=3 ||WarnSign==1) {
下面说到了EroTimes(见下节密码错误次数标志)或者温度大于50就会报警
RL=1;
并且红灯一直亮。
下面这块改变频率利用中断发声。 ??
case 0:frq += 15;break; //flag标志置0时,frq递增 case 1:frq -= 15;break; //flag标志置1时,frq递减
if (!(frq^0xff)) flag = 1; //当frq增加到FFH时,flag置1,准备frq递减 if (!(frq^0x00)) flag = 0; ??
AllKeyScan();
// 无限扫描按键
//当frq递减到00H时,flag置0,准备frq递增
ReadFrmDS18B20(); //这里不是及时显示温度了,闪烁效果太厉害了。频率不够 if(1 <= (Int_Tempt - Int_LtTemp) || -1 >= (Int_Tempt - Int_LtTemp)) ShowAllStr(); //重新刷新屏幕
Int_LtTemp = Int_Tempt; //利用温度变了一度就重新显示 ??
4.5 密码模块
IsAcessSys 映射于按键的(3,0)和(3,1)这里将此两个键设为确定键,当这个2个坐标任意一个按键(坐标)按下时候Ensure置1,然后再main里面循环里面将此函数调用,下面是调用的语句。 if(Ensure==1) {
IsAcessSys(); Ensure=0;
}
void IsAcessSys()函数是对密码的检验的正确性,而同时此函数的作用不仅仅比较函
第 16 页 (共 77 页)
系统软件的设计与实现
数的比较,更重要的功能在管理员进入系统后,AmditKey置1(AmditKey后面叫管理员),管理员就可以对密码进行修改, uchar i=0; if(NCSign==1) { }
NCSign是对密码修改器作用,当进入系统后,修改密码按键(0,0)按下,调用 ChangeCode(),NCSign = 1,进入修改的状态。 ??
if(NCSign==4) ??
当按下按键的(3,0)和(3,1)时候,NCSign = 1 进入ChangeCode(); void ChangeCode() ??
if(AmditKey==1 && NCSign==0)
//只有管理员才可以修改密码,NCSign为第一次输入新密码才会起作用。 ?? NCSign=1; if(NCSign==2) ?? NCSign=3; ??
而在ChangeCode(); 中NCSign =3,在JudgeStrSize中函数对 else if(NCSign==3) ??
NewCode2[ACSize] = keys + '0'; LCD1602Input(NewCode2[ACSize]); if(ACSize>=5)
第 17 页 (共 77 页)
NCSign=2; ChangeCode();
//*
智能防火防盗系统
{
ACSize=5; ?? }
当NCSign = 4了 就说明第一次输入的新密码至少ACSize = 5位,后才可以点击确定键。
NCSign=4; // 第二个字符新密码成功
SetComLCD1602(0xcb); // 第二行第最后那个位置
Void ??
IsAcessSys函数
if(NCSign==4) ??
if(strcmp(NewCode1,NewCode2)==0)
在 NCSign =4 下,就是得到了2个密码新字符串了。比较2个新的密码字符串是否相等、如果成功,那么就在屏幕上显示Successfully并把NewCode的值重新赋给ClientCode;(ClientCode定义的全局进入系统的密码字符串,详情查看附录代码) while(NewCode1[i]! = '\\0') { }
ClientCode[i]='\\0'; ??
while(Message[0][i]!='\\0') { }
for(i=0;i<4;i++)
DelaySecond(200);
第 18 页 (共 77 页)
ClientCode[i] = NewCode1[i]; i++;
//输出successfully!!
LCD1602Input(Message[0][i]); i++;
系统软件的设计与实现
??
下面是2次新的字符串如果不相等,那么在屏幕上显示ERROR,并且调用ShowAllStr();(PS:ShowAllStr();全部代码查看附录) i=0;
SetComLCD1602(0x01); SetComLCD1602(0x84); while(Message[1][i]!='\\0') { }
假如2次新密码匹配成功,则界面就会返回到登陆界面 就要对一下参数初始化; AmditKey=0; NCSign=0; CodeStr[0]='\\0'; Size=0; NCSize=0; ACSize=0; ShowAllStr(); ??
当系统没有进入时,也就没有管理员,密码正确程序系统才承认你是管理员, 当AmditKey = 0时候,说明此时没管理员,只有在当前输入密码后,按下确定键时才会相应此条if else if(AmditKey==0) i=0;
for(i=0;i<4;i++) DelaySecond(200);
LCD1602Input(Message[1][i]); i++;
第 19 页 (共 77 页)
智能防火防盗系统
SetComLCD1602(0x01); SetComLCD1602(0x82); SetComLCD1602(0x0c); while(CletLoad[i]!='\\0') { }
DelaySecond(250); i=0;
if(strcmp(CodeStr,ClientCode)==0)
//比较当前输入的密码,跟全局密码ClientCode对比 ,如果正确,确定管理员
AmditKey = 1;
AmditKey=1; ??
while(ASucess[1][i]!='\\0') {
LCD1602Input(ASucess[1][i]); i++; }
当登陆成功的时候,绿灯指示等就会亮1s钟作为合法提示 参看下面代码
for(I = 0;I < 10; I ++) // 绿1second { }
GL=0;SPK=0;EroTimes=0;RL=0;
GL=1;
DelaySecond(100);
LCD1602Input(CletLoad[i]); i++;
第 20 页 (共 77 页)