📄 main.c~
字号:
//#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 + -