历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2018年01月12日 | 智能家居控制系统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--); 


推荐阅读

史海拾趣

EMLSI公司的发展小趣事

随着环保意识的不断提高,电子行业也开始面临环保压力。EMLSI公司积极响应环保号召,致力于开发绿色环保产品。公司投入大量资源进行环保技术研发,成功推出了一系列低能耗、低排放的电子产品。这些产品不仅满足了客户的需求,也为公司赢得了良好的社会声誉。

中电熊猫(CEC)公司的发展小趣事

2007年,中电熊猫母公司中国电子信息集团公司(CEC)对熊猫电子进行了重组,全面推进平板显示全产业链发展。2015年,中电熊猫投资291.5亿元建设的8.5代液晶面板生产线投产,成为全球首条应用金属氧化物IGZO技术的超高分辨率液晶面板生产线。这一举措标志着中电熊猫在液晶面板产业中占据了重要地位,为后续的发展奠定了坚实基础。

Heimann Optoelectronics Gmbh公司的发展小趣事

Hei Inc Optoelectronic Division的崛起始于一次关键的技术创新。在2010年代初,随着光纤通信技术的快速发展,公司对光电子器件的研发投入不断加大。经过数年的努力,研发团队成功开发出了一种新型的高速光探测器,该探测器在灵敏度和响应速度上均远超市场同类产品。这一技术创新不仅为公司赢得了多项国际专利,还迅速吸引了全球通信巨头的关注,成为公司迅速发展的转折点。随着订单量的激增,Hei Inc Optoelectronic Division迅速扩大了生产规模,并在行业内建立了领先地位。

ELEKTRO-PLAST NASIELSK公司的发展小趣事

近年来,随着数字化技术的快速发展和应用普及,电子行业也迎来了数字化转型的浪潮。ELEKTRO-PLAST NASIELSK公司紧跟时代步伐,积极推进数字化转型工作。公司引入先进的数字化设备和系统提升生产效率和质量水平;同时加强信息化建设,实现数据共享和协同办公;此外还通过电子商务平台拓展销售渠道和服务范围。数字化转型不仅提升了公司的竞争力还为客户提供了更加便捷高效的服务体验。

安美通(APPCON)公司的发展小趣事

随着市场的不断变化和客户需求的升级,安美通意识到只有不断创新才能在竞争中立于不败之地。因此,公司加大了对研发的投入,积极引进高端人才,并与多所高校和研究机构建立了紧密的合作关系。通过持续的技术创新,安美通成功推出了一系列具有自主知识产权的新产品,进一步巩固了其在行业内的领先地位。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着市场需求的不断增长,Galaxy Microelectronics意识到需要不断迭代技术和扩大产能。

发展:2010年,公司成功研发出3D V-NAND技术,这一技术革命性地提高了存储密度和性能,降低了功耗。同时,公司开始在全球范围内建设新的生产基地,以满足日益增长的市场需求。通过技术迭代和产能扩张,Galaxy Microelectronics逐渐成为了全球闪存市场的领军企业之一。

问答坊 | AI 解惑

仿真器不能仿真c6713

装上ccs3.3之后,tds510不能仿真c6713,能进入也能load程序,就是执行其他操作就出问题,说什么芯片保护不让仿真器读写寄存器。过去使用3.1的时候没有出现这个问题的。不知道是怎么回事。:L…

查看全部问答>

帮忙看看这个电路

请帮忙看看这个电路,两个三级管是怎么工作的以及这个电路的功能?谢谢。…

查看全部问答>

FPGA初步之串口仿真(仿真图附上)

对于一般比较小的程序,我们可以通过观察仿真波形来查看我们的设计,但当程序稍微复杂一点,面对着仿真波形,我们有时眼都看花了,说不定还把错误给漏了,真的得不尝失啊,别急,这时我们可以采用另一种重型武器—Verilog提供的那些用于仿真的语句 ...…

查看全部问答>

no cpu is delected

串口是USB转的 并口是PCI转的 可以连上JTAG 但是烧写程序的时候显示这个错误~!…

查看全部问答>

CCS 3.1中,如何调用library文件!?

    问题如题,例如我需要调用库函数    void DSPF_sp_iir(), 需要如何配置才行呢?谢谢。 …

查看全部问答>

中断没响应,大家帮帮忙.

目标:启用RTC CPU:ARM 710 过程: >0x18跳到中断服务例程指令(IRQ) >配置RTC各参数.最后使能RTC_CRH.GEN >配置EIC.有EIC_SIR3(配置服务例程偏移及等级(15),RTC全局中断向量号为3)           EIC_IVR(配置服务例 ...…

查看全部问答>

怎样把protel99里的某个图层导出到CAD文件中

怎样把protel99里的某个图层导出到CAD文件中 多谢~~~~…

查看全部问答>

12位adl674与单片机接口及的显示及程序

各位前辈就是这样的如题,这个是个作业老师布置的哎,,,可是老师上课没教,还说这个自己了解下,可是网上的资料很不完整,各位前辈教教我我希望有图和完整的程序拜托给位前辈了哈我邮箱是598856544@qq.com…

查看全部问答>

存储单元――急啊!!!!!!!!!!!!

请问哪位大虾知道有哪些存储器用于数据备份的, 我现在要采集数据,需要保存一年,推荐一下,谢谢!!!!!!…

查看全部问答>

《Google Android开发技术》自我推荐

 《Google Android开发技术》,西电出版,作者:张勇,2011.10  内 容 简 介 Android系统是安装在智能移动设备上的嵌入式操作系统,包括Linux内核、系统库与Java运行时、应用程序框架和应用程序层等四部分,具有公开源代码 ...…

查看全部问答>