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

📄 main.c

📁 电源采样控制
💻 C
字号:
#include"at89x52.h"
#include "stdlib.h"
#include "math.h"
//
#define J_ON     P2_1=1
#define J_OFF    P2_1=0
#define AV_ON    P2_2=1
#define AV_OFF   P2_2=0
#define G_ON     P2_3=1
#define G_OFF    P2_3=0
extern unsigned char idata recive[16];
extern unsigned char idata send[32];
extern unsigned char LocalAddr;
extern void SendBuff(float integer,unsigned char dec,unsigned char index);
//
unsigned int TlcCount;
unsigned int Count=0;
bit first=0;
bit j10a=0;

//KeyDisplay.c
//extern void delay(unsigned int value);
//extern unsigned char KeyDown();      extern unsigned char KeyUP();
//extern unsigned char KeyPoint();

//tlc2543.c
extern unsigned int   Tlc2543RW(unsigned char addr);
extern float count_give(unsigned int ad,unsigned int scale);
// initialize.c
extern void c51_initialize();
extern void timer0_initialize();
//port
extern void  DisplayDrv(unsigned index,unsigned num);
extern void ShowOff(unsigned char index,unsigned char num);
extern void WriteBuff(float intager,unsigned char base,unsigned char dec);
//keydisplay.c
extern unsigned char KeyDown();
extern unsigned char KeyUp();
extern unsigned char KeyPoint();
extern void delay(unsigned int value);
//process.c
extern bit bdata sac; extern bit bdata sdc;extern bit bdata jdc;extern bit bdata jac;
extern bit bdata down;extern bit bdata up; extern bit bdata fpow;extern bit bdata pow;
extern bit bdata s220;extern bit bdata j40a;extern bit bdata vcr;extern bit bdata zt;
extern bit bdata dvd;
extern void student_ACpow(bit pc_c51);extern void HDC_pow(bit pc_c51);
extern void student_pow(bit pc_c51);  extern void student_220v(bit pc_c51);
extern void teacher_dc(bit pc_c51);   extern void teacher_ac(bit pc_c51);
extern void flow_pow(bit pc_c51);     extern void system_pow(bit pc_c51);
extern void LowPower_down(bit pc_c51);extern void LowPower_up(bit pc_c51);
extern void vcd(bit pc_c51);          extern void vrc(bit pc_c51);
extern void zhantai(bit pc_c51);      extern void teacher_40a(bit pc_c51);
extern void ProtectTDA();             extern void ProtectTAA();
extern void pc(bit pc_c51);           extern void gate(bit pc_c51);
extern void PressCom(unsigned char* str);
extern void Relay(unsigned char m);
extern unsigned char j_573,av_573,g_573;
//
extern void CommBand(unsigned char band);
void SetMem();
 //
void key();
void ProTlc();
void ProTlc();
void  IntChange(unsigned int value);
//

//

//程序从这里开始
void main(void)
{

  ///////////////////////////

  ////////////////////////////
  c51_initialize();
  //SetMem();
  timer0_initialize();
  EA=0;
  LocalAddr=0;

  //CommBand(24);


  EA=1;
  pow=1;
  while(1)
  {
      if(recive[0]=='r'&&recive[1]=='t')
      {
          if(pow)
          {
             system_pow(1);
             recive[0]=0;
             recive[1]=0;
          }
      }
      if(recive[0]!=0)
      {
       PressCom(recive);
       recive[0]=0;
       recive[1]=0;
      }

      //间隔固定时间段采样
      while(TlcCount==0x1fff)
      {
       ProTlc();
       TlcCount=0;
      }

      //键盘扫描
      TlcCount++;
      if(KeyDown()==1)
      {
       key();
      }
  }
}

/*************key()***********************************
      按键处理
******************************************************/
void key()
{
 unsigned char KeyValue;
 KeyValue=KeyPoint();//得到健值
 delay(10);
 // 再一次读取健值
 if(KeyValue!=KeyPoint())
 {
    KeyValue=0x00;//错误值
    return;
 }
 KeyValue=~KeyValue;

 {
  //等待
  BAOJ=1;
  while(KeyUp()==0);
  BAOJ=0;
  switch (KeyValue)
  {

   case 0x84://J.DC
        teacher_dc(0);
        break;

   case 0x81://J.AC
        teacher_ac(0);
        break;

   case 0x14://F.POW
        flow_pow(0);
        break;

   case 0x21://POW
        //system_pow(0);
        student_pow(0);
        break;

   case 0x11://S.DC
       // student_pow(0);
        break;

   case 0x12://S.220
       // student_220v(0);
        break;

   case 0x18://40A
        teacher_40a(0);
        break;

   case 0x24://VRC
        vrc(0);
        break;

   case 0x28://ZT
        zhantai(0);
        break;

   case 0x22://DVD
        vcd(0);
        break;
   case 0x42://笔记本
        pc(0);
        break;
   case 0x41://笔记本
        gate(0);
        break;
   case 0x88:
   LowPower_down(0);
   break;
   case 0x48:
   LowPower_up(0);
        break;
   default:
        break;

  }
 }
}
/*-----------------------------------

-------------------------------------*/

void ProTlc()
{
  unsigned char i;
  float fvalue[5];//采样十进制数临时保变量
  unsigned int TlcValue[7];
  //写地址0等待转换
  EA=0;
  ES=0;
  Tlc2543RW(0);
  //得到7次采样值
  for(i=0;i<7;i++)
  {
   TlcValue[i]=Tlc2543RW(i+1);//i+1----地址0到7,7无效
  }
  EA=1;
  //转换成十进制浮点数
  //直流电压16倍(0-40V)      tlc2543-A0
  fvalue[0]=count_give(TlcValue[0],16);
  //学生220伏160倍(0-400伏)  tlc2543-A1
  fvalue[1]=count_give(TlcValue[1],160);
  //风机                     tlc2543-A2
  fvalue[2]=count_give(TlcValue[2],640);
  if(jac)
  {
   //教师交流电流1倍(0-10)   tlc2543-A4
   fvalue[3]=count_give(TlcValue[4],4);
   if(fvalue[3]>8)
   {
     ProtectTAA();
   }
  }
  else if(jdc)
  {
   //教师直流电流(0-10)       tcl2543-A3
   fvalue[3]=count_give(TlcValue[3],4);
   if(fvalue[3]>6)
   {
     ProtectTDA();
   }
  }
  else if(j40a)
  {
   //教师40A大电流(0--50)     tlc2543-A6
   fvalue[3]=count_give(TlcValue[6],20);
   if(fvalue[3]>40)
   {
    teacher_40a(0);
    ShowOff(4,3);
    BAOJ=1;
    delay(4000);
    BAOJ=0;
   }
   if(fvalue[3]>=10&&!j10a)
   {
     j10a=1;
     TL0=0x0;
     TH0=0x0;
     TR0=1;
   }
  }
  else
  {
   ;
  }

  //教师交流电压(0-40伏)     tlc2543-A5
  fvalue[4]=count_give(TlcValue[5],16);

  /**************************************
        采样值写入显示缓冲区
  ***************************************/
  {

    if(pow)
    {
      WriteBuff(fvalue[1],1,0);
      DisplayDrv(1,3);
      SendBuff(fvalue[1],1,0);
    }
    else
    {
     ShowOff(1,3);
    }
    //教师直流电压
    if(jdc)
    {
      WriteBuff(fvalue[0],3,1);
      DisplayDrv(3,3);
      //
      SendBuff(fvalue[0],1,2);
    }
    else
    {
     ShowOff(3,3);
    }

    //教师交流电压
    if(jac)
    {
      WriteBuff(fvalue[4],2,1);
      DisplayDrv(2,3);
      SendBuff(fvalue[4],1,1);
    }
    else
    {
     ShowOff(2,3);
    }

    //教师直流\交流\40安培大电流
    if(jac||jdc||j40a)
    {
      WriteBuff(fvalue[3],4,1);
      DisplayDrv(4,3);
      SendBuff(fvalue[3],1,3);
    }
    else
    {
     ShowOff(4,3);
    }

    //风机转速
    if(fpow)
    {
      WriteBuff(fvalue[2],5,0);
      DisplayDrv(5,4);
      SendBuff(fvalue[2],1,4);
    }
    else
    {
     ShowOff(5,4);
    }

  }
 ES=1;
}
void time0() interrupt 1 using 0
{
   Count++;
   if(!first)
   {
     first=1;
     BAOJ=1;
     delay(400);
     BAOJ=0;
   }
   //20秒关断大电流
   if(Count>100)
   {
     j10a=0;
     first=0;
     Count=0;
     TR0=0;
     TH0=0;
     TL0=0;
     teacher_40a(0);
     ShowOff(4,3);
     {
       BAOJ=1;
       delay(300);
       BAOJ=0;
       delay(400);
       BAOJ=1;
       delay(600);
       BAOJ=0;
       delay(400);
       BAOJ=1;
       delay(300);
       BAOJ=0;
       delay(400);
       BAOJ=1;
       delay(1000);
       BAOJ=0;
       delay(400);
       BAOJ=1;
       delay(300);
       BAOJ=0;
       delay(400);
       BAOJ=1;
       delay(2000);
       BAOJ=0;
       delay(400);
       BAOJ=1;
       delay(3000);
       BAOJ=0;
       delay(400);
     }
   }
   //大电流已经关闭
   if(!j40a)
   {
     j10a=0;
     first=0;
     BAOJ=1;
     delay(1000);
     BAOJ=0;
     Count=0;
     TR0=0;
     TH0=0;
     TL0=0;
   }
}


⌨️ 快捷键说明

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