예제 #1
0
int main(void)
{
	GPIO_Configuration();
    InitLCD();
	RCC_Configuration();
	uint8_t Pos=60;
    while (1)
    {
    	/*ClrScr();
    	Pos+=1;
    	DrawRectangle(Pos,Pos,242-2*Pos,130-2*Pos,clBlack);
    	DrawRectangle(Pos-20,Pos-20,242-2*(Pos-20),130-2*(Pos-20),clBlack);
    	DrawRectangle(Pos-40,Pos-40,242-2*(Pos-40),130-2*(Pos-40),clBlack);
    	ShowForm(165,5,70,80);
    	DrawRectangle(1,1,240,128,clBlack);
    	RefreshLCD();
    	if (Pos==64) {Pos=44;};*/
    	DrawFillRectangle(1,1,240,128,clWhite);
    	RefreshLCD();
    	Delay(500);
    	DrawFillRectangle(1,1,240,128,clBlack);
    	RefreshLCD();
    	Delay(500);
    }
}
예제 #2
0
u8 AuthorProcess(u8 key_data)
{
	static u8 key_count = 0;
	u8 author_flag = 0;
	if(key_data > 9)
	{
	 	key_count = 0;
		memset(authorbuf , 0 , 10);	
	}
	else
	{
		authorbuf[key_count++] = key_data + '0';
		if(key_count >= 9)
		{
			if(0 == memcmp(authorbuf , "503740053" , 9)) //匹配成功
			{
				CAB_MSG cab_msg;
				ReadCabinetMsg(&cab_msg);//读取系统信息
				memset(cab_msg.sys_password , '8' , 6);//改变箱子系统管理员密码 888888
				memset(cab_msg.comm_password , '6' , 6);//改变箱子系统管理员密码	666666
				WriteCabinetMsg(&cab_msg);//写入系统信息

				RefreshLCD();
				Dis1LineMid("武汉霍克富莱" , 0);
				Dis1LineMid("作者:lc" , 1);
				Dis1LineMid("版本:v7.7.3" , 2);
				RefreshLCD();//刷新屏幕	
				author_flag = 1;											
			}
			key_count = 0;
			memset(authorbuf , 0 , 10);	
		}
	}
	return author_flag;
}
예제 #3
0
/*恢复出厂设置*/
void SysRecoveryInit(FUN_BLOCK **funBlock)
{
	DIS_SING *sing_temp;
	CAB_MSG cab_msg;

	ReadCabinetMsg(&cab_msg);
	GetSubFunBlock(&pfunSubBlock);
	sing_temp = (DIS_SING *)(pfunSubBlock->current_display);
	pfunSubBlock->data_type = NONUM;//显示属性

	strcpy(sing_temp->y2 ,  "确认恢复出厂设置?");
	/*取得VIRTUAL_NUM_LENGTH位数的箱门数*/
	if(CANCEL == KeyDisplay(pfunSubBlock , 10))
	{
		FreeMem();
		return;
	}

	Dis1LineMid("初始化中、、、" , 1);
	RefreshLCD();
	/*恢复出厂设置*/
	InitAllBox(INIT_FLAG);
	memset(pboxStatus , BOX_IDLE , cab_msg.cab_box_num);  //忘了将缓存的箱子信息清空 2013.4.25
	*(pboxStatus + cab_msg.cab_box_num) = 0;//最后一位设置为0,方便使用strlen
	strcpy(sing_temp->y2 ,  "初始化完成");
	DisplaySubBlock(pfunSubBlock);	
}
예제 #4
0
/*
复位按键检测,实现对管理员密码和系统管理员密码复位
长按复位键5s可实现复位操作
time: LC 2013.8.13
*/
void RestKeyCheck()
{
/*检测复位键是否按下,低有效*/		 
	if(!RESETKEY)
	{
		u8 i;
		LED2ON;
		for(i=0;i<100;i++)
		{
			OSTimeDlyHMSM(0, 0, 0,50);//循环检测,按下时长超过3s
			if(RESETKEY)
			{
				LED2OFF;
				break;
			}
			if(i == 99)
			{
				CAB_MSG cab_msg;

				TIM_Cmd(TIM2,DISABLE);//禁能TIM2,禁止键盘输入
				RefreshLCD();
				Dis1LineMid("初始化中、、、" , 1);
				RefreshLCD();//刷新屏幕	
				
				ReadCabinetMsg(&cab_msg);//读取系统信息
				memset(cab_msg.sys_password , '8' , 6);//改变箱子系统管理员密码 888888
				memset(cab_msg.comm_password , '6' , 6);//改变箱子系统管理员密码	666666
				WriteCabinetMsg(&cab_msg);//写入系统信息						

				OSTimeDlyHMSM(0, 0, 2,0);//显示时间2s				
				LED2OFF;

				TIM_Cmd(TIM2,ENABLE);//使能TIM2
				pfunBlock = mainFunBlock;	
				OSMboxPost(display_box , pfunBlock);// 发送邮箱,刷新显示,回到主屏			
			}
		}
	}
}
예제 #5
0
/*********************************************************** 
函数功能:停电模式循环
入口参数:
出口参数:
备注说明:1 空闲进入休眠,停显1屏,停电7天后关闭液晶显示
          2 定时1s唤醒,判断是否上电,喂狗,每分钟RTC温度补偿
          3 按键唤醒,低速运行一个轮显周期
          4 检测到上电后直接复位
***********************************************************/
uint16 PowerDowmMain(void)
{
	uint32 timer500ms=0;
	uint32 timer1000ms=0;
    int16 temp;
    volatile uint8 BatteryFlag = 0;
    volatile uint8 BatteryState;

	DRV_WD_FeedDog();
	//LvdGetManaul();		//设置LVD门限等
	while(1)
	{
		//按键中断唤醒
		if(scrKeyIntFlag)
		{
			scrKeyIntFlag=0;
			EXTI_DisableInt(EXTI_CH1);
            
			DRV_RTC_FlashTask();

			//adc
            DRV_ADC_On();
            
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            
            DRV_ADC_Off();    
			BatteryState = BattLowStateGet();

			if(BatteryState == 0)
			{
				BatteryFlag = 0;
				PowerSleepWakeInit();
				//按键唤醒主循环
				while(1)
				{
					if(runMe)
					{
						//5ms任务
						runMe=0;
						timer500ms++;
						timer1000ms++;
						DRV_WD_FeedDog();
						if(FM3_GPIO->PDIR1&= IO_PINx3)
						{//上电外部中断唤醒
							if(PowerUpDetect())
							{
								PowerWakeSleepInit();//设置唤醒源,退出低速运行
								break;			
							}
						}
						Key_Scr_DetectPowerDown_Task();//轮显按键驱动
						//CoverDetectProcess();
						//EventBatteryUpdateStateFlagProcess();
						//500ms任务
						if(timer500ms>100)
						{
							timer500ms=0;
							//DRV_RTC_FlashTask();
							//Clock_CheckDST();
						}
						DRV_RTC_FlashTask();
						//1000ms任务
						if(timer1000ms>200)
						{
							timer1000ms=0;
                        	PowerDownDisplayAlarmPro();
                        	//LCD_Flag_Driver_Task();
                        	Disp_Auto_Cycle_Task();	//显示
							if(wakeUpTimer)		//定时回到休眠
							{
								wakeUpTimer--;
							}
							else
							{
								PowerWakeSleepInit();//设置唤醒源,退出低速运行
								break;
							}
						}
					}
				}	
			}
			else
			{
				DRV_LCD_Uninit();
			}
		}
		
		//1s定时中断唤醒
		if(SecFlag==1)
		{
			SecFlag=0;           
		}
        
        //1min定时中断唤醒
        if(MinFlag==1)
        {
            MinFlag=0;
                   
            //adc
            DRV_ADC_On();
          
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
            DRV_ADC_StartTask();
            while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0));
          
            DRV_ADC_Off();
            //RTC温度补偿
            TempGet(&temp, 1);                    
            CalcPPM(temp);
            DRV_RTC_CalcSecDeviation();  //停电计算秒的误差
            
            if(BattLowStateGet())//电池
            {      
               SetSegment(SEG_battery2,0);
            }
            else
            {
           	   SetSegment(SEG_battery2,1); 
            }
			RefreshLCD();
            //电池电压检测
			BatteryState = BattLowStateGet();
			if(BatteryState == 1)
          	{
				if(BatteryFlag == 0)
				{
					Feed_watchdog();
					BatteryFlag =1;
					SleepDispTimer = 0;
				}
          	}
          	else if(BatteryFlag == 1)
          	{
                *(volatile unsigned long*)(0xE000ED0C)=0x05FA0004;
				while(1);                          //20140710加上
          	}
		    //停电停显定时          
		    if(SleepDispTimer)
		    {
			   SleepDispTimer--;
		    }
		    else
		    {
			   DRV_LCD_Uninit();	//关闭LCD
		    }  
        }

		//p13上电预判//尽量缩短检测时间
		if(FM3_GPIO->PDIR1&= IO_PINx3)
		{
			if(PowerUpDetect())
			{
				//if(POWER_UP_INIT_SUCESS == PowerUpInit())
				//{
				//	return POWER_UP_INIT_SUCESS;	//回到主循环
				//}
				//else
				//{
				//	PowerDownInit();
				//	Feed_watchdog();
					//LvdGetManaul();		//设置LVD门限等
				//}
				*(volatile unsigned long*)(0xE000ED0C)=0x05FA0004;
				while(1);                       //20140710加上
			}
		}
		//休眠
		if(BatteryState == 1)
        {
             LowPwrCon_GoToStandByMode(STB_RTCMode,STB_IO_KEEP);
        }
        else
        {
             LowPwrCon_GoToStandByMode(STB_TimerMode,STB_IO_KEEP);	
        }
		Feed_watchdog();
	}	
}