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

📄 113.c

📁 用MSP430(C)写的红外抄表程序,是初学者好代码
💻 C
📖 第 1 页 / 共 4 页
字号:
        break;
    }
     case Sampling:
    {
      LCD[2]=0x00; LCD[3]=0x00;LCD[4]=0x00; LCD[5]=0x00;
      LCD[6]=Digit[sampling>>4];
      LCD[7]=Digit[sampling&0X0F];
      LCD[7] |=0X08;status1 &=0xF3;status1 |=0x08;
       break;
    }
    case timehold:
    {break;}
  }
 switch(apo_status)
    {
     case APO:
      {
       LCD[12] |=0X04; break;
      }
    case DISABLE_APO:
     {
       LCD[12] &=0XFB;break;
     }
     
    }
 
    
    
            
      if(com_status==0xBB)
      { //if(usb_ok!=1) LCD[8] &=0xf7;
        if((data_logger_ok==0)&&(memory_ok==1))
        { if(dataloger_no>99) {LCD[8] =0x02&0xFF;LCD[9] =0x02|0x08;}
        else {LCD[8]=Digit[dataloger_no/10]&0XFF;LCD[9]=Digit[dataloger_no%10]|0x08;}data_logger_ok=1;}
        else {LCD[9] &=0xF7;data_logger_ok=0;}
        if((sampling_ok==1)&&(memory_ok==1))
        { 
        WriteWord(Dataloger_I2c_Addr,(real_usb_data/100));
        WriteWord(Dataloger_I2c_Addr+1,(real_usb_data%100));
        WriteWord(Dataloger_I2c_Addr+2,status0); 
        sampling_ok=0;status1|=0x03;
         if(Dataloger_I2c_Addr+2>0xFA00)
         {LCD[9]=0X8D;apo_status=0;memory_ok=0;LCD[8]=0XF5;}
        else Dataloger_I2c_Addr +=3;
         }
        
     } 
     _EINT();
  }


//------------------------------------------------------------------------------------------


void Down_display(float tmp91)
{
/*int i;
int test;
test = 0;
data_len=sprintf(show_buffer,"%.3f",tmp91);
for(i=0;i<data_len;i++)
{
   if(show_buffer[i]!='.')
   {
     d_showdata[i+test]=show_buffer[i]-0x30;
   }
   else
   {
     n_point=i;
     test = -1;
   }
}*/
  if(real_data /100>=40)     //real_data  data_display
  {
  LCD[10]=0; LCD[11]=Digit[0];LCD[0]=0; 
  LCD[0] |=0x85; LCD[1]=0; ol_ok=1;
  if(mode_status==PMAX||mode_status==MAX)
  {souce_data=data_display/10;data_display=data_display/10;}
  }
  else
  {
ol_ok=0;
d_showdata[0]=data_display/1000;
d_showdata[1]=data_display/100%10;  
d_showdata[2]=data_display/10%10;  
d_showdata[3]=data_display%10;  
hold_data=data_display;
if(d_showdata[0]==0) {LCD[10]  &=0X08;} else {LCD[10]=Digit[d_showdata [0]];}
if((d_showdata[1]==0) && (!LCD[1]&0X08)&&(d_showdata[0]==0))  {LCD[11]  &=0X08;}
else {LCD[11]=Digit[d_showdata[1]];}
LCD[0]=Digit[d_showdata[2]];
LCD[1]=Digit[d_showdata[3]];
if(fu_data==1) {LCD[10] |=0X08; LCD[19] |=0X80;}
else {LCD[10] &=0XF7; LCD[19] &=0X7F;}
  }
/*if(n_point==4){LCD[11] &=0x7F;LCD[0] &=0xF7;LCD[1] &=0xF7;}
if(n_point==1){LCD[11] |=0x08;}
if(n_point==2){LCD[0] |=0x08;}
if(n_point==3){LCD[1] |=0x08;}*/
 if(fu_data==1) status1 |=0x10;
 else status1 &=0xEF;
 
}


//------------------------------------------------------------------------------------------
void Lcd_statrt(void)
{
  int a;
BTCTL =0XA4;                  //Set LCD frequency,Basic timer as 0.5s interrput
IE2 |= BTIE;

BTCNT1=0X66;
BTCNT2=0X00;
LCDCTL |=0XFD;                //Set LCD mode,and start LCD show
//P4SEL=0X03;  
P4DIR=0X9F;
P4OUT = 0;
P5SEL=0XFF;
P5DIR=0X9F;
delayms(5);
for(a=0;a<20;a++)
{
LCD[a]=0xff;                //full lcd show
} 
delayms(50);
for(a=0;a<20;a++)
{
LCD[a]=0x00;                //full lcd show
} 
delayms(50);
LCD[10]=Digit[8];
LCD[11]=Digit[8];
LCD[0]=Digit[0];
LCD[1]=Digit[9];                            
delay(500);
for(a=0;a<12;a++)
{
LCD[a]=0x00;
}   //initializeing the LCD show
}
//------------------------------------------------------------------------------------------
void Display_Lcd_seg(int lcd_seg)
{
  
int i=lcd_seg;
LCD[14] &=~Seg_14[2];LCD[15]&=~Seg_15[7];LCD[16]&=~Seg_15[7];LCD[17]&=~Seg_15[7];LCD[18]&=~Seg_15[7];LCD[19]&=~Seg_20[5];
if(i==0||i<0)    {LCD[14] |=0x80;}
else if(i<=3)   {LCD[14]|=Seg_14[i-1];}
else if(i<=11)  {LCD[14]|=Seg_14[2];LCD[15]=Seg_15[i-4];}
else if(i<=19)  {LCD[14]|=Seg_14[2];LCD[15]=Seg_15[7];LCD[16]=Seg_15[i-12];}
else if(i<=27)  {LCD[14]|=Seg_14[2];LCD[15]=Seg_15[7];LCD[16]=Seg_15[7];LCD[17]=Seg_15[i-20];}
else if(i<=35)  {LCD[14]|=Seg_14[2];LCD[15]=Seg_15[7];LCD[16]=Seg_15[7];LCD[17]=Seg_15[7];LCD[18]=Seg_15[i-28];}
else if(i<=40) {LCD[14]|=Seg_14[2];LCD[15]=Seg_15[7];LCD[16]=Seg_15[7];LCD[17]=Seg_15[7];LCD[18]=Seg_15[7];LCD[19]|=Seg_20[i-36];}
else {LCD[14]|=Seg_14[2];LCD[15]=Seg_15[7];LCD[16]=Seg_15[7];LCD[17]=Seg_15[7];LCD[18]=Seg_15[7];LCD[19]|=Seg_20[5];};
}
//------------------------------------------------------------------------------------------
void Init(void)
{ DIR_OUT ;
  SCL_1;
  _NOP();
  SDA_1;
  _NOP();
}

void Start(void)
{DIR_OUT ;
  SDA_1;
_NOP();
_NOP();
  SCL_1;
 _NOP();
 _NOP();
  SDA_0;
_NOP();
_NOP();
  SCL_0;
_NOP();
_NOP();
}

void Stop(void)
{
  
DIR_OUT ;
SDA_0;
_NOP();
_NOP();
SCL_1;
_NOP();
_NOP();
SDA_1;
_NOP();
_NOP();

}

void WriteByte(unsigned char WriteData)
{DIR_OUT ;
  unsigned char i;
  for (i=0; i<8; i++)
  {
    SCL_0;
    _NOP();
_NOP();
    if (WriteData & 0x80)
    {
      SDA_1;
    }
    else
    {
      SDA_0;
    }
   _NOP();
_NOP();
    SCL_1;
   _NOP();
_NOP();
     SCL_0;
    WriteData <<=1;
   _NOP();
_NOP();
  }
  //delayms(20);
 return;
}

unsigned char ReadByte(void)
{
  unsigned char i;
  unsigned char TempBit  = 0;
  unsigned char TempData = 0;
  SDA_1;
  DIR_IN;
  for (i=0; i<8; i++)
  {
     SCL_1;
    _NOP();
_NOP();
    if (SDA_IN == 0x01 /*sda==1*/)
    {
      TempBit = 1;
    }
    else
    {
      TempBit = 0;
    }
    TempData = (TempData << 1) | TempBit;   
    _NOP();
_NOP();
    SCL_0;
  }
    _NOP();
_NOP();
  return(TempData);
}

void ReceiveAck(void)
{ 
   SDA_0;
  delay(5);
  DIR_IN;
  SCL_1;
  while (SDA_IN == 0x01)
  {;
  }
  DIR_OUT;
  SCL_0;
 _NOP();
_NOP();
}

void Acknowledge(void)
{ 
  SCL_0;
  _NOP();
_NOP();
  DIR_OUT;
  SDA_0;//0
  SCL_1;
 _NOP();
_NOP();
  SCL_0;
}

unsigned int ReadWord( int unit/*address*/)
{
  
  unsigned char LowData  = 0;
  unsigned char HAddr,LAddr;
  unsigned int  TempData = 0;
  HAddr = unit>>8;
  LAddr = unit;
  DIR_OUT ;
  
  Start();
  WriteByte(0xa0);
  ReceiveAck();
  WriteByte(HAddr);
  ReceiveAck();
  WriteByte(LAddr);
  ReceiveAck();  
  Start();
  WriteByte(0xA1);
  ReceiveAck(); 
  LowData  = ReadByte();
  Acknowledge();
  TempData = LowData;
  Stop();
  return(TempData);
}



void WriteWord( int unit/*address*/, unsigned char WriteData)
{
  unsigned char LowData  = 0;
 
 
  unsigned char HAddr,LAddr;
  HAddr = unit>>8;
  LAddr = unit;
  DIR_OUT ;
  LowData  =  WriteData;
  //HighData = (unsigned char)(WriteData >> 8);
  Start();
  WriteByte(0xa0);
  ReceiveAck();
  
  
  WriteByte(HAddr);
  ReceiveAck();

  WriteByte(LAddr);
  ReceiveAck();
 
  WriteByte(LowData);
  ReceiveAck();
  
  Stop();
 delayms(1);
}

//------------------------------------------------------------------------------------------
void Clock_Out(unsigned char dd)
{
  int i;
  unsigned char Colck_Command;
 Colck_Command=dd;
 Clock_DIR_OUT;
 for(i=0;i<8;i++)
 {
   if (Colck_Command&0x01) Clock_SDA_1; else Clock_SDA_0;Colck_Command>>=1;
   Clock_CLK_1 ;Clock_CLK_0;
 }
}
unsigned char Clock_In(void)
{
  int i;
  unsigned char Clock_Temp=0;
  Clock_DIR_IN;
  for(i=0;i<8;i++)
  {
    Clock_Temp |=Clock_SDA_IN <<i;
    Clock_CLK_1 ;Clock_CLK_0;
  }
  return(Clock_Temp);
}

unsigned char Read_Clock(unsigned char ord)   
{
  unsigned char  dd=0;
  int i;
  ord=0x8F;
  for(i=0;i<8;i++)
  {
  Clock_CLK_0;
  Clock_RST_0;
  Clock_RST_1;
  Clock_Out(ord);
  dd=Clock_In();
  Clock_RST_0;
  Clock_CLK_1 ;
  ClocK_read_data[i]=dd;
  ord-=2;
  
  }
  return(dd);
}
void Write_Clock(unsigned char ord, unsigned char dd[])
{
  int i;
   ord=0x8E;
  for(i=0;i<8;i++)
  {
  Clock_CLK_0;
  Clock_RST_0;
  Clock_RST_1;
  Clock_Out(ord);
  Clock_Out(dd[i]);
  Clock_CLK_0;
  Clock_CLK_1;
  ord-=2;
  }
}
     
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
        
void delay(unsigned int Xus)
{
unsigned int a;
for(a=0;a<Xus;a++)
{
_NOP();
_NOP();
_NOP();           //Xus: delay Xus
_NOP();           //delay about 1us
_NOP();
_NOP();
}
}

void delayms(unsigned int Xms)
{
unsigned int a,b;
for(b=0;b<Xms;b++)
{
for(a=0;a<1000;a++)
{
_NOP();
_NOP();
_NOP();
_NOP();
}
}
}



⌨️ 快捷键说明

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