📄 main.c
字号:
//****************************************************************************************************
void float_to_bcd(unsigned char xdata *pBCD,float Float)
{
*(pBCD+5)=Float/100000;
Float-=*(pBCD+5)*100000;
*(pBCD+4)=Float/10000;
Float-=*(pBCD+4)*10000;
*(pBCD+3)=Float/1000;
Float-=*(pBCD+3)*1000;
*(pBCD+2)=Float/100;
Float-=*(pBCD+2)*100;
*(pBCD+1)=Float/10;
Float-=*(pBCD+1)*10;
*pBCD=Float;
}
//****************************************************************************************************
//function: void float_to_bcd1(unsigned char *pBCD,float Float);
//description: convert float variable to 6 bits BCD code ,stored into buffer pointed by pBCD,
// with one decimal
//parameter: pBCD---pointer of buffer to store BCD code
// Char---char to be converted
//return: none
//****************************************************************************************************
void float_to_bcd1(unsigned char xdata *pBCD,float Float)
{
*(pBCD+4)=Float/1000;
Float-=*(pBCD+4)*1000;
*(pBCD+3)=Float/100;
Float-=*(pBCD+3)*100;
*(pBCD+2)=Float/10;
Float-=*(pBCD+2)*10;
*(pBCD+1)=Float;
Float-=*(pBCD+1);
*pBCD=Float/0.1;
}
//****************************************************************************************************
//function: unsigned char find_data(unsigned int keyword,unsigned int *DataArrayPointer,unsigned n)
//description: find data by keyword(unsigned int type) from given data array that is in order,return the data's index
// the found data is always less or equal to the key word
//parameter: keyword---keyword which to be found; n---total data number
// DataArrayPointer---pointer of data array
//return: zero-base index of the keyword
//****************************************************************************************************
unsigned char find_data(unsigned int keyword,unsigned int code *DataArrayPointer,unsigned char n)
{
unsigned char m;//compare counter
unsigned char TempN;//index
bit ThanMax=1;//keyword more than maximal element flag
m=0;
while(m<n)//
{
if(*DataArrayPointer>keyword)//if find element more than keyword
{
if(m>0)
TempN=m-1;//get the less element's index
else
TempN=0;
m=n;//exit
ThanMax=0;//find the element
}
else if(*DataArrayPointer==keyword)//if find element equal to keyword
{
TempN=m;
m=n;//exit
ThanMax=0;//find the element
}
else
{
m++;//next element
DataArrayPointer++;
}
}
if(ThanMax)//not find element,get the maximal element's index
{
TempN=n-1;
}
return TempN;
}
//////////////////////////////main function/////////////////////////////////
void main(void)
{
unsigned char loop;
unsigned char sum;
unsigned int loop1;
unsigned int loop2;
unsigned int loop3;
unsigned char WaitTimer;
union {float Float;unsigned char FloatArray[4];}xdata EUnion;
float xdata TempFloat;
unsigned char TempLogic;
wdt_init();
wdt_refresh();
init_5045wdt(0x20);
// SlaveTimer1=SlaveTimer2=0;
cs5045=0;
cs5045=1;
Project_Init();
wdt_refresh();
if(read_page_float4(EE_POWER1)!=123.4567)
{
////write 1 page,include RunMileage,SingleMileage,TotalMileage,ErrorTimes,FuelUse
RunTime=0;
RunErrorTimes=0;
FuelUse=0;
RunMileage=0;
SingleMileage=0;
TotalMileage=0;
write_page_float4(RUN_MILEAGE,0);
write_page_float4(SINGLE_MILEAGE,0);
wdt_refresh();
write_page_float4(TOTAL_MILEAGE,0);
write_byte(RUN_ERROR_TIMES,0);
write_byte(RUN_TIME,0);
write_byte(FUEL_USE,0);
wdt_refresh();
write_byte(ERROR_CODE0,0);
write_byte(ERROR_CODE1,0);
write_byte(ERROR_CODE2,0);
write_byte(ERROR_CODE3,0);
wdt_refresh();
write_byte(ERROR_CODE4,0);
write_byte(ERROR_CODE5,0);
write_byte(ERROR_CODE6,0);
write_byte(ERROR_CODE7,0);
wdt_refresh();
for(loop1=0;loop1<10000;loop1++)
{
;
}
write_page_float4(EE_POWER1,123.4567);
}
wdt_refresh();
cs5045=0;
_nop_();
_nop_();
cs5045=1;
RunMileage=read_page_float4(RUN_MILEAGE);
SingleMileage=read_page_float4(SINGLE_MILEAGE);
TotalMileage=read_page_float4(TOTAL_MILEAGE);
if((SingleMileage>9999.9)||(SingleMileage<0.01))
{
write_page_float4(SINGLE_MILEAGE,0);
SingleMileage=0;
}
if((TotalMileage>999999)||(TotalMileage<0))
{
write_page_float4(TOTAL_MILEAGE,0);
TotalMileage=0;
}
RunTime=read_byte(RUN_TIME);
RunErrorTimes=read_byte(RUN_ERROR_TIMES);
FuelUse=read_byte(FUEL_USE);
wdt_refresh();
cs5045=0;
_nop_();
_nop_();
cs5045=1;
for(loop1=0;loop1<20;loop1++)
{
for(loop2=0;loop2<8;loop2++)
{
MsgTrans[loop1][loop2]=0;
}
}
for(loop=0;loop<13;loop++)
{
ReceiveBuffer[loop]=0;
}
wdt_refresh();
cs5045=0;
_nop_();
_nop_();
cs5045=1;
for(loop=0;loop<4;loop++)
{
fre[loop]=0;
}
for(loop=0;loop<5;loop++)
{
EngineSpeedArray[loop]=0;
}
for(loop=0;loop<51;loop++)
{
SendBuffer[loop]=0;
}
diagnostic[0]=read_byte(ERROR_CODE0);
diagnostic[1]=read_byte(ERROR_CODE1);
diagnostic[2]=read_byte(ERROR_CODE2);
diagnostic[3]=read_byte(ERROR_CODE3);
diagnostic[4]=read_byte(ERROR_CODE4);
diagnostic[5]=read_byte(ERROR_CODE6);
diagnostic[6]=read_byte(ERROR_CODE6);
diagnostic[7]=read_byte(ERROR_CODE7);
wdt_refresh();
cs5045=0;
_nop_();
_nop_();
cs5045=1;
for(loop=0;loop<8;loop++)
{
ADValue[0][loop]=ad_single(0);
}
for(loop=0;loop<8;loop++)
{
ADValue[1][loop]=ad_single(1);
}
wdt_refresh();
cs5045=0;
_nop_();
_nop_();
cs5045=1;
SensorValue=0;//calculate sum
for(loop=0;loop<8;loop++)
{
ADValue[1][loop]=ad_single(1);/////////added 2004/09/15//by lihx
SensorValue+=ADValue[1][loop];
}
ADResult=SensorValue/8.0+0.5;//calculate average
SensorValue=sensor_value(300,ADResult);
if(SensorValue>180) SensorValue=180;
if(SensorValue<10) SensorValue=10;
FuelQ=10.0/17.0*SensorValue-100.0/17.0+0.5;
SensorValue=0;//calculate sum
for(loop=0;loop<8;loop++)
{
ADValue[0][loop]=ad_single(0);/////////added 2004/09/15//by lihx
SensorValue+=ADValue[0][loop];
}
ADResult=SensorValue/8.0+0.5;//calculate average
SensorValue=sensor_value(300,ADResult);
WaterT=WaterTTable[find_data(SensorValue,WaterTSensorTable,81)];
if(WaterT>=44)
{
WaterT-=4;
}
wdt_refresh();
cs5045=0;
_nop_();
_nop_();
cs5045=1;
///////////////////////added for DFqc ////////////////////////////////
///////////////////////20041022//////////////////////////////////////
SensorValue=0;//calculate sum
for(loop=0;loop<8;loop++)
{
ADValue[2][loop]=ad_single(2);/////////added 2004/09/15//by lihx
SensorValue+=ADValue[2][loop];
}
ADResult=SensorValue/8.0+0.5;//calculate average
SensorValue=sensor_value(300,ADResult);
WaterT1=Water1TTable[find_data(SensorValue,Water1TSensorTable,81)];
/////////////////////////////////////////////////////////////////////
ClearDelayTimer1=0;
ClearDelayTimer2=0;
ClearOnTimer1=0;
ClearOnTimer2=0;
ClearErrorFlag=0;
ClearMileageFlag=0;
KeyBuffer=0;
TH0Buffer=0;
TL0Buffer=0;
T0IntBuffer=0;
T0IntCounter=0;
PowerOnTimer=0;
////////////////////////////////////////////////////////////////////////////////////////////////////////
for(;;)
{
wdt_refresh();
p=MsgTrans;
////////read and send transmission message
for(loop1=0;loop1<8;loop1++)
{
for(loop2=0;loop2<8;loop2++)
{
MsgTrans[loop1][loop2]=99;
}
}
cs5045=0;
_nop_();
_nop_();
cs5045=1;
// TurnLeft=get_bit(_C_111XM,O11_111XM,p);
// TurnRight=get_bit(_C_111XM,O12_111XM,p);
lamp[0]=Sort_Port_Bit(
0,//TurnLeft,//左转
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -