📄 disp.c
字号:
break;
case 3:{//baudrate = 9600
CKCON |= 0x00; //1/12 Frequency
TH1 = 0xa0;
}
break;
case 4:{//baudrate = 14400
CKCON |= 0x00; //1/12 Frequency
TH1 = 0xc0;
}
break;
case 5:{//baudrate = 19200
CKCON |= 0x00; //1/12 Frequency
TH1 = 0xd0;
}
break;
case 6:{//baudrate = 38400
CKCON |= 0x00; //1/12 Frequency
TH1 = 0xe8;
}
break;
/* case 7:{//baudrate = 57600
CKCON |= 0x01; //1/4 Frequency
TH1 = 0xd0;
}
break; */
default:{//baudrate = 9600,默认值
CKCON = 0x00; //1/12 Frequency
TH1 = 0xa0;
}
break;
}
if(baud_code > 2){//07-07-09 12分频
freq_collect_times = ENERGY_COLLECT_TIME_12FRE;
}
else{ //48分频
freq_collect_times = ENERGY_COLLECT_TIME_48FRE;
}
}
void ram_init()
{
Ua.high_byte8 = 0; Ua.low_byte8 = 0; Ia.high_byte8 = 0; Ia.low_byte8 = 0; Pa.high_byte8 = 0; Pa.middle_byte8 = 0; Pa.low_byte8 = 0; Qa.high_byte8 = 0; Qa.middle_byte8 = 0; Qa.low_byte8 = 0; Pfa.high_byte8 = 0; Pfa.low_byte8 = 0;
Ub.high_byte8 = 0; Ub.low_byte8 = 0; Ib.high_byte8 = 0; Ib.low_byte8 = 0; Pb.high_byte8 = 0; Pb.middle_byte8 = 0; Pb.low_byte8 = 0; Qb.high_byte8 = 0; Qb.middle_byte8 = 0; Qb.low_byte8 = 0; Pfb.high_byte8 = 0; Pfb.low_byte8 = 0;
Uc.high_byte8 = 0; Uc.low_byte8 = 0; Ic.high_byte8 = 0; Ic.low_byte8 = 0; Pc.high_byte8 = 0; Pc.middle_byte8 = 0; Pc.low_byte8 = 0; Qc.high_byte8 = 0; Qc.middle_byte8 = 0; Qc.low_byte8 = 0; Pfc.high_byte8 = 0; Pfc.low_byte8 = 0;
F.high_byte8 = 0; F.low_byte8 = 0; Uab.high_byte8 = 0; Uab.low_byte8 = 0; Ubc.high_byte8 = 0; Ubc.low_byte8 = 0; Uca.high_byte8 = 0; Uca.low_byte8 =0;
Psum.high_byte8 = 0; Psum.middle_byte8 = 0; Psum.low_byte8 = 0; Qsum.high_byte8 = 0; Qsum.middle_byte8 = 0; Qsum.low_byte8 = 0; Pfsum.high_byte8 = 0; Pfsum.low_byte8 = 0;
psd = 0; task_count_number = 0; watchdog_times = 0; negative_sign = 0; Chk_time = 0;
original_high_byte = 0; original_middle_byte = 0;original_low_byte = 0; delay_num = 0;
new_recombine_high = 0;new_recombine_low = 0; modbus_com.sendNumber = 0; modbus_com.recvNumber = 0; modbus_com.sendPosi = 0;
psd = 0; task_count_number = 0; watchdog_times = 0; energy_collect_count = 0; task_delay_num = 0;
#ifdef HAVE_ENERGY_COLLECT
#endif
}
void Init_Device()
{
PCA0MD &= 0xbf;//Close watch dog
Port_IO_Init();
Oscillator_Init();
get_cpt_from_flash();//07-07-08
baudrate_select();//07-07-08
Timer_Init();
#ifdef HAVE_ENERGY_COLLECT
Int0_Init();
reset_type_identify();
#endif
init_7022B();
init_disp_parameter();
ram_init();
}
/*
***********************************************************************************************************
**函数原型 : spi_delay(uchar times)
**参数说明 : times -->> 要延时的nop数
:
**返回值 :
**说 明 : 本函数用于SPI传输数据的过程中,延时times个nop的时间
************************************************************************************************************/
void spi_delay(uchar times){
uchar k = 0;
uchar k1;
k1 = times;
for(k = 0;k < k1;k++){
_nop_();
}
}
/*
***********************************************************************************************************
**函数原型 : crcData(uchar *array, uint arrayLen)
**参数说明 : *array -->> 要校验的数据
: arrayLen -->> 要校验的数据的长度
**返回值 : 对应校验数据的CRC校验码
**说 明 : 本函数用于对下行数据进行CRC校验
************************************************************************************************************/
uint crcData(uchar *array, uint arrayLen)
{//CRC verify
uchar CRCHi = 0xFF; // CRC high byte initital
uchar CRCLo = 0xFF; //CRC low byte initital
unsigned long dataIndex; // CRC index in loop
while(arrayLen--){
dataIndex = CRCHi^ * array++; //Calculation CRC
CRCHi = CRCLo^auchCRCHi[dataIndex];
CRCLo = auchCRCLo[dataIndex];
}
return(CRCHi << 8 | CRCLo);
}
/*
***********************************************************************************************************
**函数原型 : beginSend()
**参数说明 :
:
**返回值 :
**说 明 : 本函数用于modbus通信中485串口发送
************************************************************************************************************/
void beginSend()
{//Begin send data
modbus_com.sendPosi = 0;
B485_READY_TO_SEND();//P4为485控制线,置1,准备发送
delay(2);//为485转232做时间准备
TI0 = 0;//开始发送
SBUF0 = modbus_com.send_dataBuf[modbus_com.sendPosi++];
}
/*
***********************************************************************************************************
**函数原型 : getRegisterVal(uint addr)reentrant
**参数说明 : addr -->> 上传数据的首地址
:
**返回值 : 对应地址的具体数据
**说 明 : 本函数用于遥测,根据下行命令的地址来查询对应的数据
************************************************************************************************************/
uint getRegisterVal(uint addr) //Get register value,0 means OK
{
uint tempAddr;
uint result = 0;
#ifdef HAVE_ENERGY_COLLECT
tempAddr = addr & 0xfff;
switch(tempAddr & 0xff)
{
#ifdef ADJUST_POWER
case 0x06: result = COMBINE_2UCHAR_TO_16UINT(0,Pa.high_byte8);
break;
case 0x08: result = COMBINE_2UCHAR_TO_16UINT(Pa.middle_byte8,Pa.low_byte8);
break;
case 0x16: result = COMBINE_2UCHAR_TO_16UINT(0,Pb.high_byte8);
break;
case 0x18: result = COMBINE_2UCHAR_TO_16UINT(Pb.middle_byte8,Pb.low_byte8);
break;
case 0x26: result = COMBINE_2UCHAR_TO_16UINT(0,Pc.high_byte8);
break;
case 0x28: result = COMBINE_2UCHAR_TO_16UINT(Pc.middle_byte8,Pc.low_byte8);
break;
case 0x34: result = (0,Psum.high_byte8);
break;
case 0x36: result = COMBINE_2UCHAR_TO_16UINT(Psum.middle_byte8,Psum.low_byte8);
break;
case 0x38: result = COMBINE_2UCHAR_TO_16UINT(F.high_byte8,F.low_byte8);
break;
#else //和后台传输时,传只16位舍弃精度。所以后台通信系数P,Q为1*(3200/EC),3P,3Q为4*(3200/EC)
case 0x06: result = COMBINE_2UCHAR_TO_16UINT(0,0);
break;
case 0x08: result = COMBINE_2UCHAR_TO_16UINT(Pa.high_byte8,Pa.middle_byte8);
break;
case 0x16: result = COMBINE_2UCHAR_TO_16UINT(0,0);
break;
case 0x18: result = COMBINE_2UCHAR_TO_16UINT(Pb.high_byte8,Pb.middle_byte8);
break;
case 0x26: result = COMBINE_2UCHAR_TO_16UINT(0,0);
break;
case 0x28: result = COMBINE_2UCHAR_TO_16UINT(Pc.high_byte8,Pc.middle_byte8);
break;
case 0x34: result = COMBINE_2UCHAR_TO_16UINT(0,0);
break;
case 0x36: result = COMBINE_2UCHAR_TO_16UINT(F.high_byte8,F.low_byte8);
break;
case 0x38: result = COMBINE_2UCHAR_TO_16UINT(Psum.high_byte8,Psum.middle_byte8);
break;
#endif
case 0x00: result = COMBINE_2UCHAR_TO_16UINT(Ua.high_byte8,Ua.low_byte8); /*Basic variable parameter*/
break;
case 0x02: result = COMBINE_2UCHAR_TO_16UINT(Uca.high_byte8,Uca.low_byte8);//0;
break;
case 0x04: result = COMBINE_2UCHAR_TO_16UINT(Ia.high_byte8,Ia.low_byte8);
break;
case 0x0a: result = COMBINE_2UCHAR_TO_16UINT(Pfa.high_byte8,Pfa.low_byte8);
break;
case 0x0c: result = COMBINE_2UCHAR_TO_16UINT(Qa.middle_byte8, Qa.low_byte8);
break;
case 0x0e: result = 0;
break;
case 0x10: result = COMBINE_2UCHAR_TO_16UINT(Ub.high_byte8,Ub.low_byte8);
break;
case 0x12: result = COMBINE_2UCHAR_TO_16UINT(Uab.high_byte8,Uab.low_byte8);//0;
break;
case 0x14: result = COMBINE_2UCHAR_TO_16UINT(Ib.high_byte8,Ib.low_byte8);
break;
case 0x1a: result = COMBINE_2UCHAR_TO_16UINT(Pfb.high_byte8,Pfb.low_byte8);
break;
case 0x1e: result = 0;
break;
case 0x20: result = COMBINE_2UCHAR_TO_16UINT(Uc.high_byte8,Uc.low_byte8);
break;
case 0x22: result = COMBINE_2UCHAR_TO_16UINT(Ubc.high_byte8,Ubc.low_byte8);//0;
break;
case 0x24: result = COMBINE_2UCHAR_TO_16UINT(Ic.high_byte8,Ic.low_byte8);
break;
case 0x2a: result = COMBINE_2UCHAR_TO_16UINT(Pfc.high_byte8,Pfc.low_byte8);
break;
case 0x2c: result = COMBINE_2UCHAR_TO_16UINT(Qc.middle_byte8,Qc.low_byte8);
break;
case 0x2e: result = 0;
break;
case 0x30: result = 0;
break;
case 0x32: result = 0;
break;
case 0x3a: result = COMBINE_2UCHAR_TO_16UINT(Pfsum.high_byte8,Pfsum.low_byte8);
break;
case 0x3c: result = COMBINE_2UCHAR_TO_16UINT(Qsum.middle_byte8,Qsum.low_byte8);
break;
case 0x3e: result = 0;
break;
/*Power parameter*/
case 0x42: result = (uint)TWH;
break;
case 0x44: result = (uint)(TWH >> 16);
break;
case 0x46: result = (uint)TQH;
break;
case 0x48: result = (uint)(TQH >> 16);
break;
case 0x4a: result = (uint)Wha;
break;
case 0x4c: result = (uint)(Wha >> 16);
break;
case 0x4e: result = (uint)Whb;
break;
case 0x50: result = (uint)(Whb >> 16);
break;
case 0x52: result = (uint)Whc;
break;
case 0x54: result = (uint)(Whc >> 16);
break;
case 0x56: result = (uint)Qha;
break;
case 0x58: result = (uint)(Qha >> 16);
break;
case 0x5a: result = (uint)Qhb;
break;
case 0x5c: result = (uint)(Qhb >> 16);
break;
case 0x5e: result = (uint)Qhc;
break;
case 0x60: result = (uint)(Qhc >> 16);
break;
/****************************************add by zhugaoyun*******************/
case 0x62: result = (uint)ZWH;
break;
case 0x64: result = (uint)(ZWH >> 16);
break;
case 0x66: result = (uint)ZQH;
break;
case 0x68: result = (uint)(ZQH >> 16);
break;
case 0x6a: result = (uint)Wza;
break;
case 0x6c: result = (uint)(Wza >> 16);
break;
case 0x6e: result = (uint)Wzb;
break;
case 0x70: result = (uint)(Wzb >> 16);
break;
case 0x72: result = (uint)Wzc;
break;
case 0x74: result = (uint)(Wzc >> 16);
break;
case 0x76: result = (uint)Qza;
break;
case 0x78: result = (uint)(Qza >> 16);
break;
case 0x7a: result = (uint)Qzb;
break;
case 0x7c: result = (uint)(Qzb >> 16);
break;
case 0x7e: result = (uint)Qzc;
break;
case 0x80: result = (uint)(Qzc >> 16);
break;
case 0x82: result = (uint)FWH;
break;
case 0x84: result = (uint)(FWH >> 16);
break;
case 0x86: result = (uint)FQH;
break;
case 0x88: result = (uint)(FQH >> 16);
break;
case 0x8a: result = (uint)Wfa;
break;
case 0x8c: result = (uint)(Wfa >> 16);
break;
case 0x8e: result = (uint)Wfb;
break;
case 0x90: result = (uint)(Wfb >> 16);
break;
case 0x92: result = (uint)Wfc;
break;
case 0x94: result = (uint)(Wfc >> 16);
break;
case 0x96: result = (uint)Qfa;
break;
case 0x98: result = (uint)(Qfa >> 16);
break;
case 0x9a: result = (uint)Qfb;
break;
case 0x9c: result = (uint)(Qfb >> 16);
break;
case 0x9e: result = (uint)Qfc;
break;
case 0xa0: result = (uint)(Qfc >> 16);
break;
/**************************************** end *******************/
default: result = 0;
break;
}
return result;
#else
tempAddr = addr&0xfff;
switch(tempAddr&0xff)
{
case 0x00: result = COMBINE_2UCHAR_TO_16UINT(Ua.high_byte8,Ua.low_byte8); /*Basic variable parameter*/
break;
case 0x02: result = COMBINE_2UCHAR_TO_16UINT(Uca.high_byte8,Uca.low_byte8);//0;
break;
case 0x04: result = COMBINE_2UCHAR_TO_16UINT(Ia.high_byte8,Ia.low_byte8);
break;
case 0x06: result = 0;
break;
case 0x08: result = COMBINE_2UCHAR_TO_16UINT(Pa.high_byte8,Pa.low_byte8);
break;
case 0x0a: result = COMBINE_2UCHAR_TO_16UINT(Pfa.high_byte8,Pfa.low_byte8);
break;
case 0x0c: result = COMBINE_2UCHAR_TO_16UINT(Qa.high_byte8,Qa.low_byte8);
break;
case 0x0e: result = 0;
break;
case 0x10: result = COMBINE_2UCHAR_TO_16UINT(Ub.high_byte8,Ub.low_byte8);
break;
case 0x12: result = COMBINE_2UCHAR_TO_16UINT(Uab.high_byte8,Uab.low_byte8);//0;
break;
case 0x14: result = COMBINE_2UCHAR_TO_16UINT(Ib.high_byte8,Ib.low_byte8);
break;
case 0x16: result = 0;
break;
case 0x18: result = COMBINE_2UCHAR_TO_16UINT(Pb.high_byte8,Pb.low_byte8);
break;
case 0x1a: result = COMBINE_2UCHAR_TO_16UINT(Pfb.high_byte8,Pfb.low_byte8);
break;
case 0x1c: result = COMBINE_2UCHAR_TO_16UINT(Qb.high_byte8,Qb.low_byte8);
break;
case 0x1e: result = 0;
break;
case 0x20: result = COMBINE_2UCHAR_TO_16UINT(Uc.high_byte8,Uc.low_byte8);
break;
case 0x22: result = COMBINE_2UCHAR_TO_16UINT(Ubc.high_byte8,Ubc.low_byte8);//0;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -