⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 智能家居控制系统.c

📁 《智能家居控制系统》全套资料
💻 C
📖 第 1 页 / 共 2 页
字号:
				       EA=0;
                       r_flag=RW24XX(password,6,0x0000,0xa0,M2402);//W
				       EA=1;
				       reset();
					   }

	               break; 
            case 9:
	               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;
            case 10:
                        switch(DTMF)
						     {
							  case 1:
							       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;
							  case 2:
							       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;
							  case 12:
							       reset();
							       break;

							  }
				      
	               break;
//--------------------------------------------------------------------//

		    default:;
//--------------------------------------------------------------------//          
			 }
	   }

 }

 void reset(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;
  }
void open(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;
    }
 }

void dlms(unsigned int x)
{  
	unsigned int i;
	while (x-->0)
	{   
	    dog=~dog;
		for (i=0;i<163;i++)
		    {;}			
	}
}





//24cxx

//----------------------------------------------START----------------------------------------------//
//enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
//extern bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
//                     unsigned char ControlByte,enum eepromtype EepromType);

//  flag=RW24XX(&x,1,0x0000,0xa0,M24256);//W  24C256
//  flag=RW24XX(&x,1,0x0000,0xa1,M24256);//R  24C256

#include <AT89X55.H>
//#pragma  ot(6,SIZE)
#include <intrins.h>
#define  ERRORCOUNT 10

sbit     SDA=P2^7;//对应硬件
sbit     SCL=P2^6;//对应硬件

enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
enum  eepromtype EepromType;

/***********************************************************************************/
//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
/***********************************************************************************/
extern bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
                     unsigned char ControlByte,enum eepromtype EepromType)
{
void Delay(unsigned char DelayCount);
void IICStart(void);
void IICStop(void);
bit  IICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
unsigned char data j,i=ERRORCOUNT;
bit      errorflag=1;
while(i--)
   {
   IICStart();
   IICSendByte(ControlByte&0xfe);
   if(IICRecAck())
       continue;
   if(EepromType>M2416)
      {
      IICSendByte((unsigned char)(Address>>8));
      if(IICRecAck())
         continue;
      }
   IICSendByte((unsigned char)Address);
   if(IICRecAck())
       continue;
   if(!(ControlByte&0x01))
      {
      j=ByteQuantity;
      errorflag=0;                      //********clr errorflag
      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();
       }
     *DataBuff=IICReceiveByte();        //read last byte data
     IICNoAck();
     errorflag=0;
     break;
     }
  }
IICStop();
if(!(ControlByte&0x01))
  {
  Delay(255);
  Delay(255);
  Delay(255);
  Delay(255);
  }
return(errorflag);
}


/*****************以下是对IIC总线的操作子程序***/
/*****************启动总线**********************/
void IICStart(void)
{
SCL=0;                  //
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
SDA=1;                  //
}

/*****************停止IIC总线****************/
void IICStop(void)
{
SCL=0;
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
SCL=0;
}

/**************检查应答位*******************/
bit IICRecAck(void)
{
SCL=0;
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
CY=SDA;                 //因为返回值总是放在CY中的
SCL=0;
return(CY);
}

/***************对IIC总线产生应答*******************/
void IICACK(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
SDA=1;
}

/*****************不对IIC总线产生应答***************/
void IICNoAck(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}

/*******************向IIC总线写数据*********************/
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j=8;
for(;j>0;j--)
   {
   SCL=0;
   sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
   SDA=CY;
   SCL=1;
   }
SCL=0;
}

/**********************从IIC总线上读数据子程序**********/
unsigned char IICReceiveByte(void)
{
register receivebyte,i=8;
SCL=0;
while(i--)
   {
   SCL=1;
   receivebyte=(receivebyte<<1)|SDA;
   SCL=0;
   }
return(receivebyte);
}

/***************一个简单延时程序************************/
void Delay(unsigned char DelayCount)
{
while(DelayCount--);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -