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

📄 a.c

📁 一个Gesssensor 的driver
💻 C
📖 第 1 页 / 共 4 页
字号:
            }
            else if(PDisplayflag.bit.bInRecordMode)
            {
            	if(AdjustPosition<=0)
	            	AdjustPosition =9;
				else 
    	       		AdjustPosition--;
            	PDisplayflag.bit.bPRecordDisplay=1;
            }
			break;

        case KEY_VAL_UP_PRESS:
        case KEY_VAL_UP_SHORT_UP:
            if(PDisplayflag.bit.bInSetMode)
            {	
            	PedometerAdjustValue(1);
            }
            break;
        case KEY_VAL_DOWN_PRESS:
        case KEY_VAL_DOWN_SHORT_UP:
            if(PDisplayflag.bit.bInSetMode)
            {
            	PedometerAdjustValue(0);
            }
            break;
        case KEY_VAL_REC_SHORT_UP:
            if(!PDisplayflag.bit.bInRecordMode)
            {
				PDisplayflag.word	= 0;//不在显示菜单
				PDisplayflag.bit.bPRecordDisplayinital=1;
            }
            break;
        default:
            break;
    }

}    

PEDOMETER_APP_CODE
void PedometerProcess(void)
{
    unsigned int imask_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)
    {//50ms的时间中断判断一有没有Step
        read_creg(%imask, imask_tmp);
        bitclear_creg(%imask, 15);
        PedometerReadFlag = 0;
        write_creg(%imask, imask_tmp);        
		StepLoops();//检测有没有Step
	}
	if(TimeInterCounter%10==0)
	{//0.5秒钟计算,刷新一次
		//////////////////////////////////////////////////////////////////////////////////////////////读取相关数值
		#ifdef TEST_PEDOMETER_UI
		Xnumber=MXC6202DataOut.Bytes.XaccMSB;
		Xnumber=MXC6202DataOut.Bytes.XaccLSB+(Xnumber<<8);
		Ynumber=MXC6202DataOut.Bytes.YaccMSB;
		Ynumber=MXC6202DataOut.Bytes.YaccLSB+(Ynumber<<8);
		#endif 	
		//////////////////////////////////////////////////////////////////////////////////////////////计算行走路程
		Distance=BodyHeight*37/100;//身高步幅 37 -45%福尔摩斯发现身高脚长的比例是1:7,他根据这个来推断罪犯的身高的
		Distance=Distance*StepCounter;
		Distance=Distance/100;
		//////////////////////////////////////////////////////////////////////////////////////////////计算消耗的
		TotalConsume=Distance*BodyWeight;
		TotalConsume=TotalConsume+(TotalConsume*36)/1000;//能量(卡路里 Calories)= 1.036x合共走路距离(km)x 预设体重(kg)
		//////////////////////////////////////////////////////////////////////////////////////////////计算时间秒为单位
		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 
		//////////////////////////////////////////////////////////////////////////////////////////////
		PDisplayStepCounter(StepCounter);
		if(TimeInterCounter%20==0)
		{//一秒钟刷新一次
			PDisplayTime(TimeCounter);
			PDisplayTotalConsume(TotalConsume);//已千卡为单位
			PDisplayDistance(Distance);
		}
		#endif 	
		//////////////////////////////////////////////////////////////////////////////////////////////
	}
    
    if(KeyFlag.bc.bKeyPressed == 0)
        return;
    else 
    	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://退出Pedometer
            	PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_END,0,0,0/*,0,0,0*/);
            break;
        case KEY_VAL_REC_SHORT_UP:
        case KEY_VAL_MENU_SHORT_UP:
            if(PedometerState == PEDOMETER_RUN)
        	{//进入暂停模式进行相关设置
                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 
            	PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_PAUSE,0,0,0/*,0,0,0*/);
			}

			PDisplayflag.word	= 0;//不在显示菜单
			if(KeyVal==KEY_VAL_MENU_SHORT_UP)
	        	PDisplayflag.bit.bMenuinital=1;
	        else //KEY_VAL_REC_SHORT_UP
				PDisplayflag.bit.bPRecordDisplayinital=1;
            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 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);
                    }
                    if (Sys2InitFlag.bc.bPedometerModuleInitEnable) //须对Pedometer模块进行相关初始化
                    {
                        PedometerValueInit();
                    }
                    PedometerDispInit();
                    PostFun2Message(MSG_FUNCTION2_PEDOMETER,MSG_FUNCTION2_PEDOMETER_STOP,0,0,0/*,0,0,0*/);                    
                    break;
                case MSG_FUNCTION2_PEDOMETER_STOP:
                case MSG_FUNCTION2_PEDOMETER_PAUSE:
                    PedometerSetting();//没有开始前,进行相关设置
                    //PedometerProcess();
                    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_PAUSE,0,0,0/*,0,0,0*/);
                    }
                    break;
                case MSG_FUNCTION2_PEDOMETER_END:
                    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)
{

	pcolor_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(pcolor_tmp);
}
PEDOMETER_APP_CODE
void PDisplayXnumber(unsigned long Xnumber)
{	
    unsigned int tmpbuf[8];
	
	pcolor_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(pcolor_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayYnumber(unsigned long Ynumber)
{	
    unsigned int tmpbuf[8];
	
	pcolor_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(pcolor_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayBodyWeight(unsigned long BodyWeight)
{	
    unsigned int tmpbuf[8];
	
	pcolor_tmp = LCD_GetColor();
	Conver16To10Display(BodyWeight,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_BODY_WEIGHT_X, PEDOMETER_NUMBER_BODY_WEIGHT_Y, PEDOMETER_NUMBER_BODY_WEIGHT_X+50, PEDOMETER_NUMBER_BODY_WEIGHT_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_BODY_WEIGHT_X, PEDOMETER_NUMBER_BODY_WEIGHT_Y, tmpbuf);
	LCD_SetColor(pcolor_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayBodyHeight(unsigned long BodyHeight)
{	
    unsigned int tmpbuf[8];
	
	pcolor_tmp = LCD_GetColor();
	Conver16To10Display(BodyHeight,tmpbuf);
    LCD_SetColor(PEDOMETER_BACK_CLOLOR);
    LCD_FillRect(PEDOMETER_NUMBER_STEP_SIZE_X, PEDOMETER_NUMBER_STEP_SIZE_Y, PEDOMETER_NUMBER_STEP_SIZE_X+50, PEDOMETER_NUMBER_STEP_SIZE_Y+16);
    LCD_SetColor(0xFFFF);
    LCD_NFDispStringAt(PEDOMETER_NUMBER_STEP_SIZE_X, PEDOMETER_NUMBER_STEP_SIZE_Y, tmpbuf);
	LCD_SetColor(pcolor_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayStepCounter(unsigned long StepCounter)
{	
    unsigned int tmpbuf[8];
	
	pcolor_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(pcolor_tmp);
}    

PEDOMETER_APP_CODE
void PDisplayDistance(unsigned long Distance)
{	
    unsigned int tmpbuf[8];
	
	pcolor_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(pcolor_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayTotalConsume(unsigned long TotalConsume)
{	
    unsigned int tmpbuf[8];
	
	pcolor_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(pcolor_tmp);
}    
PEDOMETER_APP_CODE
void PDisplayTimeCounter(unsigned long TimeCounter)
{	
    unsigned int tmpbuf[8];
	
	pcolor_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(pcolor_tmp);

⌨️ 快捷键说明

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