载入中...





站长个人入口

载入中...


公告
载入中...


我的分类(专题)
载入中...


日志更新
载入中...


最新评论
载入中...


留言板
载入中...


链接

(转贴)  ---NEC  空调控制 (main.c)
phton 发表于 2007-5-11 12:50:00
//main.c
#pragma sfr
#pragma VECT RST main
#pragma INTERRUPT INTWT watchtime
#pragma INTERRUPT INTAD0 adconveration
#pragma INTERRUPT INTTM30 time30int
#pragma DI
#pragma EI
#pragma STOP
#pragma realregister
#pragma access
#pragma asm
#pragma NOP
#pragma rot
#pragma bcd
#i nclude "statusdd.inc"
/*const unsigned char adtemperature[51]={65,68,70,73,75,78,80,83,86,89,91,94,97,100,103,106,108,111,114,117,120,123,126,128,131,134,137,140,142,145,148,150,153,155,158,161,163,165,168,170,172,175,177,179,181,183,185,187,189,191,193}; */
const degree0=65;
const degree45=183; /*v髛wv&~?10K*/
const hfdegree10=122;
const unsigned char number[10]={0x7d,0x60,0x3e,0x7a,0x63,0x5b,0x5f,0x70,0x7f,0x7b};

extern void initial();

extern unsigned char keydowntime;
extern unsigned char oldkeyno;
extern unsigned  char keyscantime;
extern unsigned char keypressedcount;
extern unsigned    char i;
extern bit  newkeypress;
extern bit  keyaffirmed;
extern bit  keyupflag,continouskey,doublekey;

sreg unsigned int ftemperature;
sreg unsigned int ctemperature;
sreg unsigned int threeseconddelay;
sreg unsigned int fiveseconddelay;
sreg unsigned char fsad;
sreg unsigned char csad;
sreg unsigned  int adresult;
sreg unsigned char adcount;
sreg unsigned char rememberkey;
sreg unsigned char displayflag; /*if displayflag=0, display temperature of set;
          if displayflag=1, display temperature of surrounding;
          if displayflag=2, display open time set;
          if displayflag=3, display close time set;*/
sreg unsigned char ADconverttime;
sreg unsigned char ADdisplaytime;
sreg unsigned char watchtimecount;
sreg unsigned char timedelay;

sreg unsigned char codecount;
sreg unsigned char code[4];
sreg unsigned char codecopy[4];
/*sreg unsigned char codesentcount;*/
sreg unsigned char preCR30;
sreg unsigned char displaydelaycount;
sreg unsigned char j;
sreg unsigned char ADnumber;
sreg unsigned char sensorcodeno;
/*sreg bit  sendkeyremember;*/
/*sreg bit  onlyonetime;*/
sreg bit  displaychange;
sreg bit  light;
sreg bit  keypress;
sreg bit  ADintervaltimer;
sreg bit  ADconvertfinish;
sreg bit  single;
sreg bit  firstcopy;
sreg bit  firstcode;
sreg bit  inadtimecount;
sreg bit  waitcodesend;
sreg bit  haschanged;
sreg bit  degreeflag;
sreg bit  entemptest; /*if =1, test environment temperature, if=0, not test environment */
sreg bit  sendcodeflag; /*if this flag=1, code send allow, else forbid*/
sreg bit  codeintflag; /*=1,in code send; else, in time count*/
/*sreg bit  codesentflag;*/
sreg bit  codeend;
sreg bit  codesendfinish;
sreg bit  preheadhigh;
sreg bit  datahigh;
sreg bit  datalow;
sreg bit  headhigh;
sreg bit  headlow;
sreg bit  aparthigh;
sreg bit  apartlow;
sreg bit  tempfeeling;
/*sreg bit  temperaturejust;*/
sreg bit  ADresultwait; /*=1;wait AD result send, =0;no AD result will be send*/
/*void keycode();*/
void keyprocess();
void displayLCD();
void twoseconddelay();
void setsingle();
/*id watchdoginterval()
{
 WDTM=0x98;
}*/
void time30int()
{
 unsigned register char tempcode;
/* RUN=1;*/
 if(sendcodeflag)
 {
  if(waitcodesend)
  {
   WDTMK=0;
   RUN=1;
   P6.0=0;   /*LOW level*/
 /*  P6.0=1;   /*HIGH level*/
   i=0;
   TMC30=0X18;
   codesendfinish=0;
  /* TMMK30=1;
   TMIF30=0;
   
   TMMK30=0;*/
/* WTIMK=0;
   WTM0=1;*/
   /**light up*/
   if(sendcodeflag)
   {
/*    codeintflag=1;*/
/********************/
 /*   P6.0=0;*/
    TMC40=0X06;
    CR40=0X43; /*carrier wave frequency is 39 KHz*,count pulse 4Mhz*/
    CRH40=0X21;
    TCA40=0x03;
    TCE40=1;
    TOE40=1;
    CR30=0XB0;/*header is 4.5ms high*/
    TCE30=1;
    waitcodesend=0;
    preheadhigh=1;
    if(light)
    {
     P1.1=0;
    }
    else
    {
     if(keypress)
     {
      P1.1=0;
      keypress=0;
     }
    }
    return;
   }
   else
   {
    codeend=1;
   }
  }
  if(preheadhigh)
  {
/*   CR30=0XAF;*/
   TCA40=0X01;
   preheadhigh=0;
   headhigh=1;
   return;
  }
  if(headhigh)
  {
   CR30=0XAF;
   headhigh=0;
   headlow=1;
   TCA40=0X02;
   if(!firstcode)
   {
    if(sensorcodeno!=0)
    {
    }
    else
    {
     CR30=0X57; /*header is 2.25ms low*/
    }
    /*if(sensorcodeno==2)
    {
     sensorcodeno=0;
    }*/
   }
   return;
  }
  if(headlow||datalow)
  {
   CR30=22;
   TCA40=0X00;
   headlow=0;
   datalow=0;
   datahigh=1;
  if(firstcode||(sensorcodeno!=0))
  { 
   if(j==8)
   {
    codecount++;
    if((codecount==4))  /*toshiba mode: send 32 bit*/
    {
     codecount=0;
     j=0;
     datahigh=0;
     codeend=1;
     if(firstcode)
     {
      firstcode=0;
     }
     if(sensorcodeno==1)
     {
      sensorcodeno=2;
     }
     else
     {
      if(sensorcodeno==2)
      {
       sensorcodeno=0;
       ADintervaltimer=0;
      }
     }
     return;
    }    
    j=0;
   }
   code[codecount]=rolb(code[codecount],1);
   tempcode=code[codecount]&0x01;
   if(tempcode==1)/*cy*/
   {  /*cy=1*/
    preCR30=64;
   }
   else
   {  /*cy=0*/
    preCR30=20;
   }
   j++;
   return;
   
  }
  else
   datahigh=0;
  {
   codeend=1;
   return;
  }
  
  }
  if(datahigh)
  {
   CR30=preCR30;
   TCA40=0X02;
   datahigh=0;
   datalow=1;
   return;
  }
  if(codeend)
  {
   sendcodeflag=0;
   codesendfinish=1;
   datahigh=0;
   codeend=0;
   codeintflag=0;
   if(sensorcodeno==2)
   {
    codeintflag=1;
   }
   P6.0=0;
/*   P6.0=1;*/
/*   if(onlyonetime)
   {
    P1.1=1;
    onlyonetime=0;
   }*/
   TOE40=0;
   TCE40=0;
   TCE30=0;
   TMMK30=1;
   
   /*light off*/
/*   WTIMK=0;
//   WTMK=0;*/
   return;
  }
 }
}
void watchtime()
{
/* RUN=1;*/
 /***************/
 #asm
 MOV A,MK0
 PUSH AX
 #endasm
 if(TMMK30)
 {
  MK0=0xff;
 }
 else
 {
  MK0=0xef;
 } 
/*******************************/ 
 EI();
 watchtimecount++;
/* if(fiveseconddelay<12)
 {
  fiveseconddelay++;
 }*/
 
 if(inadtimecount)
 {
  ADdisplaytime++;
  ADconverttime++;
  if(ADnumber==0)
  {
   ADconverttime--;
  }
  if(ADconverttime==120) /*1 minute*/
  {
   switch(ADnumber)
   {
    case 12:
    {
     ADconverttime=0;
     ADnumber=12;
     break;
    }
    case 0:
    {
/*     inadtimecount=0;*/
     break;
    }
    case 1:
    {
     ADconverttime=108;
     ADnumber=2;
     break;
    }
    case 2:
    {
     ADconverttime=108;
     ADnumber=3;
     break;
    }
    case 3:
    {
     ADconverttime=96;  /*12S*/
     ADnumber=4;
     break;
    }
    case 4:
    {
     ADconverttime=84; /*20 second*/
     ADnumber=5;
     break;
    }
    case 5:
    {
     ADconverttime=72;
     ADnumber=6;
     break;
    }
    case 6:
    {
     ADconverttime=60;
     ADnumber=7;
     break;
    }
    case 7:
    {
     ADconverttime=48;
     ADnumber=8;
     break;
    }
    case 8:
    {
     ADconverttime=36;
     ADnumber=9;
     break;
    }
    case 9:
    {
     ADconverttime=24;
     ADnumber=10;
     break;     
    }
    case 10:
    {
     ADconverttime=12;
     ADnumber=11;
     break;
    }
    case 11:
    {
     ADconverttime=0;
     ADnumber=12;
     break;
    }
    default:
    {
     ADconverttime=0;
     ADnumber=12;
     break;
    }
   }
   DI();
   #asm
   POP ax
   mov MK0,A
   #endasm 
   ADIF0=0;
   ADMK0=0; /*enable AD convert*/
   #asm
   MOV A,MK0
   PUSH AX
   #endasm
   if(TMMK30)
   {
    MK0=0xff;
   }
   else
   {
    MK0=0xef;
   }
   EI();
   ADconvertfinish=0;
   ADintervaltimer=1; 
   ADM0=0xa0; 
  }
  else
  {
   if(ADdisplaytime>=30)
   {
    ADdisplaytime=0;
    DI();
    #asm
    POP ax
    mov MK0,A
    #endasm 
    ADIF0=0;
    ADMK0=0; /*enable AD convert*/
    #asm
    MOV A,MK0
    PUSH AX
    #endasm
    if(TMMK30)
    {
     MK0=0xff;
    }
    else
    {
     MK0=0xef;
    }
    EI();
    ADconvertfinish=0;
    ADM0=0xa0; 
   }
   else
   {
    adresult=0;
    adcount=0;
   }
  }
 }
 #asm
  POP ax
  mov MK0,A
 #endasm
 
}
void adconveration()
{
/* const unsigned char adtemperature[51]={61,63,65,68,70,73,75,78,81,83,86,89,91,94,97,100,102,105,108,111,114,117,120,122,125,128,131,134,136,139,142,144,147,150,152,155,157,160,162,165,167,169,171,173,176,178,180,182,184,186,188};*//*100kOh*/
/* RUN=1;*/
 /***************/
 unsigned register char i;
 ADMK0=1;
 
 #asm
 MOV A,MK0
 PUSH AX
 #endasm
 if(TMMK30)
 {
  MK0=0xff;
 }
 else
 {
  MK0=0xef;
 }
/*******************************/
 EI();
/* ADM0=0X20;*/
 adresult=ADCR0;
 for(i=1;i<=9;i++)
 {
waitAD:
  if(ADIF0)
  {
   ADIF0=0;
   adresult+=ADCR0;
  }
  else
  {
   goto waitAD;
  }
 }
  ADM0=0X20;
  adresult=adresult/10;
  if (adresult<=degree0)
  {
   adresult=degree0;  
  }
  else
  {
   if (adresult>=degree45)
   {
    adresult=degree45;
   }
  }
  adresult=(int)(adresult*120/89);  /*檸?.5嶪晭蜅幚嫀茥帹帣淸帋臇儕枑幉媍AD泿?/
  if(degreeflag)
  {
   ftemperature=(int)((adresult-22)/2); /*嶪晭蜅幚嫀?/
  }
  else
  {
   ctemperature=(int)(((adresult-86)*5+9)/18);/*晝晭蜅幚嫀?/
  }
  ADconvertfinish=1;
  displaychange=1;
  if(ADintervaltimer&&tempfeeling)
  {
   if(!codeintflag&&(keyupflag||doublekey||(!keyupflag&&(oldkeyno==sensoron))))
   {
    codecount=0;
    sendcodeflag=1;
    keypress=0;
    if(adresult<hfdegree10)
    {
     code[3]=0;
    }
    else
    {
     if(adresult>(hfdegree10+120))
     {
      code[3]=120;
     }
     else
     {
      code[3]=adresult-hfdegree10;
     }
    }
    setsingle();
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xf6;
    sensorcodeno=1;
     /***************/
    TMIF30=0;
    TMMK30=0;
    TMC30=0X88;
    CR30=0X17; /*header is 1.5ms high*/
    TCE30=1;
    i=0;
    PM6=0x02;  /*port6.0 output */
    P6.0=0;   /*LOW level*/
   /* P6.0=1;   /*HIGH level*/
    codeintflag=1;
    waitcodesend=1;
    codeend=0;
    
   }
   else
   {
    if(adresult<hfdegree10)
    {
     code[3]=0;
    }
    else
    {
     if(adresult>(hfdegree10+120))
     {
      code[3]=120;
     }
     else
     {
      code[3]=adresult-hfdegree10;
     }
    }
    setsingle();
    codecopy[3]=code[3];
    codecopy[0]=0x10;
    codecopy[1]=0xaf;
    codecopy[2]=0xf6;
    ADresultwait=1;
    if(!tempfeeling)
    {
     ADresultwait=0;
    }
/*    if(sendkeyremember)
    {
     ADresultwait=0;
    }*/
   }
  }
 #asm
  POP ax
  mov MK0,A
 #endasm
}
 

void main()
{
 DI();
 PCC=0X00;
 SCKM=0X00;
 TCL2=0x04;  /*watchdog interval=8.192ms*/
 WDTM=0x08;  /*used as interval*/
 IF0=0;
 MK0=0xfe;
 EI();
 #asm
 movw hl,#0fe10h
 mov a,#0h
?LclearRAMloop:
 mov [hl],a
 xch a,l
 add a,#1
 xch a,l
 bnc $?LclearRAMloop
 movw ax,#0feefh;
 movw SP,ax;
 #endasm
 initial();
 
 pokew(0xfa00,0x0f0f);
 pokew(0xfa02,0x0f0f);
 pokew(0xfa04,0x0f0f);
 pokew(0xfa06,0x0f0f);
 LCDC0=0X02;
 LCDVA0=0X01;
 LCDM0=0x40; /*VAON0=1*/
 WTMK=0;
 WTM=0x83; 
 watchtimecount=2;
 twoseconddelay();
 LIPS0=1;
 LCDON0=1;
 WTM=0X83;
 watchtimecount=0;
 twoseconddelay();
 ADMK0=0; /*enable AD convert*/
 ADM0=0xa0; 
 pokew(0xfa00,0x00);
 pokew(0xfa02,0x00);
 pokew(0xfa04,0x00);
 pokew(0xfa06,0x00); 
 WTM=0X83;
 watchtimecount=0;
 twoseconddelay();
 displayLCD();
 inadtimecount=1;
 keyupflag=1;
/* ADconverttime=0;
 ADnumber=12;*/
 ADdisplaytime=0;
 codesendfinish=1;
 fiveseconddelay=610;
 WTM=0xc3;   /*watch-time fetch from fxt, and interval time's interval is 1.95ms at 4.19M crystal*/
 WTIF=0;    /*clear watch-time request flag*/
 WTIIF=0;   /*clear interval request flag*/ 
 TMC30=0X00;
 TMC40=0X06;
 KRMK00=0;
loopstart:
  P0=0;
/*  if((P4==0x0f)&&(fiveseconddelay==610)&&(codeintflag==0))*/
  if((!KRMK00)&&(fiveseconddelay==610)&&(codeintflag==0))
  {
   DI();
/*   sendkeyremember=0;*/
   PM0=0xf0;
   P0=0;
   PCC=0x02;
   KRIF00=0;   /*clear key request flag*/
   KRM00=1;
   KRMK00=0;   /*enable key-interrupt*/
   WTIMK=1;
   OSTS=0;    /*wait 819us after stop broken*/
   WDTMK=1;
   RUN=1;
/*   DI();*/
   NOP();
   STOP();
   NOP();
/*   RUN=0x1;*/
   PCC=0x00;
   WDTIF=0;
   WDTMK=0;
   EI();
  }
  keyprocess();
  if(displaychange)
  {
   displayLCD();
   displaychange=0;
  }
  if(!codeintflag&&(keyupflag||doublekey))/*||(!keyupflag&&(oldkeyno==sensoron))))*/
  {
   P1.1=1;
   if(ADresultwait)
   {
    ADresultwait=0;
    codecount=0;
    sendcodeflag=1;
    keypress=0;
    code[0]=codecopy[0];
    code[1]=codecopy[1];
    code[2]=codecopy[2];
    code[3]=codecopy[3];
    sensorcodeno=1;
     /***************/
    TMIF30=0;
    TMMK30=0;
    TMC30=0X88;
    CR30=0X17; /*header is 1.5ms high*/
    TCE30=1;
    i=0;
    PM6=0x02;  /*port6.0 output */
    P6.0=0;   /*LOW level*/
    /*P6.0=1;   /*HIGH level*/
    codeintflag=1;
    waitcodesend=1;
    codeend=0;
   }
  }
  goto loopstart;
}
void keyprocess()
{
 unsigned register a;
/* RUN=1;*/
 if(keyaffirmed==1)/*&&(keypressedcount==1))*/
 {
  keyaffirmed=0;
  keypressedcount=0;
  keypress=1;
  if(newkeypress)
  {
   firstcode=1;
   firstcopy=1;
  }               /*{*/
  switch(oldkeyno)
  {               /*{{*/
   case MechineOperator:
   {
    newkeypress=0;
    continouskey=1;
    ADnumber=0;
    ADconverttime=0;
    ADintervaltimer=0;
/*    sendkeyremember=1;*/
    codecount=0;
    sendcodeflag=1; 
    codeintflag=1;
    tempfeeling=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x88;
    code[3]=0x77;
    break;
   }   
    case TempUp:
    { 
/*     sendkeyremember=0;*/
/*     if(newkeypress)
     {
      newkeypress=0;
     continouskey=1;
      timedelay=0;
      break;
     }
/*     else
     {
      if(timedelay<2)
      {
       timedelay++;
      continouskey=1;
       break;
      }
     }
     temperaturejust=1;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x70;
    code[3]=0x8f;
    break;
    }
    case Powersave:    
    {
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
/*     sendkeyremember=0;*/
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x40;
    code[3]=0xbf;
    break;
    }
    case TempDown:
    {
/*     sendkeyremember=0;*/
/*     if(newkeypress)
     {
      newkeypress=0;
      continouskey=1;
      timedelay=0;
      break;
     }
/*     else
     {
      if(timedelay<2)
      {
       timedelay++;
       continouskey=1;
       break;
      }
     }
    temperaturejust=1;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xb0;
    code[3]=0x4f;
     break;      
    }
    case cool:
    {
/*     sendkeyremember=0;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x90;
    code[3]=0x6f;
     break;
    }
    case sleeprun:
    { 
/*     sendkeyremember=0;*/
     newkeypress=0;
    continouskey=1;    
    codecount=0;    
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x00;
    code[3]=0xff;
     break; 
    }
    case timer:
    {
/*     sendkeyremember=0;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x60;
    code[3]=0x9f;
     break;
    }
    case fanrun:
    {
/*     sendkeyremember=0;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xe0;
    code[3]=0x1f;
     break;
    }
    case speedup:
    {
/*     sendkeyremember=0;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x80;
    code[3]=0x7f;
     break;
    }
    case speeddown:
    {
/*     sendkeyremember=0;*/
     newkeypress=0;
    continouskey=1;     
    codecount=0;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0x20;
    code[3]=0xdf;
     break;
    }
/*    case sensor:
    {
    if(degreeflag)
    {
     code[3]=displayroomtemperature+10;
    }
    else
    {
     code[3]=roomtemperature;
    }
    setsingle();
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xf6;
    
    break;
   }*/
    case autofan:
    {
 /*    sendkeyremember=0;*/
    codecount=0;
     newkeypress=0;
    continouskey=1;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xf0;
    code[3]=0x0f;
     break; 
    }
    case clearrun:
    {
/*     sendkeyremember=0;*/
    codecount=0;    
     newkeypress=0;
    continouskey=1;     
     sendcodeflag=1;
     codeintflag=1;
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xf1;
    code[3]=0x0e;
     break;
    }
    case sensoron:
    {
     if(!entemptest)
     {
      return;
      break;
     }
/*     if(!newkeypress)
     {
      return;
      break;
     }*/
     WTM=0XC3;
     inadtimecount=1;
    codecount=0;     
     newkeypress=0;
    continouskey=1;     
     sendcodeflag=1;
     codeintflag=1;
     ADconvertfinish=0;    
     ADIF0=0;
     ADMK0=0;
     ADM0=0XA0;
waitADresult:
     if(!ADconvertfinish)
     {
      goto waitADresult;
     }
     ADconvertfinish=0;
     sensorcodeno=0;
     ADnumber=1;
     ADconverttime=108; /*6S*/
    if(adresult<hfdegree10)
    {
     code[3]=0;
    }
    else
    {
     if(adresult>(hfdegree10+120))
     {
      code[3]=120;
     }
     else
     {
      code[3]=adresult-hfdegree10;
     }
     }
    setsingle();
    code[0]=0x10;
    code[1]=0xaf;
    code[2]=0xf5;
    tempfeeling=1;
/*    sendkeyremember=1;*/
/*    onlyonetime=1;*/
     break;
    }
    case sensoroff:
    {
     if(!entemptest)
     {
      return;
      break;
     }
/*     if(newkeypress)
     {*/
     codecount=0;     
      newkeypress=0;
     continouskey=1;      
     code[0]=0x10;
     code[1]=0xaf;
     code[2]=0xf7;
     code[3]=0x08;
     sendcodeflag=1;
     codeintflag=1;
     ADintervaltimer=0;
     ADconverttime=0;
     ADnumber=0;
     tempfeeling=0;
    /* inadtimecount=0;*/
/*     WTM=0XC0;*/
/*     sendkeyremember=1;*/
/*     onlyonetime=1;*/
/*    }*/
     break;
    }
    case changeID:
    {
 /*    sendkeyremember=0;*/
     newkeypress=0;
     if(haschanged)
     {
      break;
     }
     haschanged=1;
     degreeflag=!degreeflag;
     displaychange=1;
     if(degreeflag)
     {
      ftemperature=(int)((ctemperature*18+5)/10)+32;
     }
     else
     {
      ctemperature=(int)(((ftemperature-32)*10+9)/18);
     }
     break;
    }
  }
 }
}
void displayLCD()
{
 unsigned char register  a,b;
/* RUN=1;*/
 if(degreeflag)
 {
  a=ftemperature;
  if(a>=99)
  {
   a=99;
  }
  a=btobcde(a);
 }
 else
 {
  a=ctemperature;
  if(a>=37)
  {
   a=37;
  }
  a=btobcde(a);
 }
 a=rorb(a,4);
 a&=0x0f;
 a=number[a];
 pokeb(0xfa03,a);
 a=rorb(a,4);
 pokeb(0xfa04,a);
  if(!degreeflag)
  {
   a=ctemperature;
   if(a>=37)
   {
    a=37;
   }
   a=btobcde(a);
  }
  else
  {
   a=ftemperature;
   if(a>=99)
   {
    a=99;
   }
   a=btobcde(a);
  }
 a&=0x0f;
 a=number[a];
 pokeb(0xfa05,a);
 a=rorb(a,4);
 pokeb(0xfa06,a);
}
void setsingle()
{
 char i;
 code[2]=code[3];
 code[0]=0;
 for(i=0;i<7;i++)
 {
  code[1]=code[2]&0x01;
  if(code[1])
  {
   code[0]++;
  }
  code[2]=rorb(code[2],1); 
 }
 code[1]=code[0]&0x01;
 if(code[1])
 {
  code[3]&=0x7f;
 }
 else
 {
  code[3]|=0x80;
 }
}
void twoseconddelay()
{
watchloop:
/* RUN=1;*/
 if(watchtimecount==4)
 {
/*  WTM=0x80;  /*stop watchtime count*/
 }
 else
 {
  goto watchloop;
 } 
}

阅读全文 | 回复(0) | 引用通告 | 编辑
 


发表评论:
载入中...