智能家居中的安全防范系统设计毕业论文 下载本文

//CommandBuf数组中 CommandBuf[i]=SystemBuf[64+i]; }

if(Compare()&&(CommandBuf[6]=='k')) //判断指令是否为开继电器指令 { switch(CommandBuf[7]) { case 0x31: relay_1=0; // check=1; break; case 0x32: relay_2=0; // check=1; break; case 0x33: relay_3=0; // check=1; break; case 0x34: // check=1; break; case 0x35: case 0x36: case 0x37: case 0x38: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x3f: // check=1; break; default:flag=1; //其他指令定义为错误操作 break; //置位错误操作位为1 } } else { if(Compare()&&(CommandBuf[6]=='g')) //判断指令是否为关闭电器指令

49

{ switch(CommandBuf[7]) { case 0x31: relay_1=1; break; case 0x32: relay_2=1; break; case 0x33: relay_3=1; break; case 0x34: break; case 0x35: case 0x36: case 0x37: case 0x38: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: break; default:flag=1; //其他指令定义为错误操作 break; //置位错误操作位为1 } } else {flag=1;} //如果发送的指令既不是open也不是shut就定义为错误操作 } }

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

/////////////////////////////////bit Compare(void)

********************************************************************************************/ bit Compare(void) {

uchar i,k;

50

for(i=0;i<6;i++) {

if(CommandBuf[i]==password[i]) k++; }

if(k==6) { k=0; return 1; } }

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

//////////////////////////////报警短息:应用中断 模拟红外、烟雾、煤气报警 ////////////////////////////////////////////////////////////////////////////////////////////// void sendBaoJing(void) {

uchar i;

for(i=0;i<8;i++) { AT_SendNumber[i]=AT_CMGS[i]; }

for(i=8;i<24;i++) { AT_SendNumber[i]=MyTel[i-8]; //将对方号码提取用来回复给对方 }

sendstring(AT_SendNumber); Delay_ms(400);

sendstring(danger); //

Delay_ms(30); sendchar(0X1A); }

3、EEPROM.C #include #include\#include\

uchar password[6];

uchar passwordx[6]={'0','0','0','0','0','1'};//初始密码000001

/*========================关闭IAP功能====================*/

void iap_disable()

51

{

isp_contr=0x00; //关IAP功能 isp_cmd =0x00; //清寄存器 isp_trig =0x00; //清触发器 isp_addrh=0x00; isp_addrl=0x00; }

/*=========================读数据======================*/ uchar e2_read(uint addres) {

uchar i=0; uchar z=0; EA=0;

isp_addrl=addres%0x100; //低位地址 isp_addrh=addres/0x100; //高位地址

isp_contr=0x80; //设时间与充ISP操作。 isp_cmd=0x01; //写命令 isp_trig=0x46; //触发

isp_trig=0xb9; //触发启动。 for(i=0;i<6;i++); //延时

iap_disable(); //关IAP功能 z=isp_data; //把数据送到Z并返回 EA=1; return(z); }

/*=========================编程数据=====================*/ void e2_write(uint addres,uchar write_data)//写数据。 {

uchar i=0; EA=0;

isp_data=write_data; //要写入的数据。 isp_addrl=addres%0x100; //低位地址 isp_addrh=addres/0x100; //高位地址 isp_contr=0x80; //设时间与充ISP操作 isp_cmd=0x02; //写命令

isp_trig=0x46; //触发 isp_trig=0xb9; //触发启动 for(i=0;i<6;i++); //延时 EA=1;

iap_disable(); //关IAP功能 }

/*=========================擦除扇区======================*/

52

void e2_erasure (uint addres) //扇区擦除。 {

EA=0;

isp_addrl=addres%0x100; //低位地址 isp_addrh=addres/0x100; //高位地址

isp_contr=0x80; //设时间与充ISP操作。 isp_cmd=0x03; //扇区命命令 isp_trig=0x46; //触发

isp_trig=0xb9; //触发启动。 iap_disable(); //关IAP功能 EA=1; }

/*=========================存储读取======================*/

//State=1 存储数据、为0则读取数据并返回;Value1为写入的数;addres为地址 //第一扇区:0x2000-0x21FF 第二扇区:0x2200-0x23FF //第三扇区:0x2400-0x25FF 第四扇区:0x2600-0x27FF //第五扇区:0x2800-0x29FF 第六扇区:0x2A00-0x2BFF //第七扇区:0x2C00-0x2DFF 第八扇区:0x2E00-0x2FFF uchar Isp_Write_Read(bit State,uchar Value1,uint addres) {

uchar num; if(State==1) {

e2_erasure(addres);

e2_write(addres,Value1); } else {

num= e2_read(addres); return num; } }

/////////////////读出EEPROM中的密码/////////////////// void Read_Password(void) {

uchar i;

for(i=0;i<6;i++) {

password[i]=Isp_Write_Read(0,0,0x2000+0x0200*i); } }

///////////////向EEPROM中写入密码//////////////////// void Write_Password(void) {

53