⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 pedometer.c

📁 一个Gesssensor 的driver
💻 C
📖 第 1 页 / 共 3 页
字号:
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_BODY_WEIGHT_X, PEDOMETER_NUMBER_BODY_WEIGHT_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayBodyHeight(unsigned long BodyHeight)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(BodyHeight,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_BODY_HEIGHT_X, PEDOMETER_NUMBER_BODY_HEIGHT_Y, PEDOMETER_NUMBER_BODY_HEIGHT_X+50, PEDOMETER_NUMBER_BODY_HEIGHT_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_BODY_HEIGHT_X, PEDOMETER_NUMBER_BODY_HEIGHT_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayStepCounter(unsigned long StepCounter)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(StepCounter,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_STEP_X, PEDOMETER_NUMBER_STEP_Y, PEDOMETER_NUMBER_STEP_X+50, PEDOMETER_NUMBER_STEP_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_STEP_X, PEDOMETER_NUMBER_STEP_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    

PEDOMETER_APP_CODE
void PDisplayDistance(unsigned long Distance)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(Distance,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_DISTANCE_X, PEDOMETER_NUMBER_DISTANCE_Y, PEDOMETER_NUMBER_DISTANCE_X+50, PEDOMETER_NUMBER_DISTANCE_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_DISTANCE_X, PEDOMETER_NUMBER_DISTANCE_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayTotalConsume(unsigned long TotalConsume)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(TotalConsume,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_CONSUME_X, PEDOMETER_NUMBER_CONSUME_Y, PEDOMETER_NUMBER_CONSUME_X+50, PEDOMETER_NUMBER_CONSUME_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_CONSUME_X, PEDOMETER_NUMBER_CONSUME_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayTimeCounter(unsigned long TimeCounter)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(TimeCounter,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_TIMER_X, PEDOMETER_NUMBER_TIMER_Y, PEDOMETER_NUMBER_TIMER_X+50, PEDOMETER_NUMBER_TIMER_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_TIMER_X, PEDOMETER_NUMBER_TIMER_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayConsumeRate(unsigned long ConsumeRate)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(ConsumeRate,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_CONSUMEPHOUR_X, PEDOMETER_NUMBER_CONSUMEPHOUR_Y, PEDOMETER_NUMBER_CONSUMEPHOUR_X+50, PEDOMETER_NUMBER_CONSUMEPHOUR_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_CONSUMEPHOUR_X, PEDOMETER_NUMBER_CONSUMEPHOUR_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayStepFreqency(unsigned long StepFreqency)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(StepFreqency,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_STEPPMINUTE_X, PEDOMETER_NUMBER_STEPPMINUTE_Y, PEDOMETER_NUMBER_STEPPMINUTE_X+50, PEDOMETER_NUMBER_STEPPMINUTE_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_STEPPMINUTE_X, PEDOMETER_NUMBER_STEPPMINUTE_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
#else //////////////////////////////////////////////////////////////////////////
PEDOMETER_APP_CODE
void PDisplayDistance(unsigned long Distance)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
    unsigned int i;
	
	color_tmp = LCD_GetColor();
	DIV100Conver16To10Display(Distance,tmpbuf);
	for(i=0;i<7;i++)
		tmpbuf[i]=tmpbuf[i]-'0';
	tmpbuf[5]=10;//显示'.'
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_DISTANCE_X, PEDOMETER_NUMBER_DISTANCE_Y, PEDOMETER_NUMBER_DISTANCE_X+PEDOMETER_NUMBER_DISTANCE_XSIZE, PEDOMETER_NUMBER_DISTANCE_Y+PEDOMETER_NUMBER_DISTANCE_YSIZE);
    for(i=0;i<7;i++)
    {
    	DisplayPicture(PEDOMETER_NUMBER_DISTANCE_X+(i*(BIGNUMBER_XSIZE+2)), PEDOMETER_NUMBER_DISTANCE_Y, BIGNUMBER_XSIZE, BIGNUMBER_YSIZE, NFA_BIGNUMBER_BASS+tmpbuf[i]*BIGNUMBER_XSIZE*BIGNUMBER_YSIZE*2);
    	//                                                    每个数值的宽度+2                                                                                       数字图片的地址  
    }
	LCD_SetColor(color_tmp);
}    

void PDisplayTotalConsume(unsigned long TotalConsume)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	DIV100Conver16To10Display(TotalConsume,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_CONSUME_X, PEDOMETER_NUMBER_CONSUME_Y, PEDOMETER_NUMBER_CONSUME_X+8*5, PEDOMETER_NUMBER_CONSUME_Y+10);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_CONSUME_X, PEDOMETER_NUMBER_CONSUME_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    

PEDOMETER_APP_CODE
void PDisplayStepCounter(unsigned long StepCounter)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(StepCounter,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_STEP_X, PEDOMETER_NUMBER_STEP_Y, PEDOMETER_NUMBER_STEP_X+6*5, PEDOMETER_NUMBER_STEP_Y+10);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_STEP_X, PEDOMETER_NUMBER_STEP_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    

PEDOMETER_APP_CODE
void PDisplayTime(unsigned long TimeCounter)
{	
    unsigned int color_tmp;
    unsigned int Hour;
    unsigned int Minute;
    unsigned int Second;
    unsigned int i;
    unsigned int tmpbuf[8];
	
	Second=TimeCounter%60;
	Minute=TimeCounter/60;
	Hour=Minute/60;
	Minute=Minute-Hour*60;
	tmpbuf[0]=Hour/10;
	tmpbuf[1]=Hour%10;
	tmpbuf[2]=11;//显示':'
	tmpbuf[3]=Minute/10;
	tmpbuf[4]=Minute%10;
	tmpbuf[5]=10;//显示'.'
	tmpbuf[6]=Second/10;
	tmpbuf[7]=Second%10;
	color_tmp = LCD_GetColor();
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_TIMER_X, PEDOMETER_TIMER_Y, PEDOMETER_TIMER_X+PEDOMETER_TIMER_XSIZE-1, PEDOMETER_TIMER_Y+PEDOMETER_TIMER_YSIZE-1);
    for(i=0;i<8;i++)
    {
    	DisplayPicture(PEDOMETER_TIMER_X+(i*(BIGNUMBER_XSIZE+2)), PEDOMETER_TIMER_Y, BIGNUMBER_XSIZE, BIGNUMBER_YSIZE, NFA_BIGNUMBER_BASS+tmpbuf[i]*BIGNUMBER_XSIZE*BIGNUMBER_YSIZE*2);
    	//                                                    每个数值的宽度+2                                                                                       数字图片的地址  
    }
	LCD_SetColor(color_tmp);
}    
#endif 
//=================================================================
//							G sensor Read:  MXC62020
//							Addr: 0x20
//							Detail : BGST ---- Initial the Temperature.
//									Acce ---- 
//	StepLoop:  StepCount
//	Temperature Read: Music menu.
//=================================================================

PEDOMETER_APP_CODE

unsigned int  GsensorPowerOnDown(unsigned int poweronoff)
{
    unsigned int  status,i,j;
    status=0;
	PedoMeterIicInit();
    //write_mem(IC_DATA_CMD,GSENSOR_I2C_ADDRESS);
    write_mem(IC_DATA_CMD,0x00);//写
    
    if(poweronoff==GS_POWERON)
	    write_mem(IC_DATA_CMD,0x00);// POWER  On
	else
	    write_mem(IC_DATA_CMD,0x01);// POWER  Down
//////////////////////////////////////////////////////////        
        j = 0;
        do {
            if (++ j == 0xfff0)
            {
                status = 1;//Error
                break;
            }
        } while (read_XDATA(IC_STATUS) & TFNF == 0);
//////////////////////////////////////////////////////////        
	return status;   
}

PEDOMETER_APP_CODE
void GetAcceleration(void)
{
    unsigned int status,i;
    unsigned char temp,test[5];
    unsigned int j;
    test[0]=0;
    test[1]=0;
    test[2]=0;
    test[3]=0;
    test[4]=0;
    PedoMeterIicInit();//选中I2C器件,其地址为0x20,开始写操作
    write_mem(IC_DATA_CMD,0x01);//01准备从读X轴高4位开始读
     for ( j=0; j < 4; j ++) {
    	write_XDATA(IC_DATA_CMD,0x100);
        temp = 0;
        do {
            if (++ temp == 0xfff0)
                break;
        } while ((read_XDATA(IC_STATUS) & RFNE) == 0);
        test[j] = read_XDATA(IC_DATA_CMD);
    }
    write_mem(IC_ENABLE,    0x0000);        //IIC Transfer Disable

	//MXC6202DataOut.Bytes.InternalReg=test[0];
	MXC6202DataOut.Bytes.XaccMSB=test[0];
	MXC6202DataOut.Bytes.XaccLSB=test[1];
	MXC6202DataOut.Bytes.YaccMSB=test[2];
	MXC6202DataOut.Bytes.YaccLSB=test[3];
    Delay1Ms(2);

}
/*
********************************************************************************
*  Copyright (C),2004-2007, Fuzhou Rockchip Electronics Co.,Ltd.
*  Function name :  CodecIicInit()
*  Author:          ZHengYongzhi
*  Description:     Codec通讯初始化,IIC配置
*                  
*  Input:   
*  Output:  
*  Return:  
*  Calls:   
*
*  History:     <author>         <time>         <version>       
*             ZhengYongzhi     2006/01/01         Ver1.0
*     desc: ORG
*    --------------------------------------------------------------------
*             ZhengYongzhi      2007-5-7          Ver1.9
*     desc: 修改IIC通讯的时序,解决因为IIC时序配置不正确时可能引起的Codec设置错误或不起作用的问题
********************************************************************************
*/
PEDOMETER_APP_CODE
void PedoMeterIicInit(void)
{
//    write_mem(GPIO_PCON1,read_mem(GPIO_PCON1) & 0xffC3);//p1.1 p1.2 input
    write_mem(GPIO_PCON1,read_mem(GPIO_PCON1) | 0x003C);//p1.1 p1.2 I2C_SDA I2C_SCL
    write_mem(IC_ENABLE,    0x0000);        //IIC Transfer Disable
    bitset_mem(I2C_EXT,0); 					//外部的
    write_mem(IC_SAR,0x55);             /* IIC Slave address */
    write_mem(IC_TAR,GSENSOR_I2C_ADDRESS);        //6205  IIC Address    
    write_mem(IC_CON,0x63);             /* Master Mode */
    write_mem(IC_SS_HCNT,0x88);
    write_mem(IC_SS_LCNT,0x66);
    write_mem(IC_ENABLE,    0x0001);        //IIC Transfer Enable
    
    delay_nops(1600);
}

//=================================================================
//  1 Order Passive LPF
// LPF Formula
//Y(N)=(T*X(N)+RL*CL*Y(N-1)) / (T+RL*CL)
// 4Hz LPF RC=0.04
// 8Hz LPF RC=0.02
//  2PI * f * RC=1
// Sample Rate  f=16 Hz, RC = 0.01  20Hz , 0.008;
// f=32Hz, RC= 0.008
//=================================================================
PEDOMETER_APP_CODE
unsigned long AccLPF(unsigned long iX0,unsigned long iY1)
{
	iY1*=LPF_RC;					//RC = 0x000003;
	iY1+=((iX0*SAMPLE_TIME)+(LPF_RC+SAMPLE_TIME)/2);
	iY1/=(LPF_RC+SAMPLE_TIME);
	return iY1;
}

//=================================================================
//  1 Order Passive HPF
// HPF Formula
// Y(N)=RH*CH(X(N)-X(N-1)+Y(N-1))/(T+RH*CH)
// 1Hz HPF RC=0.16
// //  2PI * f * RC=1
// Sample Rate  f=20Hz, RC = 0.008
//      f=10Hz  RC =0.016
//=================================================================
PEDOMETER_APP_CODE
unsigned long AccHPF(unsigned long iX0,unsigned long iX1, unsigned long iY1)
{
	iY1+=(iX0-iX1);
	iY1*=HPF_RC;
	iY1+=0x008000+(HPF_RC+SAMPLE_TIME)/2;					//RC = 0x000003;
	iY1/=(HPF_RC+SAMPLE_TIME);							//	0x000004;		T+RC   T=Timer*100,  
	return iY1;
}
//=================================================================
// 
//	StepLoop:  StepCount
//	Temperature Read: display at Music menu recommended.
//=================================================================
PEDOMETER_APP_CODE
void StepLoops(void)
{
bool 	bStatus_AXIS;
unsigned char	iAccXData, iAccYData,iG_CountPEAK;
unsigned char  	iAcce_Sample;
unsigned char	iAcce1_LPFcount0,iAcce0_LPFcount0,iAcce1_HPFcount0,iAcce0_HPFcount0,iAcceFilter0;
	//INT iSportMode=0;
	GetAcceleration();		// Read the data first
	iAccXData=MXC6202DataOut.Bytes.XaccMSB;
	iAccXData=MXC6202DataOut.Bytes.XaccLSB+(iAccXData<<8);
	iAccYData=MXC6202DataOut.Bytes.YaccMSB;
	iAccYData=MXC6202DataOut.Bytes.YaccLSB+(iAccYData<<8);
	
	if (iAccYData>0X0900) bStatus_AXIS=1;//2304
	if (iAccYData<0X0700) bStatus_AXIS=1;//1792
	if (iAccXData>0X0900) bStatus_AXIS=0;
	if (iAccXData<0X0700) bStatus_AXIS=0;
    if(bStatus_AXIS)
		iAcce_Sample=iAccYData;
	else
		iAcce_Sample=iAccXData;
		
	iAcce_Sample*=0x10;
	//BodyHeight=stc_iAcce1_LPFcount1;//Test Show 
    iAcce1_LPFcount0=AccLPF(iAcce_Sample,stc_iAcce1_LPFcount1);
    iAcce0_LPFcount0=AccLPF(iAcce1_LPFcount0,stc_iAcce0_LPFcount1);
    iAcce1_HPFcount0=AccHPF(iAcce0_LPFcount0,stc_iAcce0_LPFcount1,stc_iAcce1_HPFcount1);
    iAcce0_HPFcount0=AccHPF(iAcce1_HPFcount0,stc_iAcce1_HPFcount1,stc_iAcce0_HPFcount1);   
	iAcceFilter0=iAcce0_HPFcount0/0x10;
	//BodyWeight=iAcceFilter0;//Test Show
		
    if (iAcceFilter0>0x000800 && iAcceFilter0>stc_iG_CountUP) 
		stc_iG_CountUP=iAcceFilter0;
    if (iAcceFilter0<0x000800 && iAcceFilter0<stc_iG_CountDOWN) 
		stc_iG_CountDOWN=iAcceFilter0;
    if (iAcceFilter0>=0x000800 && stc_iAcceFilter1<0x000800)
    {
        stc_iG_CountDOWN=0x000800-stc_iG_CountDOWN;
        iG_CountPEAK=stc_iG_CountDOWN;
        stc_iG_CountDOWN=0x000800;
       if (iG_CountPEAK>SENS_PEDO) 
	   	stc_bStatUp=1;
	   else
	   	stc_bStatUp=0;
    }
   if (iAcceFilter0<=0x000800 && stc_iAcceFilter1>0x000800)
    {
        stc_iG_CountUP=stc_iG_CountUP-0x000800;
        iG_CountPEAK=stc_iG_CountUP;
        stc_iG_CountUP=0x000800;
        if (iG_CountPEAK>SENS_PEDO) 
			stc_bStatDown=1;
		else
			stc_bStatDown=0;
    }
      //  StepCounter++;//test
   if ( stc_bStatUp && stc_bStatDown )
    {
        StepCounter++;
	//	g_wMeter+= g_iStepLength;	
        stc_bStatUp=0;stc_bStatDown=0;
//
//        if (iG_CountPEAK<SENS_WALK)  		
//			iSportMode=0X00;
//        if (iG_CountPEAK>SENS_WALK && iG_CountPEAK<SENS_JOGG) 	
//			iSportMode=0X01;
 //     if (iG_CountPEAK>SENS_JOGG)  							
//	  		iSportMode=0X02;

    //   if (iSportMode==0X00) 	
	//   	stc_iStepDistance += STRI_WALK;
    //   if (iSportMode == 0X01) 
	//   	stc_iStepDistance += STRI_JOGG;
     //  if (iSportMode == 0X02) 
	 //  	stc_iStepDistance += STRI_RUNN;
    }
    stc_iAcce0_LPFcount1=iAcce0_LPFcount0;
    stc_iAcce1_LPFcount1=iAcce1_LPFcount0;
    stc_iAcce0_HPFcount1=iAcce0_HPFcount0;
    stc_iAcce1_HPFcount1=iAcce1_HPFcount0;
    stc_iAcceFilter1=iAcceFilter0;				
}

//***************************************************************************************************
/*
$Log: Pedometer.c,v $

*
*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -