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

📄 pedometerddd.c

📁 一个Gesssensor 的driver
💻 C
📖 第 1 页 / 共 3 页
字号:
    unsigned long score_tmp;
//------------------------------------------------------------------------------
//  以下为界面相关的初始化(测试用的简单)
//------------------------------------------------------------------------------
    color_tmp = LCD_GetColor();
    LCD_SetColor(0xFFFF);
#ifndef TEST_PEDOMETER_UI
    DisplayPicture(0, 0, PEDOMETER_BACK_XSIZE, PEDOMETER_BACK_YSIZE, NFA_PEDOMETER_BACK);
    DisplayPicture(PLAY_BATT_X, PLAY_BATT_Y, PLAY_BATT_XSIZE, PLAY_BATT_YSIZE, NFA_PLAY_BATT + (unsigned long)(PLAY_BATT_XSIZE*PLAY_BATT_YSIZE*2*(BatteryLevel)));
#endif 	

#ifdef TEST_PEDOMETER_UI
    LCD_NFDispStringAt(PEDOMETER_TEXT_BODY_WEIGHT_X,PEDOMETER_TEXT_BODY_WEIGHT_Y, "WEIGHT:");   
    LCD_NFDispStringAt(PEDOMETER_TEXT_BODY_HEIGHT_X,PEDOMETER_TEXT_BODY_HEIGHT_Y,  "HEIGHT:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_STEP_X,PEDOMETER_TEXT_STEP_Y,  "STEP:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_XNUMBER_X,PEDOMETER_TEXT_XNUMBER_Y,  "X:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_YNUMBER_X,PEDOMETER_TEXT_YNUMBER_Y,  "Y:");

    LCD_NFDispStringAt(PEDOMETER_TEXT_DISTANCE_X,PEDOMETER_TEXT_DISTANCE_Y,  "DISTANCE:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_CONSUME_X,PEDOMETER_TEXT_CONSUME_Y,  "CONSUME:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_TIMER_X,PEDOMETER_TEXT_TIMER_Y,  "TIMER:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_CONSUMEPHOUR_X,PEDOMETER_TEXT_CONSUMEPHOUR_Y,  "CONSUME/H:");
    LCD_NFDispStringAt(PEDOMETER_TEXT_STEPPMINUTE_X,PEDOMETER_TEXT_STEPPMINUTE_Y,  "STEPF/M:");
#endif 	
	GetAcceleration();
	Xnumber=0;
	Ynumber=0;
	BodyWeight=60;
	BodyHeight=170;
	StepCounter=0;
	TotalConsume=0;
	Distance=0;
	TimeCounter=0;
	TimeInterCounter=0;
	ConsumeRate=0;
	StepFreqency=0;
	TimeCounter=TimeInterCounter/20;
///////////////////////////////////////////////
	Xnumber=MXC6202DataOut.Bytes.XaccMSB;
	Xnumber=MXC6202DataOut.Bytes.XaccLSB+(Xnumber<<8);
	Ynumber=MXC6202DataOut.Bytes.YaccMSB;
	Ynumber=MXC6202DataOut.Bytes.YaccLSB+(Ynumber<<8);
#ifdef TEST_PEDOMETER_UI
	PDisplayBodyWeight(BodyWeight);
	PDisplayBodyHeight(BodyHeight);
	PDisplayStepCounter(StepCounter);
	PDisplayTotalConsume(TotalConsume);
	PDisplayDistance(Distance);
	PDisplayTimeCounter(TimeCounter);
	PDisplayConsumeRate(ConsumeRate);
	PDisplayStepFreqency(StepFreqency);
	PDisplayXnumber(Xnumber);
	PDisplayYnumber(Ynumber);
	PDisplayPauseRun(PEDOMETER_DISP_PAUSE);
#else  	
	PDisplayTime(TimeCounter);
	PDisplayStepCounter(StepCounter);
	PDisplayTotalConsume(TotalConsume);
	PDisplayDistance(Distance);
#endif 	

}



PEDOMETER_APP_CODE
void PedometerSetting(void)
{
    unsigned int color_tmp;
    unsigned int tmpbuf[4];
    
    if(KeyFlag.bc.bKeyPressed == 0)
        return;
    KeyFlag.bc.bKeyPressed = 0;
    
    if (SystemInfo.bc.bHoldOn) {
        return;
    }
        
    switch(KeyVal){
        case KEY_VAL_PLAY_SHORT_UP:
            if(PedometerState == PEDOMETER_RUN){
                PedometerState = PEDOMETER_PAUSE;
                PedometerFreqDown();
                PedometerTimerStop(PEDOMETER_TMR_CHANNEL);
///////////////////////////////////////////////
#ifdef TEST_PEDOMETER_UI
				PDisplayPauseRun(PEDOMETER_DISP_PAUSE);
#endif 	
///////////////////////////////////////////////
            }else if(PedometerState == PEDOMETER_STOP){
                PedometerState = PEDOMETER_RUN;
                PedometerFreqUp();
                PedometerDispInit();
///////////////////////////////////////////////
#ifdef TEST_PEDOMETER_UI
				PDisplayPauseRun(PEDOMETER_DISP_RUN);
#endif 	
///////////////////////////////////////////////
                PedometerTimerSetTimer(PEDOMETER_TMR_CHANNEL, 2);//根据 等级来设定时间
                PedometerTimerStart(PEDOMETER_TMR_CHANNEL);
            }else{
                PedometerState = PEDOMETER_RUN;
                PedometerFreqUp();
///////////////////////////////////////////////
#ifdef TEST_PEDOMETER_UI
				PDisplayPauseRun(PEDOMETER_DISP_RUN);
#endif 	
///////////////////////////////////////////////
                PedometerTimerStart(PEDOMETER_TMR_CHANNEL);
            }
            break;
            
        case KEY_VAL_MENU_PRESS_START:
                if (PedometerState != PEDOMETER_STOP) {
                    PedometerState = PEDOMETER_PAUSE;
                    PedometerFreqDown();
                    PedometerTimerStop(PEDOMETER_TMR_CHANNEL);
                    PedometerTimerStop(PEDOMETER_TMR_CHANNEL2);
                    PedometerReadFlag = 0;
                    PedometerKeyFlag = 0;
                    PedometerKeyValue = KEY_VAL_NONE;
                }
            Fun2MsgArray[0] = MSG_FUNCTION2_NONE;
            Fun2ModuleChange();
            MainMenuState = 0;
            DisplayFlag = DISP_MENU;
            PreDisplayFlag = DisplayFlag;
            LCD_Init(0);
            LCD_SetColor(PEDOMETER_BACK_CLOLOR);
            break;

        default:
            break;
    }
}    

PEDOMETER_APP_CODE
void PedometerProcess(void)
{
    unsigned int imask_tmp;
    unsigned int color_tmp;
    unsigned int KeyValue;
    unsigned int KeyState;   
    unsigned int tmpbuf[8];
    
    if(PedometerState != PEDOMETER_RUN){
        if(KeyFlag.bc.bKeyPressed)
            KeyFlag.bc.bKeyPressed = 0;
        return;
        
        if (SystemInfo.bc.bHoldOn) {
            return;
        }
    }
    if(PedometerReadFlag != 0){
        read_creg(%imask, imask_tmp);
        bitclear_creg(%imask, 15);
        PedometerReadFlag = 0;
        write_creg(%imask, imask_tmp);        
		//GetAcceleration();		
		StepLoops();
		///////////////////////////////////////////////
		Xnumber=MXC6202DataOut.Bytes.XaccMSB;
		Xnumber=MXC6202DataOut.Bytes.XaccLSB+(Xnumber<<8);
		Ynumber=MXC6202DataOut.Bytes.YaccMSB;
		Ynumber=MXC6202DataOut.Bytes.YaccLSB+(Ynumber<<8);
		///////////////////////////////////////////////
		Distance=BodyHeight-100;
		Distance=Distance*StepCounter;
		Distance=Distance/100;
		///////////////////////////////////////////////
		TotalConsume=Distance*BodyWeight;
		TotalConsume=TotalConsume+(TotalConsume/1000)*36;
		///////////////////////////////////////////////
		TimeCounter=TimeInterCounter/20;
		///////////////////////////////////////////////
		ConsumeRate=TotalConsume/TimeCounter;
		ConsumeRate=ConsumeRate*3600;
		ConsumeRate=ConsumeRate/1000;//以千卡为单位
		///////////////////////////////////////////////
		StepFreqency=(60*StepCounter)/TimeCounter;
		///////////////////////////////////////////////
#ifdef TEST_PEDOMETER_UI
		PDisplayXnumber(Xnumber);	
		PDisplayYnumber(Ynumber);	
		///////////////////////////////////////////////
		PDisplayStepCounter(StepCounter);
		PDisplayBodyWeight(BodyWeight);
		PDisplayBodyHeight(BodyHeight);
		///////////////////////////////////////////////
		PDisplayDistance(Distance);
		PDisplayTotalConsume(TotalConsume);
		if(TimeInterCounter%20==0)
			PDisplayTimeCounter(TimeCounter);
		PDisplayConsumeRate(ConsumeRate);
		PDisplayStepFreqency(StepFreqency);
#else 
		if(TimeInterCounter%20==0)
		{//一秒钟刷新一次
			PDisplayTime(TimeCounter);
			PDisplayStepCounter(StepCounter);
			PDisplayTotalConsume(TotalConsume);//已千卡为单位
			PDisplayDistance(Distance);
		}
#endif 	
		///////////////////////////////////////////////       
    }
    
    if(KeyFlag.bc.bKeyPressed == 0)
        return;
        
    KeyFlag.bc.bKeyPressed = 0;
    
    switch(KeyVal){
        case KEY_VAL_PLAY_SHORT_UP:
            if(PedometerState != PEDOMETER_RUN){
                PedometerState = PEDOMETER_RUN;
                PedometerFreqUp();
///////////////////////////////////////////////
#ifdef TEST_PEDOMETER_UI
				PDisplayXnumber(Xnumber);	
				PDisplayPauseRun(PEDOMETER_DISP_RUN);
#endif 	
///////////////////////////////////////////////
                PedometerTimerSetTimer(PEDOMETER_TMR_CHANNEL, 2);//根据 等级来设定时间
                PedometerTimerStart(PEDOMETER_TMR_CHANNEL);
                PedometerTimerReset(PEDOMETER_TMR_CHANNEL2);
                PedometerTimerStart(PEDOMETER_TMR_CHANNEL2);
            }else{
                PedometerState = PEDOMETER_PAUSE;
                PedometerFreqDown();
                PedometerTimerStop(PEDOMETER_TMR_CHANNEL);
                PedometerTimerStop(PEDOMETER_TMR_CHANNEL2);
                PedometerKeyFlag = 0;
                PedometerKeyValue = KEY_VAL_NONE;
///////////////////////////////////////////////
#ifdef TEST_PEDOMETER_UI
				PDisplayXnumber(Xnumber);	
				PDisplayPauseRun(PEDOMETER_DISP_PAUSE);
#endif 	
///////////////////////////////////////////////
            }
            break;
            
        case KEY_VAL_MENU_PRESS_START://KEY_VAL_MODE_PRESS_START:
                if (PedometerState != PEDOMETER_STOP) {
                    PedometerState = PEDOMETER_PAUSE;
                    PedometerFreqDown();
                    PedometerTimerStop(PEDOMETER_TMR_CHANNEL);
                    PedometerTimerStop(PEDOMETER_TMR_CHANNEL2);
                    PedometerReadFlag = 0;
                    PedometerKeyFlag = 0;
                    PedometerKeyValue = KEY_VAL_NONE;
                }
            Fun2MsgArray[0] = MSG_FUNCTION2_NONE;
            Fun2ModuleChange();
            MainMenuState = 0;
            DisplayFlag = DISP_MENU;
            PreDisplayFlag = DisplayFlag;
            LCD_Init(0);
            LCD_SetColor(PEDOMETER_BACK_CLOLOR);
            break;
      default:
            break;        
    }
    
    if(PedometerKeyFlag != 0){
        read_creg(%imask, imask_tmp);
        bitclear_creg(%imask, 15);
        PedometerKeyFlag = 0;
        write_creg(%imask, imask_tmp);
    }
}

PEDOMETER_APP_CODE
void PedometerModule(void)
{
    unsigned int color_tmp;
    unsigned int temp;
    
    if (DisplayFlag == DISP_PEDOMETER) {
        if (SystemInfo.bc.bBackLightOffStart) {
            bitclear_creg(%imask,5);
            SystemInfo.bc.bBackLightOffStart = 0;
            LcdBackLightOff();
            bitset_creg(%imask,5);
        }
        
        if (SystemInfo.bc.bDisplayRecovery) {
            SystemInfo.bc.bDisplayRecovery = 0;
            //恢复显示图片(重新解码)
            PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_INIT,0,0,0/*,0,0,0*/);
        }
        
        if (SystemInfo.bc.bHoldOn && PedometerState == PEDOMETER_RUN){//2007-1-10 
            PedometerState = PEDOMETER_PAUSE;                   
        }
        
        if (SystemInfo.bc.bBackLightOnStart == 0) {
            
            switch(Fun2MsgArray[1]){        
                case MSG_FUNCTION2_PEDOMETER_INIT:
                    //LCD_Init();
                    if (Sys1InitFlag.word == 0xffff) {
                        SysCpuSetFreq(24);
                        SysTimer0Set(24,25000);//SysTimer0Set(24,10000);
                    }
                    PedometerDispInit();
                    if (Sys2InitFlag.bc.bPedometerModuleInitEnable) {
                        PedometerValueInit();
                    }
                    PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_STOP,0,0,0/*,0,0,0*/);                    
                    break;
                case MSG_FUNCTION2_PEDOMETER_STOP:
                    PedometerSetting();//没有开始前,进行相关设置
                    if(PedometerState == PEDOMETER_RUN){
                        PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_RUN,0,0,0/*,0,0,0*/);
                    }
                    break;
                case MSG_FUNCTION2_PEDOMETER_RUN:
                    //SystemInfo.bit.bBklightOffEn = 0;
                    PedometerProcess();
                    if(PedometerState != PEDOMETER_RUN){
                    PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_STOP,0,0,0/*,0,0,0*/);
                    }
                    break;
                case MSG_FUNCTION2_PEDOMETER_END:
					GsensorPowerOnDown(GS_POWERDOWN);                    
                    PedometerExit();
                    break;
                default:
                    break;
            }
        }
        
        if (SystemInfo.bc.bHoldDisplay) {
            bitclear_creg(%imask,5);
            SystemInfo.bc.bHoldDisplay = 0;
            bitset_creg(%imask,5);
            PreDisplayFlag = DisplayFlag;
            DisplayFlag = DISP_HOLD;
            MusicSetFreq51();
            LCD_Init(0);
            DisplayPicture(0, 0, LCD_MAX_XSIZE, LCD_MAX_YSIZE, NFA_SYSTEM_LOCK + SystemInfo.bc.bHoldOn * PicPerPage);
            MusicSetFreq51Return();
        }
        
        if (SystemInfo.bc.bBackLightOnStart) {
            bitclear_creg(%imask,5);
            SystemInfo.bc.bBackLightOnStart = 0;
            LcdBackLightOn();
            KeyReset();
            bitset_creg(%imask,5);
        }
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////                 
PEDOMETER_APP_CODE
void PedometerFreqUp(void)
{
    MusicSetFreq51();
    bitclear_creg(%imask,5);
    SystemInfo.bc.bBackLightOffEn = 1;
    SystemInfo.bc.bSysIdleEn = 0;
    bitset_creg(%imask,5);
}

PEDOMETER_APP_CODE
void PedometerFreqDown(void)
{
    bitclear_creg(%imask,5);
    SystemInfo.bc.bBackLightOffEn = 0;
    LightOffCounter = 0;
    if ((Sys1InitFlag.word == 0xffff) || ((Sys1InitFlag.bc.bMusicModuleInitEnable == 0) && (MusicPlayInfo.PlayState != MUSIC_DECODE_PLAY))) {
        SystemInfo.bc.bSysIdleEn = 1;
        SysIdleCounter = 0;
    }
    bitset_creg(%imask,5);
    MusicSetFreq51Return();
}

#ifdef TEST_PEDOMETER_UI
PEDOMETER_APP_CODE
void PDisplayPauseRun(bool PedometerPauseRun)
{
    unsigned int color_tmp;

	color_tmp = LCD_GetColor();
	LCD_SetColor(PEDOMETER_BACK_CLOLOR);
	LCD_FillRect(PEDOMETER_DISP_STATE_X, PEDOMETER_DISP_STATE_Y, PEDOMETER_DISP_STATE_X+PEDOMETER_DISP_STATE_XSIZE, PEDOMETER_DISP_STATE_Y+PEDOMETER_DISP_STATE_YSIZE);
	LCD_SetColor(0xF800);
	if(PedometerPauseRun==PEDOMETER_DISP_RUN)
		LCD_NFDispStringAt(PEDOMETER_DISP_STATE_X, PEDOMETER_DISP_STATE_Y, "RUN");  
	else
		LCD_NFDispStringAt(PEDOMETER_DISP_STATE_X, PEDOMETER_DISP_STATE_Y, "PAUSE");  	
	LCD_SetColor(color_tmp);
}
PEDOMETER_APP_CODE
void PDisplayXnumber(unsigned long Xnumber)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(Xnumber,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_XNUMBER_X, PEDOMETER_NUMBER_XNUMBER_Y, PEDOMETER_NUMBER_XNUMBER_X+50, PEDOMETER_NUMBER_XNUMBER_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_XNUMBER_X, PEDOMETER_NUMBER_XNUMBER_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayYnumber(unsigned long Ynumber)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	
	color_tmp = LCD_GetColor();
	Conver16To10Display(Ynumber,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_YNUMBER_X, PEDOMETER_NUMBER_YNUMBER_Y, PEDOMETER_NUMBER_YNUMBER_X+50, PEDOMETER_NUMBER_YNUMBER_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_YNUMBER_X, PEDOMETER_NUMBER_YNUMBER_Y, tmpbuf);
	LCD_SetColor(color_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayBodyWeight(unsigned long BodyWeight)
{	
    unsigned int color_tmp;
    unsigned int tmpbuf[8];
	

⌨️ 快捷键说明

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