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

📄 main.c~

📁 潜入市嵌入式开发 嵌入式开发
💻 C~
📖 第 1 页 / 共 5 页
字号:
//#include <reg51.h>

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



#define SHEZHI  0xFE
#define TINGJI  0xEF
#define ZIJIAN  0xFD
#define XIAOYIN  0xF7
#define SHIJIAN  0xFB


Display_Acord_Value(unsigned char choice,int value,bit Test_bit );

//unsigned char read(unsigned int address);//read E2prom
//void write(unsigned int address,unsigned char dd);



////////////////////////////////////////////////para setting参数设定,具体值
unsigned char idata CPU_NO;
unsigned char idata Para_Setting_Gear;//飞轮齿数
unsigned char idata Para_Setting_StartTime;//启动按钮启动确认时间
unsigned char idata Para_Setting_StopTime;//停机按钮停机时按键有效时间
unsigned char idata Para_Setting_KeepTime;//时间显示保持时间
unsigned int idata Para_Setting_AddTimeZero;//总累计时间清零阈值
unsigned char idata Para_Setting_TemWater;//水温报警值
unsigned char idata Para_Setting_TemOil;//油温报警值
unsigned int idata Para_Setting_PreOil;//油压报警值
unsigned int idata Para_Setting_Speed;//转速报警值
unsigned int  idata Para_Setting_ReferenceSpeed_StopStart;//启动或停机转速阈值设定
unsigned char idata Para_Setting_Stop_SureTime;//停机按下后继续送继电器确认停机时间


unsigned char idata Para_Setting_WaterTem_K;//水温k
unsigned char idata Para_Setting_WaterTem_b;//水温b

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


         ////////////////////////////////////////////*********************
  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油机运行累计小时数







unsigned char   Value_For_Display[15];//DISPLAY  14 LED
/////////////////////////for set from up device
/*unsigned char idata CPU_NO1;
unsigned char idata Para_Tem_Oil1;
unsigned char idata Para_Tem_water1;
unsigned char idata Para_Speed_Divide1;
unsigned char idata Para_Speed_Alarm_Percent1;
unsigned int idata Para_Speed_Standard1;
unsigned char idata Para_Speed_Percent1; 
unsigned int idata Para_Pre_Oil1;
unsigned char Para_Pre_Oil_Zoom_k1;
char Para_Pre_Oil_Shift_b1;

*/
bit Recieve_Para_Start=0;//for serious 
bit Recieve_Para_Stop=0;



////////////for stop motor(beyond speed)
bit Bit_Start_Stop=0;
unsigned int  idata Count_Start_Stop=0;
/////////////////////////////
unsigned int idata Code_Input;//密码输入
unsigned char idata  key_out;////////读键盘临时用
unsigned char idata Times_TimeButton=0;//在正式设置参数时,  记录读取键盘的次数
unsigned char idata Mode_Code_SettingPara=0;//设定参数时,模式选择码
unsigned char idata Temp_Output;//输出用

 int idata Temp_Adjust;//设定参数时,临时变量  用来增减

int idata  Tem_Oil[5];//-20--150;the last byte is average value
int idata Tem_Water[5];///-20--150
int idata Pre_Oil[5];//0-1200kpa
int idata Voltage_28v[5];
unsigned int   Speed;//300--9999

unsigned int idata Speed_Count=0;//for test speed
unsigned int idata Capture_Count=0;
unsigned int idata Display_Count=0;
unsigned int idata Alarm_Count=0;

unsigned int idata GetKey_Count=0;

unsigned int Test_Count=0;


//////////////////////////////////
unsigned int  idata  GetKey_Count_ForUse=0;//for get key timer启动、
unsigned int idata GetKey_Count_ForUse_Stop=0;//停机等按钮的定时器
unsigned int   Count_DisplayTime_5s=0;/////时间显示定时器5s
unsigned int Count_RunningTime=0;//油机运行时间累加
unsigned int idata Count__Stop_Sure=0;//停机确认后送继电器的时间
unsigned int Count_SettingPara=0;//停机设置参数时,软件定时器   是否按住消声按键10秒
unsigned int Count_NoOperation_Exit=0;   //在设定参数时,10秒无操作离开设定模式    计时器

//bit Bit_Sign_Alarm_Stop=0;//一报警就停机标志

unsigned char Byte_Sign_First_Alarm_StartStop=0;
unsigned int idata	Count_Alarm_Stop_Send=0;//报警就停机定时器

unsigned int idata Count_NoKey=0;//没有键盘操作的定时器


unsigned int idata Count_Start_Machine_15s=0;//刚刚启动时,15秒内不做保护   只进行停机和检测 ,没有报警

unsigned char idata  E2prom=0;//for E2prom write; if time over ,has problem in E2prom 


  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)
  bit Bit_Sign_SettingParaDisplay=0;//在停机的状态下按住停机键,就进行设定显示  标志
  bit Bit_Sign_InputCode=0;//在设置参数时,能否进行密码输入的标志
  bit Bit_Sign_SettingPara_Sure=0;//在设置参数时,确认能否进入密码输入的标志

  bit Bit_Sign_Modify=0;//进入正式修改参数时,是否修改的标志
  bit Bit_Sign_First_ReadPara=1;//第一次取出要修改的参数


  bit Bit_Exit_SettingPara_Normal=0;//在正式设定参数时,是否离开的标志
    bit Bit_Sign_DisplaySetting_Sure=0;//确定显示参数设定和只能设定参数的标志

bit Bit_Sign_Alarm_NoKeyBoard=0;//有警报时,不能进行停机、启动操作

  bit Bit_Sign_SettingPara_Normal=0;////在设置参数时,确认能否进入最终正式设定状态的标志

  bit Bit_Can_TimeStart=0;//设置参数时  是否按住消声
		 

  bit Get_Key_bit=0;//fot get key 

  bit idata Signed_Test=0;//for stand for if test system
  bit Signed_Test_CPU=1;
  bit Signed_Test_24v=1;
  bit Signed_Test_5v=1;
  float idata Value_Test_24v;
  //float idata Value_Test_5v;


 // unsigned char Temp_Pre_Oil;
 // unsigned char Temp_Tem_Oil;
 // unsigned char Temp_Tem_Water;

  unsigned char Key;//for get key 


  bit data Signed_Sound_Off=0;//for sound
 // bit Signed_Sound_Off_Back=0;
////////////////////////////////

unsigned char  Byte_Sign_DisplayTime=1;////时间显示标志按钮按下次数

///////////////////////////////***********************stc12c5412AD

//////////////////////////EEPROM 操作
unsigned char EEPROM_read(unsigned int addr)//EEPROM字节读
{
	ISP_ADDRH=(addr&0xff00)>>8;
	ISP_ADDRL=addr&0x00ff;
	ISP_CONTR=0x81;
	ISP_CMD=1;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
	return ISP_DATA;
}
//--------------------------------------------------------------------
void EEPROM_write(unsigned int addr,unsigned char dat)//EEPROM字节写
{
	ISP_DATA=dat;
	ISP_ADDRH=(addr&0xff00)>>8;
	ISP_ADDRL=addr&0x00ff;
	ISP_CONTR=0x81;
	ISP_CMD=2;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
}
//--------------------------------------------------------------------
void EEPROM_ERASE(unsigned int addr)//EEPROM扇区擦除
{
	ISP_ADDRH=(addr&0xff00)>>8;
	ISP_ADDRL=addr&0x00ff;
	ISP_CONTR=0x81;
	ISP_CMD=3;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
}

void Delay_400us(void)//for getting value of measure  120us
{
  unsigned char time=200;
  while(time>0)
  {
    _nop_();//delay 2 us
    _nop_();//
    time--;
  }
}
/////////////////get AD value 
/*
    choice = 0 , oil temprature
	choice = 1 , oil pressure 
	choice = 2 , water temprature
	choice = 3 , electricity voltage
*/

void AD_init(unsigned char AD_port_sel ) //ADC初始化
{
	ADC_CONTR|=0x80;  //开ADC电源
	Delay_400us();  //add delay 
	Delay_400us(); 
	Delay_400us(); 
    switch(AD_port_sel)	//选择作为ADC的端口
	{
		case 0:
		P1M0=0x01;
		P1M1=0x00;
		ADC_CONTR&=0xf8;
 
		break;
		
		case 1:
		P1M0=0x02;
		P1M1=0x00;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x01;
		break;
 
		case 2:
	//	P1M0=0x04;
	//	P1M1=0x00;
		//ADC_CONTR&=0xf8;
	//	ADC_CONTR|=0x02;
	//ADC_CONTR=0xe2;
		P1M0=0x04;
		P1M1=0x00;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x02;
		break;
 
		case 3:
		P1M0=0x08;
		P1M1=0x10;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x03;
		break;
 
		case 4:
		P1M0=0x10;
		P1M1=0x00;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x03;
		break;
 
		case 5:
		P1M0=0x20;
		P1M1=0x00;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x05;
		break;
 
		case 6:
		P1M0=0x40;
		P1M1=0x00;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x06;
		break;
 
		case 7:
		P1M0=0x80;
		P1M1=0x80;
		ADC_CONTR&=0xf8;
		ADC_CONTR|=0x07;
		break;
	}
//	ADC_CONTR=0xe7;
	Delay_400us(); 
}
//--------------------------------------------------------------------////////////////////////AD操作
unsigned int GET_AD_Result()//启动AD转换并返回转换值
{
	unsigned char temp;
	unsigned int data_temp;
	data_temp=0;
	ADC_DATA=0;
	ADC_LOW2=0;
	ADC_CONTR|=0x08;
re:	temp=0x10;
	temp&=ADC_CONTR;
	if(temp==0)
		goto re;
	ADC_CONTR&=0xe7;
	data_temp=ADC_DATA;
	data_temp<<=2;
	data_temp+=ADC_LOW2;
		P1M0=0x00;//as normal I/O again
		P1M1=0x00;
	return data_temp;
}



Output_Zhishi(unsigned char Value_Diaplay)
{
 unsigned char Temp_P2;
   Temp_P2=P2;
///////////

   P2=0x00;

//	ECI=0;//3.4
//	CEX0=0;//3.7
//	ECI=1;//3.4
//	CEX0=1;//3.7
  P2=Value_Diaplay;
  P3_2=0;
  //ECI=1;//3.4
  //CEX0=1;//3.7
   P3_2=1;
  // T0=1;

///////////////////
P2 = Temp_P2;


}
Set_Display(unsigned char Choice,unsigned char Value_Diaplay)
{
 // unsigned char volatile xdata * Address;
   P3_2=1;
   P1_7=1;



   P2=0x00;

	ECI=0;//3.4
	CEX0=0;//3.7
	ECI=1;//3.4
	CEX0=1;//3.7
  P2=Value_Diaplay;
  P3_3=0;
  //ECI=1;//3.4
  //CEX0=1;//3.7
   P3_3=1;
  switch(Choice) 
  {
    case 1:  //for display LED 1 ,water tem 1  //////from left
	   P2=0x01;
       ECI=0;//3.4
       ECI=1;//3.7
       
	  
	  break;


	case 2:  //water tem 2
	   P2=0x02;
	   ECI=0;//3.4
       ECI=1;//3.7
       
	  break;

	case 3:  //water tem 3
	   P2=0x04;
	  ECI=0;//3.4
       ECI=1;//3.7
       
	  break;

	case 4:  //speed 1
	   P2=0x08;
	  ECI=0;//3.4
       ECI=1;//3.7
       
	  break;
	case 5:  //speed 2 
		P2=0x10;  
	  ECI=0;//3.4
       ECI=1;//3.7
       
		  break;
	case 6:  //speed 3
	   P2=0x20;
	   ECI=0;//3.4
       ECI=1;//3.7
       
		  break;
	case 7:  //speed 4
	    P2=0x40;
	  ECI=0;//3.4
       ECI=1;//3.7
       
		  break;
	case 8:  //oil pre 1
		P2=0x01;
	  CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;
	case 9:  //oil pre 2
	  P2=0x02;
	  CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;
	case 10:  //oil pre 3
		P2=0x04;
	    CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;
	case 11:  //oil pre 4
		P2=0x08;
	   CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;
	case 12:  //oil tem 1
		P2=0x10;
	   CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;
	case 13:  //oil tem 2
		P2=0x20;
	   CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;
	case 14:  //oil tem 3
		P2=0x40;
	  CEX0=1;//3.4
       CEX0=0;//3.7
       
		  break;


	default:
      
	  break;
  }
  
}

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



unsigned char  Display_Lookup_Table(unsigned char byte)
{
  unsigned char Byte_code=0xff;
  switch(byte)
  {
    case 0:
	  Byte_code=0x3f;
	  break;
	case 1:
	  Byte_code=0x06;
	  break;
	case 2:
	  Byte_code=0x5b;
	  break;
	case 3:
	  Byte_code=0x4f;
	  break;
	case 4:
	  Byte_code=0x66;
	  break;
	case 5:
	  Byte_code=0x6d;
	  break;
	case 6:
	  Byte_code=0x7d;
	  break;
	case 7:
	  Byte_code=0x07;
	  break;
	case 8:
	  Byte_code=0x7f;
	  break;
	case 9:
	  Byte_code=0x6f;
	  break;
	case 10://"-" sign
	  Byte_code=0x40;
	  break;
	case 11://all go out
      Byte_code=0x00;
	  break;
	default:
	  break;
  }
  return Byte_code;
  
}
/*void dispaly_point(unsigned int Address)
{
   XBYTE[Address]=0x7f;
}*/
/*
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))|| (value==0) )
 {
	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

⌨️ 快捷键说明

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