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

📄 uifunction.c

📁 基于c的电动机保护程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "UItype.h"
#include "led.h"
#include "Keyboard_drv.h"






#define TopMenu_Initial( symbol_1,symbol_2,MenuName,datatemp,nextnode,bit,num) do\
	{\
		if( symbol_1 == 0 )\
		{\
			(&MenuName) -> symbolData[0] = LedNum[symbol_2];\
			(&MenuName) -> symbolData[1] = LedNum[10];\
		}\
		else\
		{\
			(&MenuName) -> symbolData[0] = LedNum[symbol_1];\
			(&MenuName) -> symbolData[0] = Numdot[symbol_2];\
		}\
		(&MenuName) -> data[0] = datatemp[0];\
		(&MenuName) -> data[1] = datatemp[1];\
		(&MenuName) -> data[2] = datatemp[2];\
		(&MenuName) -> NodeNext = &((&nextnode)->NodeNext);\
		(&MenuName) -> BitNeedSet = bit;\
		(&MenuName) -> MenuNum = num;\
}while(0)

#define SonMenu_Initial( MenuName,symbol_1,symbol_2,data,bit,nextMenu ) do\
	{\
		(&MenuName)->symbolData[0] = symbol_1 ; \
		(&MenuName)->symbolData[1] = symbol_2 ; \
		(&MenuName)->dataAdd = data ; \
		(&MenuName)->BitNeedSet = bit; \
		(&MenuName)->NodeNext = & ((&nextMenu) -> NodeNext );\
	}while( 0 )

#define Menu_0 OverCurrent_Menu
#define Menu_1 OverVoltage_Menu


Menu_Top_Struct OverCurrent_Menu,OverVoltage_Menu;

SonMenu_Struct   OverCurrent_SonMenu_1, OverCurrent_SonMenu_2,OverVoltage_SonMenu_1,OverVoltage_SonMenu_2 ;

MenuStatus_Struct  *MenuStatus = (MenuStatus_Struct *) (0x1fff0000 + 0x800);
Measure_Display_Data_Struct  *Measure_Display_Data = (Measure_Display_Data_Struct * )0x1fff1000;



void Initial_MenuStatus(void)
{
		
		
		Func_Select = 0; //测量或者设置选择

	 
		Protect_Select = 0;    //保护功能或显示的参数   选择菜单
		Menu_Num = 0;       // 子菜单总数
		Menu_Level = 0;      // 当前子菜单号
		Cursor = 0;          //光标位置
		Bit_NeedSet = 0;     // 需要修改的位数

		LED_1 = 0;
		LED_2 = 0;
		LED_3 = 0;
		LED_4 = 0;  //数码管数据
		
		
	 
		UP_flag = 0;        //上下键按键标志
		DOWN_flag = 0;    //上下键按键标志

		ActiveMenuAdd = 0;   //当前菜单的结构体地址

}


void Initial_Stetting_Menu(void )
{


int *dataTemp[3] = {0, &KG_5_1 , &KG_5_2 };


TopMenu_Initial(0, 1, OverCurrent_Menu, dataTemp, OverCurrent_SonMenu_1,3,2 );
SonMenu_Initial( OverCurrent_SonMenu_1,0x1189,0x1177,JDSettingAdd + offset_ShortCircuit_CurrentI, 3,OverCurrent_SonMenu_2);
SonMenu_Initial( OverCurrent_SonMenu_2,0x1189,0x1177,JDSettingAdd + offset_ShortCircuit_CurrentII, 3,OverCurrent_SonMenu_1);

 dataTemp[0] = &KG_4_1;
 dataTemp[1] =&KG_5_1;
 dataTemp[2] =&KG_5_1;



TopMenu_Initial( 0,2,OverVoltage_Menu, dataTemp, OverVoltage_SonMenu_1,3,2 );
SonMenu_Initial( OverVoltage_SonMenu_1,0x7116,0x6511,JDSettingAdd+offset_Voltage_Over_Setting, 3,OverVoltage_SonMenu_2);
SonMenu_Initial( OverVoltage_SonMenu_2,0x7116,0x8117,JDSettingAdd + offset_Start_Setting_Time, 3,OverVoltage_SonMenu_2);


}



void Initial_Measure_Menu(void)
{
	int i = 0;
	int j = 0;
	
	
(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = JDInputsAdd + off_IA ;
	j++;
	Symbol_Segment[i] = charA ;   //随便填的
	i++;
	Symbol_Segment[i] = charb ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = JDInputsAdd + off_IB ;

	j++;
	Symbol_Segment[i] = charC ;   //随便填的
	i++;
	Symbol_Segment[i] = chard ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = JDInputsAdd + off_IC ;
	j++;
	Symbol_Segment[i] = charE ;   //随便填的
	i++;
	Symbol_Segment[i] = charF  ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = JDInputsAdd +  off_UA ;
	j++;
	Symbol_Segment[i] = chard ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] =  JDInputsAdd +  off_UB ;
	j++;
	Symbol_Segment[i] = charE ;   //随便填的
	i++;
	Symbol_Segment[i] = charE ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] =  JDInputsAdd +  off_UC ;
	j++;
	Symbol_Segment[i] = charF ;   //随便填的
	i++;
	Symbol_Segment[i] = 0 ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = JDInputsAdd +  off_I0 ;
	j++;
	Symbol_Segment[i] = charH ;   //随便填的
	i++;
	Symbol_Segment[i] = charJ ;   //随便填的
	i++;
	
	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = StatusVarAdd + off_OverCurrent_Ratio;
	j++;
	Symbol_Segment[i] = 0x456c ;   //随便填的
	i++;
	Symbol_Segment[i] = 0x456c ;   //随便填的
	i++;

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = StatusVarAdd + off_HeatOver_Ratio;
	j++;
	Symbol_Segment[i] = 0x456c ;   //随便填的
	i++;
	Symbol_Segment[i] = 0x456c ;   //随便填的
	i++;
	

	(Measure_Display_Data_Struct *) Measure_Display_Data -> DataAdd[j] = StatusVarAdd + off_Unbalance_Current_Value;
	j++;
	Symbol_Segment[i] = 0x456c ;   //随便填的
	i++;
	Symbol_Segment[i] = 0x456c ;   //随便填的
	i++;
	   
}


int MenuNode_Scan(int node1,int node2 )
{
	void * ActiveMenuTop;
	//int  ActiveMenu;
	void * ActiveMenu;
	int i;
	switch(node1)
	{
		case 0:
			ActiveMenuTop = (&Menu_0) -> NodeNext ;
			break;

		case 1:
			ActiveMenuTop = (&Menu_1) -> NodeNext ;
			break;
	}

	ActiveMenu = ActiveMenuTop ;
	for( i = node2; i > 0; i-- )
	{
		//ActiveMenu = *(int *)ActiveMenu 
		ActiveMenu = ((SonMenu_Struct *)ActiveMenu) -> NodeNext   ;
		
		
	}
	return ActiveMenu;
}





void KEY_Process( int KEY )
{


if( Func_Select == Measure )
{

/*************************进入参数测量界面****************************/
	switch( KEY )
	{
		case UP:
			if( Protect_Select == Measure_StateNum-1 )
			{
				Protect_Select = 0 ;
			}
			else 
			{
				Protect_Select++;
			}
			break;

		case DOWN:
			if( Protect_Select == 0 )
			{
				Protect_Select = Measure_StateNum;
			}
			else 
			{
				Protect_Select--;
			}
			break;

		case FUNC:
			Func_Select = Setting ;
			break;

		case RESET:
			Protect_Select = 0 ;
			break;



		default:
			break;

		
	}


}




if( Func_Select == Setting )
{

/****************进入设定界面***************************/


switch( KEY )
{
	case FUNC:
		Menu_Level = 0;
		if( Protect_Select == Protect_StateNum - 1 )
		{
			Protect_Select = 0 ;
		}
		else
		{
			Protect_Select++;
		}
		break;

	case ENTER:
		if( Cursor == Bit_NeedSet )
		{
			Cursor = 0;
			if( Menu_Level == Menu_Num )
			{
				Menu_Level = 0;
			}
			else
			{
				Menu_Level++;
			}
		}
		else
		{
			Cursor++;
		}
		break;
		

		

	case UP:
		UP_flag = 1;

		break;

	case DOWN:
		DOWN_flag = 1;

		break;


	case RESET:
		break;

	case STOP:
		break;

		
		
}
}

  
}







void  Float2Led(float value,U16 Data[3])
{
    float temp = value ;
    float temp_point = 0;
    int temp_pointToInt = 0;
    int p = 0;
    int temp_int = 0 ;
    int temp_left = 0 ;
    U16 Float2LedValue[3] ;
    U16 i[3];
    int j;
	
	
	Float2LedValue[0] = 0;
	Float2LedValue[1] = 0 ;
	Float2LedValue[2] = 0;
    temp_int = temp ;
    temp_point = temp - temp_int ;


    if( temp_int > 999 )
    {
        Float2LedValue[0] =  LedNum[9];
        Float2LedValue[1] =  LedNum[9];
        Float2LedValue[2] =  LedNum[9];

    }


    temp_left = temp_int;


    if( (temp_int > 99) && (temp_int <= 999) )
    {
        p = temp_int / 100;
        Float2LedValue[0] = LedNum[ p ] ;
        temp_left -= p*100;


        if( (temp_left > 9) && (temp_left <=99) )
        {
            p = temp_left / 10 ;
            Float2LedValue[1] = LedNum[ p ] ;
            
            temp_left -= p*10;
        }

        if( (temp_left >= 0) && (temp_left <10) )
        {
            Float2LedValue[2] = LedNum[ temp_left ] ;
        }
    }





    if( (temp_int > 9) && (temp_int <= 99) )
    {


            temp_pointToInt = temp_point * 100 ;
            temp_pointToInt %= 10 ;



            if( temp_pointToInt >= 5 )
            {
                p = temp_int / 10;
                Float2LedValue[0] = LedNum[p] ;
                temp_left -= p * 10 ;
                Float2LedValue[1] = Numdot[temp_left];
                temp_pointToInt = temp_point * 10;
/***************************小数部分*********************************/
                Float2LedValue[2] = LedNum[ temp_pointToInt  ];
                j++;

            }
            else
            {
                  temp_pointToInt = temp_point * 10 ;
                  temp_pointToInt %= 10 ;


                  if( temp_pointToInt == 0 )
                     {
                            p= temp_int / 10;
                         Float2LedValue[0] = LedNum[ 10 ];
                         Float2LedValue[1] = LedNum[ p ] ;
                         temp_left -= p * 10 ;
                Float2LedValue[2] = LedNum[ temp_left ];
             }
        }

    }

/************************************************************/

    if( (temp_int >= 0 ) && (temp_int <= 9) )
    {

⌨️ 快捷键说明

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