智能家居控制系统C程序.docx

上传人:b****7 文档编号:9926937 上传时间:2023-02-07 格式:DOCX 页数:28 大小:17.99KB
下载 相关 举报
智能家居控制系统C程序.docx_第1页
第1页 / 共28页
智能家居控制系统C程序.docx_第2页
第2页 / 共28页
智能家居控制系统C程序.docx_第3页
第3页 / 共28页
智能家居控制系统C程序.docx_第4页
第4页 / 共28页
智能家居控制系统C程序.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

智能家居控制系统C程序.docx

《智能家居控制系统C程序.docx》由会员分享,可在线阅读,更多相关《智能家居控制系统C程序.docx(28页珍藏版)》请在冰豆网上搜索。

智能家居控制系统C程序.docx

智能家居控制系统C程序

智能家居控制系统C程序

[日期:

2010-03-03][来源:

本站编辑作者:

admin][字体:

大中小](投递新闻)

#include

bitr_flag;

enumeepromtype{M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};

externbitRW24XX(unsignedchar*DataBuff,unsignedcharByteQuantity,unsignedintAddress,

unsignedcharControlByte,enumeepromtypeEepromType);

sbitkey=P2^0;

bitkey_flag;

sbitdog=P0^7;

sbitLED=P0^0;

sbitTELA=P3^6;

sbitTEL=P3^7;

sbitRING=P3^2;

sbitswitching=P0^4;

unsignedcharmode;

bitpasswordflag;

unsignedcharpassword[6];

unsignedcharpasswordtest[6];

voiddlms(unsignedintx);

voidreset(void);

voidopen(void);

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

//INT1中断服务程序//

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

unsignedcharring_fluctuation;

unsignedcharring_count;

bitring_flag;

voidservice_int0()interrupt0using1

{

if(ring_fluctuation<10)

{

ring_fluctuation++;

}

}

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

//t1定时中断//

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

unsignedcharring_dlsm;

unsignedcharring_time;

unsignedintring_reset_time;

unsignedchardlms_time;

voidtimer1(void)interrupt3using0

{

TH1=0x3c;

TL1=0xb0;

dlms_time++;

if(ring_fluctuation>5)

{

EX0=0;//INT1_OFF;

ring_dlsm++;

if(ring_dlsm==20)//等待一秒

{

ring_dlsm=0;

EX0=1;//INT1_ON;

ring_fluctuation=0;

ring_count++;//震铃次数

if(ring_flag)//有效振铃

{

if(ring_count==6)

{

ring_count=7;

mode=1;

}

}

else//无效振铃

{

if(ring_count>2)

{

ring_reset_time=800;

}

}

}

}

if((ring_count==2)|(ring_count==1))

{

ring_time++;

if(ring_time==200)

{

ring_flag=1;

}

}

if((ring_count>0)&(ring_count<6))

{

LED=INT0;

}

elseif(passwordflag)

{

LED=~LED;

}

if(ring_count>0)

{

ring_reset_time++;

if(ring_reset_time==1100)//55s

{

reset();

LED=0;

dlms(100);

LED=1;

dlms(100);

LED=0;

dlms(100);

LED=1;

dlms(100);

LED=0;

dlms(100);

LED=1;

dlms(100);

LED=0;

dlms(100);

LED=1;

dlms(100);

LED=0;

dlms(100);

LED=1;

dlms(100);

LED=0;

dlms(100);

LED=switching;

}

}

}

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

//INT1中断服务程序//

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

unsignedcharDTMF;

voidservice_int1()interrupt2using1

{

EX1=0;

DTMF=P1;

DTMF=DTMF>>4;

}

voidmain(void)

{

TMOD=0x11;

TH1=0x3c;

TL1=0xb0;

TR1=1;

ET1=1;

IT0=1;

EX0=1;

IT1=0;

EX1=1;

reset();

EA=0;

r_flag=RW24XX(password,6,0x0000,0xa1,M2402);//R

if(P2_0==0)

dlms(20);

if(P2_0==0)

{

ring_flag=1;

mode=1;

passwordflag=1;

ring_count=7;

ring_fluctuation=6;

}

EA=1;

while

(1)

{

open();

dog=~dog;

switch(mode)

{

case0:

;

break;

case1:

TEL=1;

LED=0;//

dlms_time=0;

ring_reset_time=0;

while(dlms_time<40)

{

dlms

(1);

TELA=~TELA;

}

ring_reset_time=0;

LED=1;//

TELA=0;

mode++;

DTMF=255;

EX1=1;

LED=switching;

break;

case2:

//password

if(DTMF!

=255)

{

passwordtest[0]=DTMF;

if(INT1==1)

{

dlms_time=0;

while(dlms_time<2);

if(INT1==1)

{

DTMF=255;

mode++;

dlms_time=0;

while(dlms_time<10)

{

dlms

(2);

TELA=~TELA;

}

EX1=1;

TELA=0;

}

}

}

break;

case3:

//password

if(DTMF!

=255)

{

passwordtest[1]=DTMF;

if(INT1==1)

{

dlms_time=0;

while(dlms_time<2);

if(INT1==1)

{

DTMF=255;

mode++;

dlms_time=0;

while(dlms_time<10)

{

dlms

(2);

TELA=~TELA;

}

EX1=1;

TELA=0;

}

}

}

break;

case4:

//password

if(DTMF!

=255)

{

passwordtest[2]=DTMF;

if(INT1==1)

{

dlms_time=0;

while(dlms_time<2);

if(INT1==1)

{

DTMF=255;

mode++;

dlms_time=0;

while(dlms_time<10)

{

dlms

(2);

TELA=~TELA;

}

EX1=1;

TELA=0;

}

}

}

break;

case5:

//password

if(DTMF!

=255)

{

passwordtest[3]=DTMF;

if(INT1==1)

{

dlms_time=0;

while(dlms_time<2);

if(INT1==1)

{

DTMF=255;

mode++;

dlms_time=0;

while(dlms_time<10)

{

dlms

(2);

TELA=~TELA;

}

EX1=1;

TELA=0;

}

}

}

break;

case6:

//password

if(DTMF!

=255)

{

passwordtest[4]=DTMF;

if(INT1==1)

{

dlms_time=0;

while(dlms_time<2);

if(INT1==1)

{

DTMF=255;

mode++;

dlms_time=0;

while(dlms_time<10)

{

dlms

(2);

TELA=~TELA;

}

EX1=1;

TELA=0;

}

}

}

break;

case7:

//password

if(DTMF!

=255)

{

passwordtest[5]=DTMF;

if(INT1==1)

{

dlms_time=0;

while(dlms_time>2);

if(INT1==1)

{

DTMF=255;

mode++;

//EX1=1;

}

}

}

break;

case8:

if(passwordflag==0)

{

if((passwordtest[0]==password[0])&(passwordtest[1]==password[1])&(passwordtest[2]==password[2])&(passwordtest[3]==password[3])&(passwordtest[4]==password[4])&(passwordtest[5]==password[5]))

{

mode++;

dlms_time=0;

}

else

{

reset();

}

}

else

{

dlms_time=0;

while(dlms_time<10)

{

dlms

(2);

TELA=~TELA;

}

TELA=0;

password[0]=passwordtest[0];

password[1]=passwordtest[1];

password[2]=passwordtest[2];

password[3]=passwordtest[3];

password[4]=passwordtest[4];

password[5]=passwordtest[5];

EA=0;

r_flag=RW24XX(password,6,0x0000,0xa0,M2402);//W

EA=1;

reset();

}

break;

case9:

while(dlms_time<20)

{

dlms

(1);

TELA=~TELA;

}

while(dlms_time<25)

{

}

while(dlms_time<45)

{

dlms

(1);

TELA=~TELA;

}

TELA=0;

EX1=1;

mode++;

break;

case10:

switch(DTMF)

{

case1:

if(ring_reset_time<1050)

{

dlms_time=0;

switching=0;

LED=0;

while(dlms_time<10)

{

}

while(dlms_time<20)

{

dlms

(2);

TELA=~TELA;

}

while(dlms_time<30)

{

}

while(dlms_time<40)

{

dlms

(2);

TELA=~TELA;

}

TELA=0;

DTMF=255;

EX1=1;

}

break;

case2:

if(ring_reset_time<1050)

{

dlms_time=0;

switching=1;

LED=1;

while(dlms_time<10)

{

}

while(dlms_time<20)

{

dlms(4);

TELA=~TELA;

}

while(dlms_time<30)

{

}

while(dlms_time<40)

{

dlms(4);

TELA=~TELA;

}

TELA=0;

DTMF=255;

EX1=1;

}

break;

case12:

reset();

break;

}

break;

//--------------------------------------------------------------------//

default:

;

//--------------------------------------------------------------------//

}

}

}

voidreset(void)

{

TEL=0;

TELA=0;

ring_fluctuation=0;

ring_count=0;

ring_flag=0;

ring_dlsm=0;

ring_time=0;

dlms_time=0;

ring_reset_time=0;

key_flag=0;

mode=0;

EX1=1;

DTMF=255;

LED=switching;

passwordflag=0;

passwordtest[0]=255;

passwordtest[1]=255;

passwordtest[2]=255;

passwordtest[3]=255;

passwordtest[4]=255;

passwordtest[5]=255;

}

voidopen(void)

{

if((key==0)&(key_flag==0)&(passwordflag==0))

{

dlms_time=0;

while(dlms_time<2);

if(key==0)

{

reset();

key_flag=1;

switching=~switching;

LED=switching;

dlms_time=0;

}

}

if((key==1)&(dlms_time>10))

{

key_flag=0;

}

}

voiddlms(unsignedintx)

{

unsignedinti;

while(x-->0)

{

dog=~dog;

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

{;}

}

}

//24cxx

//----------------------------------------------START----------------------------------------------//

//enumeepromtype{M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};

//externbitRW24XX(unsignedchar*DataBuff,unsignedcharByteQuantity,unsignedintAddress,

//unsignedcharControlByte,enumeepromtypeEepromType);

//flag=RW24XX(&x,1,0x0000,0xa0,M24256);//W24C256

//flag=RW24XX(&x,1,0x0000,0xa1,M24256);//R24C256

#include

//#pragmaot(6,SIZE)

#include

#defineERRORCOUNT10

sbitSDA=P2^7;//对应硬件

sbitSCL=P2^6;//对应硬件

enumeepromtype{M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};

enumeepromtypeEepromType;

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

//DataBuff为读写数据输入/输出缓冲区的首址

//ByteQuantity为要读写数据的字节数量

//Address为EEPROM的片内地址

//ControlByte为EEPROM的控制字节,具体形式为

(1)(0)

(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,

//表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;

//EepromType为枚举变量,需为M2401至M24256中的一种,分别对应24C01至24C256;

//函数返回值为一个位变量,若返回1表示此次操作失效,0表示操作成功;

//ERRORCOUNT为允许最大次数,若出现ERRORCOUNT次操作失效后,则函数中止操作,并返回1

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

externbitRW24XX(unsignedchar*DataBuff,unsignedcharByteQuantity,unsignedintAddress,

unsignedcharControlByte,enumeepromtypeEepromType)

{

voidDelay(unsignedcharDelayCount);

voidIICStart(void);

voidIICStop(void);

bitIICRecAck(void);

voidIICNoAck(void);

voidIICAck(void);

unsignedcharIICReceiveByte(void);

voidIICSendByte(unsignedcharsendbyte);

unsignedchardataj,i=ERRORCOUNT;

biterrorflag=1;

while(i--)

{

IICStart();

IICSendByte(ControlByte&0xfe);

if(IICRecAck())

continue;

if(EepromType>M2416)

{

IICSendByte((unsignedchar)(Address>>8));

if(IICRecAck())

continue;

}

IICSendByte((unsignedchar)Address);

if(IICRecAck())

continue;

if(!

(ControlByte&0x01))

{

j=ByteQuantity;

errorflag=0;//********clrerrorflag

while(j--)

{

IICSendByte(*DataBuff++);

if(!

IICRecAck())

continue;

errorflag=1;

break;

}

if(errorflag==1)

continue;

break;

}

else

{

IICStart();

IICSendByte(ControlByte);

if(IICRecAck())

continue;

while(--ByteQuantity)

{

*DataBuff++=IICReceiveByte();

IICAck()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1