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

📄 main.c

📁 监控仪 监控仪 监控仪
💻 C
📖 第 1 页 / 共 5 页
字号:
//#include <reg51.h>

#include<ABSACC.H>
#include<intrins.h>
#include<math.h>
#include <ATmel89X55.H>

#define QIDONG  0xEF
#define TINGJI  0xF7
#define ZIJIAN  0xFD
#define XIAOYIN  0xFB
#define SHIJIAN  0xFE
///////////////////0603
#define QIDONG1  0xCF
#define TINGJI1  0xD7
#define ZIJIAN1 0xDD
#define XIAOYIN1  0xDB
#define SHIJIAN1  0xDE


Display_Acord_Value(unsigned int address,int value,bit Test_bit );

unsigned ch时,15秒内不做保护   只进行停机和检测 ,没有报警

unsigned char idata  E2prom=0;//for E2prom write; if time over ,has problem in E2prom 
          ////////////////////////////////////////////*********************
  unsigned int idata Time_Minutes_Running=0;//now running time--minutes当前油机的运行分钟数   
  unsigned int idata Time_Hours_Running=0;  //now running time--hours  当前油机的运行小时数

  unsigned int idata Time_Minutes_Add;  /////add time minute油机运行累计分钟数
  unsigned int idata Time_Hours_Add;    /////add time Hour油机运行累计小时数

  bit Sign_Alarm_Speed=0;   //stand for if alarm dispaly
  bit Sign_Alarm_Water=0;
  bit Sign_Alarm_OilPre=0;
  bit Sign_Alarm_OilTem=0;
  bit Sign_Tem_Oil=0;  // stand for if beyond thold
  bit Sign_Tem_Water=0;
  bit Sign_Pre_Oil=0;
  bit Sign_Speed=0;
  //////////////////////////////////////
  bit Bit_Stop_Sure=0;//停机确认位(按下1s)
  bit Bit_Sign_DisplayTime=0;//时间按钮按下标志
  bit Bit_Sign_DisplayTime_OilPre=0;///时间显示时,标志位(不显示油压)
  bit Bit_Sign_SettingPara=0;//在停机设置参数时,是否按住消声按钮的标志
  bit Bit_Sign_Running=0;//检测是否运行的标志(根据转速500)
CLOCK=0;
_CS=0;
port<<=4;
for (i=0;i<4;i++) //把通道号打入1543
{
	D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;
	port<<=1;
}
	
for (i=0;i<6;i++) //填充6个CLOCK
{
CLOCK=1;CLOCK=0;
}

_CS=1;_nop_();_nop_();_CS=0; //等待AD转换

for (i=0;i<2;i++) //取D9,D8
{
	D_OUT=1;
	CLOCK=1;
	ah<<=1;
	if (D_OUT) ah|=0x01;
	CLOCK=0;
}	

for (i=0;i<8;i++) //取D7--D0
{
	D_OUT=1;
	CLOCK=1;
	al<<=1;
	if (D_OUT) al|=0x01;
	CLOCK=0;
}	

_CS=1;

ad=(uint)ah;ad<<=8;ad|=al; //得到AD值
return (ad);
}

void init()
{
/*
  TMOD= 0;//initial timer
  TCON= 0;
  TH0=0xF0;
  TL0=0x0C;
*/

  Speed_Count=0;//for test speed
  Capture_Count=0;
  Display_Count=0;
  Alarm_Count=0;
  
  
  P1=0;
}


////////////////////////初始化各项参数
Init_Para_Setting()
{

  Para_Setting_Gear=135;
  Para_Setting_StartTime=2;
  Para_Setting_StopTime=1;
  Para_Setting_KeepTime=5;
  Para_Setting_AddTimeZero=9999;
  Para_Setting_TemWater=100;
  Para_Setting_TemOil=105;
  Para_Setting_PreOil=400;
  Para_Setting_Speed=1950;
  Para_Setting_ReferenceSpeed_StopStart=500;//
  Para_Setting_Stop_SureTime=5;//

  Para_Setting_WaterTem_K=100;//水温k
  Para_Setting_WaterTem_b=50;//水温b

//unsigned char idata Para_Setting_WaterTem_b;//水温b
  Para_Setting_OilTem_K=100;//水温k
  Para_Setting_OilTem_b=50;//水温b

   Time_Minutes_Running=0;//now running time--minutes当前油机的运行分钟数   
   Time_Hours_Running=0;  //now running time--hours  当前油机的运行小时数

   Time_Minutes_Add=0;  /////add time minute油机运行累计分钟数
   Time_Hours_Add=0; 


}
///////////////////////以下是对各项参数的rom操作
void Write_Para_SetSelf(void)
{
  unsigned int temp;
  write(0x0010, 0);
  write(0x0011, Para_Setting_Gear);
  write(0x0012, Para_Setting_StartTime);
  write(0x0013, Para_Setting_StopTime);
  write(0x0014, Para_Setting_KeepTime);
  //write(0x0015, Para_Setting_AddTimeZero);
  write(0x0016, Para_Setting_TemWater);
  write(0x0017, Para_Setting_TemOil);
  write(0x0018, Para_Setting_PreOil/256);
  write(0x0019, Para_Setting_PreOil%256);
  write(0x001a, Para_Setting_Speed/256);
  write(0x001b, Para_Setting_Speed%256);
  ////  
//  write(0x001c, Para_Setting_Frequency);
  write(0x001d, Time_Minutes_Add/256);

  write(0x001e, Time_Minutes_Add%256);

  

  write(0x001f, Time_Hours_Add/256);

  write(0x0020, Time_Hours_Add%256);





  write(0x0023, Para_Setting_ReferenceSpeed_StopStart/256);
  write(0x0024, Para_Setting_ReferenceSpeed_StopStart%256);

  write(0x0025, Para_Setting_Stop_SureTime);


  write(0x0026, Para_Setting_AddTimeZero/256);

  write(0x0027, Para_Setting_AddTimeZero%256);


  ///////////////////////////////
  write(0x0028, Para_Setting_WaterTem_K);
  write(0x0029, Para_Setting_WaterTem_b);
  write(0x002a, Para_Setting_OilTem_K);
  write(0x002b, Para_Setting_OilTem_b);



  
}
 void Read_Para_SetSelf(void)
 {
  unsigned int temp;
  read(0x0010);//read E2prom

  Para_Setting_Gear=read(0x0011);
  Para_Setting_StartTime=read(0x0012);
  Para_Setting_StopTime=read(0x0013);
  Para_Setting_KeepTime=read(0x0014);
  //Para_Setting_AddTimeZero=read(0x0015);

  Para_Setting_TemWater=read(0x0016);
  Para_Setting_TemOil=read(0x0017);
  Para_Setting_PreOil=read(0x0018)*256+read(0x0019);
  
  Para_Setting_Speed=read(0x001a)*256+read(0x001b);
  /////
 // Para_Setting_Frequency=read(0x001c);
  Time_Minutes_Add=read(0x001d)*256+read(0x001e);

  Time_Hours_Add=read(0x001f)*256+read(0x0020);


  Para_Setting_ReferenceSpeed_StopStart=read(0x0023)*256+read(0x0024);
  Para_Setting_Stop_SureTime=read(0x0025);//


Para_Setting_AddTimeZero=read(0x0026)*256+read(0x0027);
//////////////////////////////////




  Para_Setting_WaterTem_K=read(0x0028);//水温k
  Para_Setting_WaterTem_b=read(0x0029);//水温b

//unsigned char idata Para_Setting_WaterTem_b;//水温b
  Para_Setting_OilTem_K=read(0x002a);//水温k
  Para_Setting_OilTem_b=read(0x002b);//水温b

 
 }

Set_Display(unsigned char Choice,unsigned char Value_Diaplay,unsigned int address)
{
 // unsigned char volatile xdata * Address;
  switch(Choice) 
  {
    case 1:  //for display LED 1 
      // Byte_Try=Display_Lookup_Table(5);
      XBYTE[address]=Value_Diaplay;
    /*  P0=Value_Diaplay;
      P2_0=0;
      P2_0=1;
      P2_0=0; */
	  
	  break;


	case 2:  //for display 2 
	   XBYTE[address+1]=Value_Diaplay;
	  break;

	case 3:  //for display 3
	   XBYTE[address+2]=Value_Diaplay;
	  break;

	case 4:  //for display 4 
	   XBYTE[address+3]=Value_Diaplay;
	  break;
	default:
	  break;
  }
  
}



 unsigned char  Display_Lookup_Table(unsigned char byte)
{
  unsigned char Byte_code=0xff;
  switch(byte)
  {
    case 0:
	  Byte_code=0xC0;
	  break;
	case 1:
	  Byte_code=0xF9;
	  break;
	case 2:
	  Byte_code=0xA4;
	  break;
	case 3:
	  Byte_code=0xB0;
	  break;
	case 4:
	  Byte_code=0x99;
	  break;
	case 5:
	  Byte_code=0x92;
	  break;
	case 6:
	  Byte_code=0x82;
	  break;
	case 7:
	  Byte_code=0xF8;
	  break;
	case 8:
	  Byte_code=0x80;
	  break;
	case 9:
	  Byte_code=0x90;
	  break;
	case 10://"-" sign
	  Byte_code=0xBF;
	  break;
	case 11://all go out
      Byte_code=0xFF;
	  break;
	default:
	  break;
  }
  return Byte_code;
  
}

 ///////////////单独拿出油压位置的显示
Display_Led_OilPre_NoPiont(unsigned int address,unsigned int value)

{
  unsigned char Temp_Byte;//for dispaly a byte

  unsigned int Temp_Remain;//for calculate byte
  unsigned int Temp_Divide;
  

  if(value<0)
  {
    Temp_Byte=Display_Lookup_Table(10);
	Set_Display(1,Temp_Byte,address);
	value=abs(value);
	Temp_Divide=value/100;
	Temp_Remain=value%100;
	if(Temp_Divide!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Divide));
	else
	    Temp_Byte=Display_Lookup_Table(0);
    Set_Display(2,Temp_Byte,address);

	Temp_Divide=Temp_Remain/10;
	Temp_Remain=Temp_Remain%10;
	if(Temp_Divide!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Divide));
	else
	    Temp_Byte=Display_Lookup_Table(0);
    Set_Display(3,Temp_Byte,address);

	 // Temp_Divide=value/1000;
	 // Temp_Remain=value%1000;
	if(Temp_Remain!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Remain));
	else
	    Temp_Byte=Display_Lookup_Table(0);
    Set_Display(4,Temp_Byte,address);
  } 
  else
    if(value==0)
    {

      Temp_Byte=Display_Lookup_Table(0);
	  Set_Display(1,Temp_Byte,address);
	  Set_Display(2,Temp_Byte,address);
	  Set_Display(3,Temp_Byte,address);
	  Temp_Byte=Display_Lookup_Table(0);
	  Set_Display(4,Temp_Byte,address);
    }
    else
	{
	//  unsigned int Temp_Remain;
	//  unsigned int Temp_Divide;

	  Temp_Divide=value/1000;
	  Temp_Remain=value%1000;
	  if(Temp_Divide!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Divide));
	  else
	    Temp_Byte=Display_Lookup_Table(0);
      Set_Display(1,Temp_Byte,address);

	  Temp_Divide=Temp_Remain/100;
	  Temp_Remain=Temp_Remain%100;
	  if(Temp_Divide!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Divide));
	  else
	    Temp_Byte=Display_Lookup_Table(0);
      Set_Display(2,Temp_Byte,address);

	  Temp_Divide=Temp_Remain/10;
	  Temp_Remain=Temp_Remain%10;
	  if(Temp_Divide!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Divide));
	  else
	    Temp_Byte=Display_Lookup_Table(0);
      Set_Display(3,Temp_Byte,address);

	 // Temp_Divide=value/1000;
	 // Temp_Remain=value%1000;
	  if(Temp_Remain!=0)
	    Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Remain));
	  else
	    Temp_Byte=Display_Lookup_Table(0);
      Set_Display(4,Temp_Byte,address);

	}

  
}


///////////////////////////////////////////
 void Display_ParaValue(unsigned char Mode_Code_SettingPara)//根据设定参数模式下,不同选择显示不同参数
 {
   switch(Mode_Code_SettingPara)
  {
    case 0:
	//  Display_Acord_Value( 0x8004,Para_Setting_Gear,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_Gear);

	  break;
	case 1:
	  //Display_Acord_Value( 0x8004,Para_Setting_StartTime,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_StartTime);
	  break;
	case 2:
	  //Display_Acord_Value( 0x8004,Para_Setting_StopTime,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_StopTime);
	  break;
	case 3:
	//  Display_Acord_Value( 0x8004,Para_Setting_KeepTime,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_KeepTime);
	  break;
	case 4:
	 // Display_Acord_Value( 0x8004,Para_Setting_AddTimeZero,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_AddTimeZero);
	  break;
	case 5:
	 // Display_Acord_Value( 0x8004,Para_Setting_TemWater,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_TemWater);
	  break;
	case 6:
	 // Display_Acord_Value( 0x8004,Para_Setting_TemOil,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_TemOil);
	  break;
	case 7:
	 // Display_Acord_Value( 0x8004,Para_Setting_PreOil,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_PreOil);
	  break;
	case 8:
	 // Display_Acord_Value( 0x8004,Para_Setting_Speed,1);
	   Display_Led_OilPre_NoPiont(0x8004,Para_Setting_Speed);
	  break;
	case 9:
	// Display_Acord_Value( 0x8004,Para_Setting_ReferenceSpeed_StopStart,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_ReferenceSpeed_StopStart);
	  break;
	case 10:
	// Display_Acord_Value( 0x8004,Para_Setting_Stop_SureTime,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_Stop_SureTime);
	  break;
	  	case 11:
	// Display_Acord_Value( 0x8004,Para_Setting_Stop_SureTime,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_WaterTem_K);
	  break;
	  	case 12:
	// Display_Acord_Value( 0x8004,Para_Setting_Stop_SureTime,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_WaterTem_b);
	  break;
	  	case 13:
	// Display_Acord_Value( 0x8004,Para_Setting_Stop_SureTime,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_OilTem_K);
	  break;
	  	case 14:
	// Display_Acord_Value( 0x8004,Para_Setting_Stop_SureTime,1);
	  Display_Led_OilPre_NoPiont(0x8004,Para_Setting_OilTem_b);
	  break;


	default:
	 Display_Acord_Value( 0x8004,00,1);
	break;
  }

 }



void Delay_120us(void)//for getting value of measure  120us
{
  unsigned char time=60;
  while(time>0)
  {
    _nop_();//delay 2 us
    time--;
  }
}





//TAB:  DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,    88H,83H,0C6H,0A1H,86H,8EH




/*void dispaly_point(unsigned int Address)
{
   XBYTE[Address]=0x7f;
}*/

void DeLay_ms(unsigned int t)                     //延时约 t ms
{
   unsigned int i=0;
   while(t--)
   {
   	for(i = 0; i < 68; i++)   //对于6M  延时约1ms
   	{
	}
   }

}

void Display_CPU_NO(unsigned int value)
{
  unsigned int Temp_Remain;//for calculate byte
  unsigned int Temp_Divide;
  unsigned char Temp_Byte;
 if( ((value>0)&&(value<100)) )
 {
	Temp_Divide=value/10;
	Temp_Remain=value%10;

	Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Divide));
	XBYTE[0x8002]=Temp_Byte;
    


	Temp_Byte=Display_Lookup_Table((unsigned char)(Temp_Remain));
	
    XBYTE[0x8003]=Temp_Byte;
  }
  else
  {
    XBYTE[0x8003]=0xff;
	XBYTE[0x8002]=0xff;
  }

 
}
void Test_Motor_Normal()
{
  //first led display,dispaly "CS"
  XBYTE[0x8000]=0xc6;
  XBYTE[0x8001]=0x92;

   XBYTE[0x8003]=0xff;
   XBYTE[0x8002]=0xff;
  //XBYTE[0x8002]=0xc0;

⌨️ 快捷键说明

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