Example #1
0
int main(void)
{
    // Hardware Init
    delay_init();	    	 //ÑÓʱº¯Êý³õʼ»¯
    pwr_init();
    #ifdef YANMING3
    charger_init();
    if (check_standby_flag() == SUCCESS && check_charging() != CHARGING) {
        Key_GPIO_Config();
        exti_key_init();
        #ifdef DEBUG_POWER_OFF_WAKE_UP
        Screen_Init();
        OLED_Clear();
        OLED_Display_On();
        draw_about_mesage();
        #endif
        check_standby_wakeup_button_press();
        // If we boot up from standby by pressing 5 times, the system will reboot again without
        // this code block.
    }
    #endif

    // OLED Init
    Screen_Init();
    OLED_Clear();
    
    //
    low_switch_power_init();

    TIMx_Int_DeInit();
    EXTIX_DeInit();
    
    // Key
    Key_GPIO_Config();
    
    // PID related code
    ADC1_Configuration();
    PWM_Configuration();
    VoltagePID_Init();

    TIMx_Int_Init();
    rtc_init();

    // Our Init
    system_init();
    #ifndef YANMING3
    //iwdg_init();
    #endif

    while(1) {
        #ifndef YANMING3
        //iwdg_feed();
        #endif
        task_schedule();
    }
}
Example #2
0
void oled_show(void)
{
		OLED_Display_On();  //显示屏打开
		//=============显示滤波器=======================//	
		                      OLED_ShowString(00,0,"WAY-");
		                      OLED_ShowNumber(30,0, Way_Angle,1,12);
	       if(Way_Angle==1)	OLED_ShowString(45,0,"DMP");
		else if(Way_Angle==2)	OLED_ShowString(45,0,"Kalman");
		else if(Way_Angle==3)	OLED_ShowString(45,0,"Hubu");
		//=============显示温度=======================//	
		                      OLED_ShowString(00,10,"Wendu");
		                      OLED_ShowNumber(45,10,Temperature/10,2,12);
		                      OLED_ShowNumber(68,10,Temperature%10,1,12);
		                      OLED_ShowString(58,10,".");
		                      OLED_ShowString(80,10,"`C");
		//=============显示编码器1=======================//	
		                      OLED_ShowString(00,20,"Enco1");
		if( Encoder_Left<0)		OLED_ShowString(45,20,"-"),
		                      OLED_ShowNumber(65,20,-Encoder_Left,5,12);
		else                 	OLED_ShowString(45,20,"+"),
		                      OLED_ShowNumber(65,20, Encoder_Left,5,12);
  	//=============显示编码器2=======================//		
		                      OLED_ShowString(00,30,"Enco2");
		if(Encoder_Right<0)		OLED_ShowString(45,30,"-"),
		                      OLED_ShowNumber(65,30,-Encoder_Right,5,12);
		else               		OLED_ShowString(45,30,"+"),
		                      OLED_ShowNumber(65,30,Encoder_Right,5,12);	
		//=============显示电压=======================//
		                      OLED_ShowString(00,40,"Volta");
		                      OLED_ShowString(58,40,".");
		                      OLED_ShowString(80,40,"V");
		                      OLED_ShowNumber(45,40,Voltage/100,2,12);
		                      OLED_ShowNumber(68,40,Voltage%100,2,12);
		 if(Voltage%100<10) 	OLED_ShowNumber(62,40,0,2,12);
		//=============显示角度=======================//
		                      OLED_ShowString(0,50,"Angle");
		if(Angle_Balance<0)		OLED_ShowNumber(45,50,Angle_Balance+360,3,12);
		else					        OLED_ShowNumber(45,50,Angle_Balance,3,12);
		//=============刷新=======================//
		OLED_Refresh_Gram();	
	}
Example #3
0
/*
*@功能:在空闲状态的几个任务
*1.检测是否有按键按下
*2.检测是否读到RFID
*3.检测是否接受到串口传来的指令
*4.检测是否有USB连接到计算机上
*5.检测锂电池电压是否低电
   
共5个任务按各自的时间轴转动,基本上无冲突
*/
void ST_Idle(void)
{
  
  uint16_t ss_num=0;
	uint16_t power_num=0;
	uint16_t usb_bit;
	
  uint8_t key_r=KEYNO;
	uint8_t usb_r=0;
	uint8_t bt_r=0;
	
	uint8_t time_num=0;
	uint8_t p_c=0;
  uint8_t ss_flag=0;
	
	
  ResetKey();		//KeyNum是一个全局变量
	//Init_KeyNumuber();		//Key_Num =KEYINIT
	
	//根据flsah中的信息,更改主菜单中的信息
	SPI_FLASH_Read(HsMenu[1].Name,GROUP_INFORMATION,10);
	SPI_FLASH_Read(HsMenu[2].Name,KEY_INFORMATION,8);	
	
	

// 	//for debug
// 	SPI_FLASH_Read(item,GROUP_INFORMATION,10);
// 	UART1nSendChar(1,item,10);
// 	delay_ms(1000);



// 	//for dedug
// 	SPI_FLASH_Read(item,KEY_INFORMATION,8);
// 	UART1nSendChar(1,item,8);			
// 	delay_ms(1000);		
	
	
	
	
	//for dedug
// 	UART1nSendChar(1,HsMenu[1].Name,10);			
// 	delay_ms(1000);				
// 	UART1nSendChar(1,HsMenu[2].Name,8);			
// 	delay_ms(1000);		
	
	
	
  OLED_Clear();	
	ShowMenuNoInverse(HsMenu);	
	Main_Oled_Power();
	Main_Oled_Time();
  //Choose_MenuOp1();   //主界面显示	


  while(1)
  {
// 		if(g_State!=ST_IDLE)
// 			return;
		
		if(time_num==20)
		{
			Main_Oled_Time();
			time_num=0;
		}
		++time_num;
		delay_ms(50);
		
		
		//按键按下检测,如果有按键就按下就进入菜单操作
    key_r =GetKey();	 //判断是否有按键操作		
		if(ss_flag==0&&key_r==KEYNO)  //超时关屏
		{
			ss_num++;

			if(ss_num>=choosetime*6)//按下超过10秒钟  300/50=6
			{
				OLED_Display_Off();
				ss_flag=1;
				ss_num=0;
			}
		}
		if(ss_flag==1&&(key_r ==KEYCLEAR||key_r ==KEYSURE||key_r ==KEYDOWN||key_r == KEYUP))
		{
			OLED_Display_On();
			ss_flag=0;
			ResetKey();
			key_r=KEYNO;
		}		
    if(key_r !=KEYNO&&key_r !=KEYINIT)
    {
       //ResetKey();  //读完按键值后,将按键值复位

		   g_State =ST_LCDMENU;
		   return; 
							//按任意按键进入可选择菜单
    }

		
				
// 		//RFID检测
// 		nChar =Read_RfidData(2,Rfid_Buff,0xff);			//非常重要的一点,是理解Trismit()的关键
// 		if(nChar >=3)
// 		{
// 		 g_State =ST_KEY;return;	//检测ID信息数据,如果读到了rfid数据,则将g_State置为st_key
// 		}
		
		
		
		
		//检测上位机连接下位机命令,从菜单界面进入USB通信中
		usb_r =UART1ReadFrm(1,g_Buff,MAX_BUFF);		//USB串口1,g_Buff是一个全局变量;#define  MAX_BUFF   520 
		if(usb_r==7&&g_Buff[0]==0xaa&&g_Buff[1]==0x75&&g_Buff[2]==0x0d&&g_Buff[3]==0x02&&g_Buff[4]==0x00&&g_Buff[5]==0x01&&g_Buff[6]==0xD1)//如果返回0x00就发下一条授权
		{	
			usb_bit=(USB_CHEAK&(GPIO_Pin_1))>>1;
			if(usb_bit==1)			//USB插上
			{
				bluetooth_uart_switch=0;				
				pc_to_slave();			//上位机连接下位机的处理
			  g_State =ST_USB; 		//进入USB通信

				return;		  
			}
		}		


	
		
		bt_r =UART3ReadFrm(3,g_Buff,MAX_BUFF);		//蓝牙串口2,g_Buff是一个全局变量;#define  MAX_BUFF   520 
		if(bt_r==7&&g_Buff[0]==0xaa&&g_Buff[1]==0x75&&g_Buff[2]==0x0d&&g_Buff[3]==0x02&&g_Buff[4]==0x00&&g_Buff[5]==0x01&&g_Buff[6]==0xD1)//如果返回0x00就发下一条授权
		{	
				bluetooth_uart_switch=1;				
				pc_to_slave();			//上位机连接下位机的处理;使用接受到的g_Buff
						
// 				m_UB3;
// 				m_UB3.RBuff;
	
				
			  g_State =ST_USB; 		//进入USB通信

				return;		  
		}	


	 usb_bit=(USB_CHEAK&(GPIO_Pin_1))>>1;
	 if(usb_bit==1)     //USB已经插上,即从蓝牙切换到USB
		 bluetooth_uart_switch=0;				
		
		
		
		//电池电量检测
		
		power_num++;		
		if( power_num==0x15)		//0x15*20时Power_Cheak()才会返回有效值 
		{
			power_num =0;
			IWDG_Feed();
			
			Main_Oled_Power();		//更新电池电量
			
			p_c=Power_Cheak();		//此函数运行20次才返回有效值
			if(p_c==4)  //检测电池电压,如果电池电压过低,则进入关机模式,并进行提示
			{
				
// 				Main_Oled_Time();
// 				Main_Oled_Power();				
				
				OLED_Show_LowBattry();  
				
				//延时1s后关机
				g_WaitTimeOut = 0;
				SetTimer(TIMER_TIMEOUT,100,Do_TimeOut,THREE_MIN);   
				while( g_WaitTimeOut == 0 )
				{
					IWDG_Feed();
				}
				KillTimer(TIMER_TIMEOUT);
					
				Sys_Enter_Standby();
			}
		}


  }