datasheet

智能家居控制系统C程序

2018-01-12来源: eefocus 关键字:智能家居  控制系统

#include  

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]; 
                       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  
//#pragma  ot(6,SIZE) 
#include  
#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--); 

关键字:智能家居  控制系统

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018011237326.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:智能家居控制系统VB上的代码
下一篇:单片机双机通信c51程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

家电企业做手机 意在家居智能化

的市场竞争力。另一方面,打通销售渠道,促进线上线下两个渠道的融合,提升用户的消费体验,也能促进用户消费。对于国际市场来说,“一带一路”建设的稳步推进,中国与世界的互联互通日益加强,也为家电企业借助既有海外销售渠道推动手机产品走出国门提供了帮助。家电企业可以通过在国际市场建立优势,避开国内激烈的竞争,实现弯道超车。  把手机打造成智能服务终端  与一般企业拓展智能手机业务不同,服务智能家居是多数家电企业投入巨大资金进行手机研发的原因。不少家电企业希望将手机打造为物联网领域连接家电与智能硬件的服务终端。  与普通家居相比,智能家居不仅具有传统的居住功能,而且能够提供信息交互,使用户能够在外部查看和控制家居的相关设备,令家居生活更加安全、舒适
发表于 2018-12-06

国内智能门锁使用率不到5% 智能门锁市场大有可为

作为智能家居、IOT的重要入口,智能门锁行业搅局者越来越多。这之中既有网易、小米等巨头,美的、格力等家电厂商,也有新兴创业公司。  12月5日,小米众筹直播发布小米米家智能门锁,同一天,深圳零匙发布智能锁。目前市场上智能门锁品牌超过2000个,公司数量约1300家。赛道变得拥挤,在B2B建材采购交易平台采筑总经理都军看来,各个智能门锁彼此间信息是隔断的,市场一直是碎片市场。  超1300家公司抢夺智能门锁市场  2016年堪称智能门锁爆发元年。在这之前头部智能门锁企业产能为10万台,至2018年,产能超过20万台的智能门锁企业已经超过了20家。  全国制锁信息中心数据显示,截止目前全国共有约1300家智能锁企业,2800多个品牌
发表于 2018-12-06
国内智能门锁使用率不到5% 智能门锁市场大有可为

戴伟民:自动驾驶和智能家居是人工智能落地重要领域

近日,芯原微电子(芯原)创始人、董事长兼总裁戴伟民博士参加了中国集成电路设计业2018年会,在年会的主题演讲中,戴伟民以AI如何落地为主题,对中国目前的AI芯片现状提出了自己的想法和建议。戴伟民表示,如今AI产业烧钱很厉害,但AI芯片也是芯片,最终还是要有地放,要落地。他认为,汽车、智能家居将是AI落地的主战场,而实际上芯原的主要客户也大都在这几大领域布局。芯原微电子(芯原)创始人、董事长兼总裁戴伟民博士自动驾驶是AI的珠穆朗玛峰“AI产业的珠穆朗玛峰是自动驾驶,如果你做出来了,其他都应该不在话下。”戴伟民说道。据悉,芯原已经和欧洲自动驾驶公司AImotive合作,开发出全球第一颗对标 L4 的基于多传感器的神经网络芯片,项目正在
发表于 2018-12-06
戴伟民:自动驾驶和智能家居是人工智能落地重要领域

别出心裁设计 这个小冰箱可以挂在墙上

大家认为的冰箱形态都是什么样的?你肯定觉得是个大铁盒子,然后不同的只是有多少个门吧,现今的冰箱是越做越大,有对开门冰箱,十字对开门冰箱,还有日式四门、法式多门等舶来品冰箱,不过笔者今天介绍的这款冰箱可谓非常的“佛系”了~其实很多家庭喜欢在客厅摆放一个小冰箱,可以冰一些饮料、啤酒和水果,方便随时随地拿取。“shelves”冰箱设计可以满足这些需求,但与我们常见的小冰箱完全不一样,因为它更家具化,如此更能融入家居环境。使用方式也完全不同,容量也不是很大,但作为临时摆放完全足够。它看着就像是一个壁挂搁板,在不使用状态下,还能折叠到墙壁。需要使用,翻下来即可,开启,放上食物,盖上半透明盖子就行了。
发表于 2018-12-03
别出心裁设计 这个小冰箱可以挂在墙上

未来家居新模式 ZEALER发布新型智能化住宅

近日,时隔四年,数码自媒体平台起家的ZEALER再次召开发布会,推出归属旗下智能生活相关的NEXT NEST——一套位于深圳市的88平米智能化住宅。  这是ZEALER举行的第二场大型线下发布会,上次王自如对外公布了“新的评测数据标准”。而时隔四年,这次ZEALER则是一次产品发布会,发布的内容是NEXT NEST:一套智能家居系统,将之融入到一套房子。王自如称:这套房子重装历时1年,投入将尽2000万,总共接入了52个品牌的103个终端设备,同时申请了3个国家专利。  整套装修类似于模块化设计思路,相比较传统意义上,客厅,书房,卧室的划分方式,NEXT NEST把整个家划分成两个最大的模块,客厅,书房,厨房,洗衣房
发表于 2018-12-02
未来家居新模式 ZEALER发布新型智能化住宅

消费市场表现火热 智能家居路在何方?

随着时间推移连接技术不断创新,物联网和终端侧人工智能技术也得到发展,智能家居作为当下充分利用了物联网和端侧AI并成功落地的典型代表,今年(2018年)市场表现异常火热。  智能家居成消费潮流  天猫双11智能家电开场仅1个小时,天猫IoT共卖出100万件;另一边,京东家装建材11月1日全天销售额TOP10单品中6款均为智能家装产品。从这些数据可以看出,高品质、智能化、个性化定制的智能家居产品正逐渐成为国人实物消费新趋势。  智能家居作为未来朝阳产业,市场竞争日趋白热化,从互联网、安防等行业巨头,再到众多新创企业,都先后宣布布局智能家居领域。目前,从最初的摄像头、插座、灯泡,到目前已衍生出机器人、控制器、感应器等更多新奇产品,相关
发表于 2018-11-30

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">