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

📄 智能家居控制系统.c

📁 《智能家居控制系统》全套资料
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*    智能家居控制系统程序
*    作者 :梦想科技*老高
*    Email:9902013327@163.com
*    单片机采用AT89S52,晶振频率为:12.00MHz。
/******************************************************************************/  
#include <AT89X55.H>

bit r_flag;

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);


sbit key   = P2^0;
bit key_flag;

sbit dog   = P0^7;
sbit LED   = P0^0;
sbit TELA   = P3^6;
sbit TEL  = P3^7;
sbit RING  = P3^2;
sbit switching =P0^4;


unsigned char mode;
bit passwordflag;
unsigned char password[6];
unsigned char passwordtest[6];

void dlms(unsigned int x);
void reset(void);
void open(void);

//****************************************************************  //
//               INT1中断服务程序                   			    //
//****************************************************************  //
unsigned char ring_fluctuation;
unsigned char ring_count;
bit ring_flag;
void service_int0() interrupt 0 using 1
{
 if(ring_fluctuation<10)
   {
    ring_fluctuation++;     
    }
 }
//****************************************************************  //
//                      t1 定时中断                   		        //
//****************************************************************  //    
unsigned char ring_dlsm;
unsigned char ring_time;
unsigned int ring_reset_time;
unsigned char dlms_time;
void timer1 (void) interrupt 3 using 0
{
  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;
	  }
	else if(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中断服务程序                   			    //
//****************************************************************  //

unsigned char DTMF;
void service_int1() interrupt 2 using 1
{
 EX1=0;
 DTMF=P1;
 DTMF=DTMF>>4;	
} 



void main(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)
	       {
            case 0:;
	               
	               break;
            case 1:
			       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;
            case 2://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;
            case 3://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;
            case 4://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;
            case 5://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;
            case 6://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;
            case 7://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;
            case 8:
			       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];

⌨️ 快捷键说明

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