/** * @brief: 得到保存在EEPROM里面的校准值 * @retval: 1,成功获取数据 * 0,获取失败,要重新校准 */ u8 TP_Get_Adjdata(void) { s32 tempfac; tempfac=AT24CXX_ReadOneByte(SAVE_ADDR_BASE+13); //读取标记字,看是否校准过! if(tempfac==0X0A) //触摸屏已经校准过了 { tempfac=AT24CXX_ReadLenByte(SAVE_ADDR_BASE,4); //得到x校准参数 tp_dev.xfac=(float)tempfac/100000000; tempfac=AT24CXX_ReadLenByte(SAVE_ADDR_BASE+4,4); //得到y校准参数 tp_dev.yfac=(float)tempfac/100000000; tp_dev.xoff=AT24CXX_ReadLenByte(SAVE_ADDR_BASE+8,2); //得到x偏移量 tp_dev.yoff=AT24CXX_ReadLenByte(SAVE_ADDR_BASE+10,2); //得到y偏移量 tp_dev.touchtype=AT24CXX_ReadOneByte(SAVE_ADDR_BASE+12);//读取触屏类型标记 if(tp_dev.touchtype) //X,Y方向与屏幕相反 { CMD_RDX=0X90; CMD_RDY=0XD0; } else //X,Y方向与屏幕相同 { CMD_RDX=0XD0; CMD_RDY=0X90; } return 1; } return 0; }
//检查AT24CXX是否正常 //这里用了24XX的最后一个地址(255)来存储标志字. //如果用其他24C系列,这个地址要修改 //返回1:检测失败 //返回0:检测成功 u8 AT24CXX_Check(void) { u8 temp; temp=AT24CXX_ReadOneByte(255);//避免每次开机都写AT24CXX if(temp==0X55)return 0; else//排除第一次初始化的情况 { AT24CXX_WriteOneByte(255,0X55); temp=AT24CXX_ReadOneByte(255); if(temp==0X55)return 0; } return 1; }
uint8_t AT24CXX_Check(void) { uint8_t temp; AT24CXX_ReadOneByte(255, &temp, 1); if(temp==0X55)return 0; else { AT24CXX_WriteOneByte(255,0X55); AT24CXX_ReadOneByte(255, &temp, 1); if(temp==0X55)return 0; } return 1; }
//在AT24CXX里面的指定地址开始读出指定个数的数据 //ReadAddr :开始读出的地址 对24c02为0~255 //pBuffer :数据数组首地址 //NumToRead:要读出数据的个数 void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead) { while(NumToRead) { *pBuffer++=AT24CXX_ReadOneByte(ReadAddr++); NumToRead--; } }
//在AT24CXX里面的指定地址开始读出长度为Len的数据 //该函数用于读出16bit或者32bit的数据. //ReadAddr :开始读出的地址 //返回值 :数据 //Len :要读出数据的长度2,4 u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len) { u8 t; u32 temp=0; for(t=0;t<Len;t++) { temp<<=8; temp+=AT24CXX_ReadOneByte(ReadAddr+Len-t-1); } return temp; }
void initmybox()//初始化自身信息 { mybox.master=0; mybox.start='&'; mybox.myid=AT24CXX_ReadOneByte(0x0010); ///mybox.myid=1; mybox.source=0; mybox.destination=0; mybox.send=0; mybox.relay=0; mybox.message=0; mybox.end='*'; }
static void Rm3100_Initial(void) { u8 i,j; PNI_SPI_Init(); pni_para.Record_Number_Opto_Off = 0; pni_para.record_over_flag = FALSE; pni_para.opto_triggle_number = 0; pni_para.opto_status = OFF; pni_para.reset_input_flag = FALSE; for(i=0;i<2;i++) { for(j=0;j<TOTAL_AXIS;j++) { pni[i].OffSet[j] = 0; pni[i].PreInput[j] = 0; pni[i].InPut[j] = 0; } } pni[0].Mode = AT24CXX_ReadOneByte(EEP_PNI0_MODE); pni[0].Update_Rate = AT24CXX_ReadOneByte(EEP_PNI0_UPDATE_RATE ); for(i=0;i<3;i++) { pni[0].Gian[i] = ((u16)AT24CXX_ReadOneByte(EEP_PNI0_GAIN_X + i*2 + 1)<<8) \ + AT24CXX_ReadOneByte(EEP_PNI0_GAIN_X + i*2); } for(i=0;i<3;i++) { pni[0].Filter[i]= AT24CXX_ReadOneByte(EEP_PNI0_FILTER_X + i); } pni[1].Mode = AT24CXX_ReadOneByte(EEP_PNI1_MODE); pni[1].Update_Rate = AT24CXX_ReadOneByte(EEP_PNI1_UPDATE_RATE ); for(i=0;i<3;i++) { pni[1].Gian[i] = ((u16)AT24CXX_ReadOneByte(EEP_PNI1_GAIN_X + i*2 + 1)<<8) \ + AT24CXX_ReadOneByte(EEP_PNI1_GAIN_X + i*2); } for(i=0;i<3;i++) { pni[1].Filter[i]= AT24CXX_ReadOneByte(EEP_PNI1_FILTER_X + i); } pni_para.Record_Number_Opto_Off = AT24CXX_ReadOneByte(EEP_RECORD_NUMBER_OPTO_OFF); set_pni_config(); pni_para.read_config_flag = TRUE; }
void gonglvyinshu() { u16 i; u32 tempa,tempb; u16 adc_vx,adc_vmax=0,adc_ix,adc_imax=0; u8 phase_zhi; float temp; id_num=AT24CXX_ReadOneByte(0x0010); // key_idset(); for(i=0;i<120;i++) { adc_vx=Get_Adc_Average(ADC_Channel_1,10); // adc_vx=Get_Adc(ADC_Channel_1); if(adc_vx>adc_vmax) adc_vmax=adc_vx; } for(i=0;i<120;i++) { adc_ix=Get_Adc_Average(ADC_CH4,10); if(adc_ix>adc_imax) adc_imax=adc_ix; } temp=(float)adc_vmax*(3.3/4096); dianya_zhi=(u16)(518*temp-679); temp=(float)adc_imax*(3.3/4096); dianliuzhi=(u32)(60*temp-80); adc_vmax=0; adc_imax=0; if(dianliuzhi<7){dianliuzhi=0;gonglvshishu=100;}//滤除杂波,小于7时,说明已经无负载 else{ if(TIM3CH1_CAPTURE_STA&0X80)//完成一次采集 { tempa=TIM3CH1_CAPTURE_STA&0X3F; tempa*=65536; //溢出时间总和 tempa+=TIM3CH1_CAPTURE_VAL; //得到TI1端信号周期时间 tempb=TIM3CH1_CAPTURE_STA&0X3F; tempb*=65536; //溢出时间总和 tempb+=TIM3CH1_CAPTURE_PHA; //得到TI2 TI1上升沿时间差值即相位差时间 if(tempb<=5000) //感性负载正接 { phase_zhi=tempb*360/tempa; gonglvshishu=si[phase_zhi]; L_C_flag=1; } if((10000<=tempb)&&(tempb<=15000)) //感性负载反接 { phase_zhi=((tempb*360)/tempa)-180; gonglvshishu=si[phase_zhi]; L_C_flag=1; } if((5000<tempb)&&(tempb<10000)) //容性负载正接 { /*显示容性功率符号*/ phase_zhi=180-tempb*360/tempa; gonglvshishu=si[phase_zhi]; L_C_flag=0; } if((15000<tempb)&&(tempb<20000)) //容性负载反接 { /*显示容性功率符号*/ phase_zhi=360-tempb*360/tempa; gonglvshishu=si[phase_zhi]; L_C_flag=0; } } wugongkvar=(uint16_t)((1.732*dianliuzhi*dianya_zhi*k*co[phase_zhi])/1000000); wugong_95= (uint16_t)((17.32*dianliuzhi*dianya_zhi*k*31)/1000000);//功率因素在0.95时的,无功功� wugong_computer=(uint16_t)((17.32*dianliuzhi*dianya_zhi*k*co[phase_zhi])/1000000); wugongkvar=wugong_computer; TIM3CH1_CAPTURE_STA=0; //开启下一次捕获 } //无功功率 }
u16 power_computer() { u16 i; u32 tempa=0,tempb=0; u16 adc_vx=0,adc_vmax=0,adc_ix=0,adc_imax=0; u8 phase_zhi=0; float temp=0; id_num=AT24CXX_ReadOneByte(0x0010); key_idset(); for(i=0;i<120;i++) { adc_vx=Get_Adc_Average(ADC_Channel_1,10); // adc_vx=Get_Adc(ADC_Channel_1); if(adc_vx>adc_vmax) adc_vmax=adc_vx; } for(i=0;i<120;i++) { adc_ix=Get_Adc_Average(ADC_CH4,10); if(adc_ix>adc_imax) adc_imax=adc_ix; } temp=(float)adc_vmax*(3.3/4096); dianya_zhi=(u16)(518*temp-660); temp=(float)adc_imax*(3.3/4096); dianliuzhi=(u32)(60*temp-80); adc_vmax=0; adc_imax=0; if(TIM3CH1_CAPTURE_STA&0X80)//完成一次采集 { tempa=TIM3CH1_CAPTURE_STA&0X3F; tempa*=65536; //溢出时间总和 tempa+=TIM3CH1_CAPTURE_VAL; //得到TI1端信号周期时间 tempb=TIM3CH1_CAPTURE_STA&0X3F; tempb*=65536; //溢出时间总和 tempb+=TIM3CH1_CAPTURE_PHA; //得到TI2 TI1上升沿时间差值即相位差时间 if(tempb<=5000) //感性负载正接 { phase_zhi=tempb*360/tempa; gonglvshishu=si[phase_zhi]; } if((10000<=tempb)&&(tempb<=15000)) //感性负载反接 { phase_zhi=((tempb*360)/tempa)-180; gonglvshishu=si[phase_zhi]; } if((5000<tempb)&&(tempb<10000)) //容性负载正接 { /*显示容性功率符号*/ phase_zhi=180-tempb*360/tempa; gonglvshishu=si[phase_zhi]; } if((15000<tempb)&&(tempb<20000)) //容性负载反接 { /*显示容性功率符号*/ phase_zhi=360-tempb*360/tempa; gonglvshishu=si[phase_zhi]; } // wugongkvar=(uint16_t)(1.732*dianliuzhi*dianya_zhi*k*co[phase_zhi]); TIM3CH1_CAPTURE_STA=0; //开启下一次捕获 return gonglvshishu; } return gonglvshishu; //无功功率 }