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