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

📄 113.c

📁 用MSP430(C)写的红外抄表程序,是初学者好代码
💻 C
📖 第 1 页 / 共 4 页
字号:
                   //WriteWord(Dataloger_I2c_Addr,0X66);
                   //WriteWord(Dataloger_I2c_Addr+1,0X66);
                   //WriteWord(Dataloger_I2c_Addr+2,0X66);
                   Dataloger_start_Addr=Dataloger_I2c_Addr;
                   WriteWord(90,Dataloger_I2c_Addr/256);
                   WriteWord(91,Dataloger_I2c_Addr);
                   //iic start
                   WriteWord(92,dataloger_no); LCD[8] &=0x08;LCD[9]=0;
                   com_status=0x00;status1 &=0xfc;}
                   key_scan=0;button_counter=0; break;         
                }
             }
              while(P3IN==0xFB); 
               if(memory_ok==0) 
                    {
                      memory_ok=1;Dataloger_I2c_Addr=1450;                //when memory datalogger data is over level, start the new dataloger 
                      LCD[8] &=0x08;LCD[9]=0;
                      dataloger_no=0;LCD[8] &=0x08;LCD[9]=0;
                      Dataloger_start_Addr=Dataloger_I2c_Addr;
                      WriteWord(90,Dataloger_I2c_Addr/256);
                      WriteWord(91,Dataloger_I2c_Addr);
                      //iic start
                      WriteWord(92,dataloger_no);
                      break;}
             if(key_scan!=0)
             {
                button_counter=0;
            if((mem_no>99)||(mem_no<0)){mem_no=0;I2c_Addr=100;}//MEM,FIRST  read the no from the 24lcd512
            else if(mem_no==99){break;}
             else {mem_no++;I2c_Addr=100+(13*(mem_no-1));}
             status1 &=0xFc;status1 |=0x01;
             LCD[8]=Digit[mem_no/10] &0XFF;LCD[9]=Digit[mem_no%10]|0x08;
             
             for(i=0;i<8;i++){iic_buffer0[i]=ClocK_read_data[i];}
             iic_buffer0[8]=mem_no;
             
             iic_buffer0[9]=data_display/100;
             iic_buffer0[10]=data_display%100;
             iic_buffer0[11]=status0;
             iic_buffer0[12]=status1;
             for(i=0;i<13;i++) {WriteWord((I2c_Addr+i),iic_buffer0[i]);}
             }
             break; }//enter/mem
  case 0xF7:{ 
              if(NO_HOLD==1) break;
             do
             {
               button_counter++; 
                 delayms(10);
                 if(button_counter>20)
                  { 
                     if(Set_Data==0)Set_Data=3;else Set_Data--; 
                   key_scan=0;
                   button_counter=0;
                   break;
                  
                }
             }
             while(P3IN==0xF7);
             if(key_scan!=0)
             {
             button_counter=0; 
              if(setup_status>=0)
                   {
                    setup_status--;if(setup_status<0)setup_status=7;
                   }
             if((mode_status!=PMAX) && (mode_status!=PMIN)) {mode_status=PMAX;}  
             else if(mode_status==PMAX) {mode_status=PMIN;} 
             else if(mode_status==PMIN){mode_status=GEN;}
             }
             
             break;}//peak
                  
  case 0xDF:{ if(NO_HOLD==1) break;
                do
             {
                 button_counter++; 
                 delayms(10);
                 if(button_counter>20)
                  { 
                    if (Set_Data<3)Set_Data++;else Set_Data=0;
                    key_scan=0;button_counter=0;
                   break;
                  
                }
             }
              while(P3IN==0xDF) ;
                if(key_scan!=0) 
                {
              button_counter=0;
              
               if(setup_status<=7)
                  {
                    setup_status++;if(setup_status==8){setup_status=0;}                   
                  }
               if(mode_status!=REL) {mode_status=REL;rel_data=tmp9;break;}
               else  {mode_status=GEN;}
                }
              break;}//rel
  case 0xEF:{
             if(setup_ok==0)  break;
             //while(P3IN==0xBF){;}
              if(mem_load_ok==0)
             {
             if(read_mem_no==1)  {read_mem_no=1;break;}//MEM,FIRST  read the no from the 24lcd512
             read_mem_no--;break;
             }
             if(NO_HOLD==0)
             {
               lcd_ok=0;status0 |=0x40; LCD[12] |=0X03;NO_HOLD=1;mem_display=data_display;
               int i;
               for (i=0;i<8;i++){ hold_clock[i]=ClocK_read_data[i]; }
             
             }
             else          {lcd_ok=1;status0 &=0xBF;NO_HOLD=0;}
             key_scan=0;
              break;}//hold

  case 0xBF:{if((setup_ok==0)||(NO_HOLD==1)) break;
             
             if(mem_load_ok==0)
             {
             if(read_mem_no==99)  {read_mem_no=99;break;}//MEM,FIRST  read the no from the 24lcd512
             read_mem_no++;break;
             }   
             else if((mode_status!=MAX) && (mode_status!=MIN)) {mode_status=MAX;}
             else if(mode_status==MAX) {mode_status=MIN;}
             else if(mode_status==MIN) {mode_status=GEN;}
             key_scan=0;
             break;}//max/min

  case 0X7F:{if(NO_HOLD==1) break;
         if(Level>=3) {Level=0;}else {Level++;}key_scan=0;break;}//range
  case 0xF9:{  int i;
              if(NO_HOLD==1) break;
              do
             {
                 button_counter++; 
                 delayms(10);
                 if(button_counter>20)
                  { 
               LCD[8]  &=0X08; LCD[8] |=0X95;LCD[9]=0X8d; mem_load_ok=1;
                for(i=100;i<1450;i++){WriteWord(i,0);}
                read_mem_no=1;mem_no=0;
                WriteWord(80,mem_no);
                WriteWord(81,read_mem_no);
                key_scan=0;button_counter=0;
                LCD[8] &=0x08;LCD[9]=0;status1 &=0xFC;break;
                  
                }
             }
                while(P3IN==0xF9) ;
              }  //clear mem(load+mem)
  case 0x7B:{
             if(NO_HOLD==1) break;
             if(apo_status==0) {apo_status=1;status0|=0x80;}
             else {apo_status=0; status0 &=0x7F;}
             key_scan=0;
          break;}
  case 0xFA:
    { 
      int i;if(NO_HOLD==1) break;
      if(setup_ok==1)
      {
        setup_ok=0;lcd_ok=0;setup_status=0;
       for(i=0;i<8;i++){Clock_iic_buffer0[i] = ClocK_read_data[i]; }  
      }
      else {setup_ok=1;lcd_ok=1;  
      
      for(i=0;i<8;i++){ ClocK_read_data[i]=Clock_iic_buffer0[i];}
      Write_Clock(0x8E, ClocK_read_data);} 
      mode_status=0;Set_Data=0;break;
    }
  case 0xDC:
    { int i;if(NO_HOLD==1) break;
      if(com_status==0x00)
                   { 
                     if(apo_status==0) apo_status=1;
                    com_status=0xBB;dataloger_no++;
                    //Dataloger_I2c_Addr= Dataloger_start_Addr+1;
                    WriteWord(Dataloger_I2c_Addr,0xaa);
                    WriteWord(Dataloger_I2c_Addr+1,0x56);
                    WriteWord(Dataloger_I2c_Addr+2,dataloger_no);
                    WriteWord(Dataloger_I2c_Addr+3,sampling);
                     WriteWord(Dataloger_I2c_Addr+4,UNITS);
                    for(i=0;i<8;i++)
                     {
                       WriteWord(Dataloger_I2c_Addr+5+i,ClocK_read_data[i]);
                     }
                    Dataloger_I2c_Addr+=13;status1|=0x03;
                    
                    if(dataloger_no==256) dataloger_no=0;
                   }
                    
                   else{
                   apo_status=0;                 
                   Dataloger_start_Addr=Dataloger_I2c_Addr;
                   WriteWord(90,Dataloger_I2c_Addr/256);
                   WriteWord(91,Dataloger_I2c_Addr);
                   //iic start
                   WriteWord(92,dataloger_no);
                   LCD[8] &=0x08;LCD[9]=0;
                   com_status=0x00;status1&=0xfc;}
      break;
    }
  case 0xDB:
    {if(NO_HOLD==1) break;
      if(mem_load_ok==1) mem_load_ok=0;
                    else 
                    {
                      mem_load_ok=1;                                  //read the data in memory 
                      LCD[8] &=0x08;LCD[9]=0; status1 &=0xFC;WriteWord(81,read_mem_no);
                    }
      break;
    }
  case 0xDA:
    {if(NO_HOLD==1) break;
        if(Set_Data==0)Set_Data=3;else Set_Data--; 
      break;
    }
  case 0xDE:
    {if(NO_HOLD==1) break;
        if (Set_Data<3)Set_Data++;else Set_Data=0;
        break;
    }
  case 0xF3:
    {if(NO_HOLD==1) break;
      mode_status=POWEROFF;
    }
  case 0xEE:
    {if(NO_HOLD==1) break;
      int i;LCD[8]  &=0X08; LCD[8] |=0X95;LCD[9]=0X8d;mem_load_ok=1;
   for(i=0;i<1449;i++){WriteWord((100+i),0);}
                read_mem_no=1;mem_no=0;
                 WriteWord(80,mem_no);
                 WriteWord(81,read_mem_no);
                 LCD[8] &=0x08;LCD[9]=0;status1 &=0xFC;
                 break;
    }
    
  }

  }
     //if(P3IN!=0xff) key_scan=0;else key_scan=1;
  if(P3IN==0xff) key_scan=1;
  pcorder=0;
   Read_Clock(0x8F); 
   if(lcd_ok&&mem_load_ok&&timer_ok)
   {
     timer_ok=0;
      if(mode_status == PMAX || mode_status== PMIN) {souce_data=data_display*1.414;}
     else {souce_data=data_display;}
     Down_display(data_display);
     lcd_display();
     
   }
  
  if(mem_load_ok==0)
   { int j;
     //if(read_mem_no==99)  {read_mem_no=0;}//MEM,FIRST  read the no from the 24lcd512
                  //read_mem_no++;
                  {I2c_Addr=100+(13*(read_mem_no-1));}
                      
                   for(j=0;j<13;j++)
                          {
                          iic_readbuffer[j]= ReadWord(I2c_Addr+j);
                          }
                     for(j=0;j<8;j++)
                          { 
                          ClocK_read_data[j]= iic_readbuffer[j];
                          }
                  if(ClocK_read_data[4]==0)
                  {
                    
                    read_mem_no=read_mem_no-1;
                    if( read_mem_no<1)  read_mem_no=1;
                     {I2c_Addr=100+(13*(read_mem_no-1));
                     }
                      
                   for(j=0;j<13;j++)
                          {
                          iic_readbuffer[j]= ReadWord(I2c_Addr+j);
                          }
                     for(j=0;j<8;j++)
                          { 
                          ClocK_read_data[j]= iic_readbuffer[j];
                          }
                  
                  }
                   if(ClocK_read_data[4]==255){
                    
                    read_mem_no=0;
                  
                    I2c_Addr=100;
                      
                   for(j=0;j<13;j++)
                          {
                          iic_readbuffer[j]= ReadWord(I2c_Addr+j);delayms(3);

                          }
                     for(j=0;j<8;j++)
                          { 
                          ClocK_read_data[j]= iic_readbuffer[j];delayms(3);
                          }
                  
                  }
                  
                    
                   LCD[8]=Digit[iic_readbuffer[8]/10]&0Xff;LCD[9]=Digit[iic_readbuffer[8]%10]|0x08;                            
                   Level=iic_readbuffer[11] & 0x03;
                   UNITS=iic_readbuffer[11] & 0x04;
                   mode_status=iic_readbuffer[11] & 0x38;
                   data_display=iic_readbuffer[9]*100+iic_readbuffer[10];
                   mem_display=data_display;
                   Down_display(data_display);
                   lcd_display();
                   Display_Lcd_seg(data_display/100);
                   mem_load_ok=0;status1 &=0xFc;status1 |=0x02;
   }
  pcorder=0;
  IFG2 &=~BTIFG;
}
//------------------------------------------------------------------------------------------
 
#pragma vector=ADC12_VECTOR
__interrupt void ADC_PROCESS(void)
{

//delayms(3);
//numdata += ADC12MEM0; 
length[datacounter]=ADC12MEM0;
datacounter++;
ADC12IE =0X0003;  ///enable AD5
ADC12IFG =0X0000;
ADC12CTL0 |= ENC+ADC12SC;


if(datacounter==10)
{
  unsigned char u;          //排序循环10次
  unsigned char c;          //数组下标
  int  Length_M;   //排序用的中间值
  unsigned char i;
for(u=0;u<10;u++)
    {
	for(c=0;c<9-u;c++)
	  if(length[c]>length[c+1])
	  {Length_M=length[c];
	   length[c]=length[c+1];
	   length[c+1]=Length_M;
	   }
	 }
for(i=1;i<9;i++)
{
  numdata +=length[i];
}

 if(Level==level2)
 {
    if((real_data=numdata/8)<=1)real_data=0; //28
    
    else {real_data=(numdata-2)/8;}       //70
    if(real_data<=0) {real_data=0;}
  }
  else {real_data=numdata/8; }

numdata=0;
datacounter=0;
//tmp9=(int)ad_k*real_data;  //放大倍数 
//Down_display(tmp9);
lcd_seg=(int)(real_data)/100; 
if((lcd_seg>=40)||(lcd_seg<0)){lcd_seg=40;}

Display_Lcd_seg(lcd_seg);


}
lcd_seg=(int)(real_data)/100; 
if((lcd_seg>=40)||(lcd_seg<0)){lcd_seg=40;}

Display_Lcd_seg(lcd_seg);
 /*if(Level==level2)
 {  
  if(ADC12MEM0<=3)  {ADC12MEM0=0;}
  else {ADC12MEM0 -=3;}
 }
delay(200);
numdata += ADC12MEM0; 
datacounter++;
ADC12IE =0X0003;  ///enable AD5
ADC12IFG =0X0000;
ADC12CTL0 |= ENC+ADC12SC;

if(datacounter==80)
{
 if(Level==level2){
    if((real_data=numdata/80)<5)real_data=0;
    
    else {real_data=(numdata-200)/80;}
    if(real_data<=0) {real_data=0;}
  }
  else {real_data=numdata/80; }
numdata=0;
datacounter=0;
//tmp9=(int)ad_k*real_data;  //放大倍数 
//Down_display(tmp9);
lcd_seg=(int)(real_data-25)/100; 
if((lcd_seg>=40)||(lcd_seg<0)){lcd_seg=40;}

Display_Lcd_seg(lcd_seg);


}*/

}
//------------------------------------------------------------------------------------------
void setup(void)
{

  switch (setup_status)
  { 
  case hour:
    {
    while(P3IN==0xBF) 
    {
      Clock_iic_buffer0[5]=Clock_iic_buffer0[5]+ 1;
      if( Clock_iic_buffer0[5]>0x23)  {Clock_iic_buffer0[5]=0; }
      if(Clock_iic_buffer0[5]==0x0A)
      {Clock_iic_buffer0[5] =0x10;}
      else  if(Clock_iic_buffer0[5]==0x1A)
      {Clock_iic_buffer0[5] =0x20;}
      
      LCD[2]=Digit[Clock_iic_buffer0[5]>>4];
      LCD[3]=Digit[Clock_iic_buffer0[5]&0X0F];
      LCD[5] |=0X08; LCD[6] |=0X08;

      delayms(10);
     }
   while(P3IN==0xEF)
    {
     Clock_iic_buffer0[5]=Clock_iic_buffer0[5]-1;
      if( Clock_iic_buffer0[5]==0xFF)  {Clock_iic_buffer0[5]=0x23;}

⌨️ 快捷键说明

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