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

📄 experiment.c

📁 电子菜单
💻 C
字号:
//API 界面函数试验
//Experiment.c

#include"..\ucos-ii\includes.h"          
#include "..\ucos-ii\add\osaddition.h"
#include"..\inc\osfile.h"
#include"..\inc\drv\rtc.h"
#include "..\inc\drv.h"
#include <string.h>
#include "..\ucos-ii\add\list.h"
#include "..\inc\drv\figure.h"
#include "..\inc\drv\display.h"
#include "..\inc\maro.h"
#include "..\template.h"
#include"..\inc\experiment.h"
//点的固定
//__________________________________________________________________
//___________________________________________________ HoriLine 1           |            <--液晶屏
//                                                                                   |                               |
//   pText_Start                                                               |                               |                                                                      
//                                                                                   | VertLine                  |  
//                                                                                   |                               | 
//                                                                                   |                               | 
//                                                                                   |                               |
//_______________________________________________ |___HoriLine 2           | 
//                                                                                                                    |
//__________________________________________________________________|

//定义框架,为其他显示内容提供相对坐标
structPOINT pHori1_Start={HORI1_STARTx,HORI1_STARTy};  //point
structPOINT pHori1_End={HORI1_ENDx,HORI1_ENDy};
structPOINT pHori2_Start={HORI2_STARTx,HORI2_STARTy};
structPOINT pHori2_End={HORI2_ENDx,HORI2_ENDy};
structPOINT pVert_Start={VERT_STARTx,VERT_STARTy};
structPOINT pVert_End={VERT_ENDx,VERT_ENDy};
structPOINT pText_Start={TEXT_STARTx, TEXT_STARTy};
structPOINT pSwit_Disp_Start={SWIT_DISP_STARTx, SWIT_DISP_STARTy};

//全局变量
PListCtrl pMainMenu;
PListCtrl2 pHelp;

structRECT Menu_Rect={0,215,220,240};
structRECT Main_Rect={0,HORI1_STARTy,320,HORI2_STARTy};
structRECT Help_Rect={(TEXT_STARTx+56),TEXT_STARTy,(VERT_STARTx-8), (HORI2_STARTy-LINE_WIDTH_DEFAULT)};

char cAd_Pic[12]={'1','2','8','_','3','2',' ',' ','B','M','P',0}; //产品宣传图片
char cAd_Pic1[12]={'1','2','8','_','3','3',' ',' ','B','M','P',0};
char cAd_Pic2[12]={'1','2','8','_','3','4',' ',' ','B','M','P',0};
//char cAd_Pic3[12]={'1','2','8','_','3','5',' ',' ','B','M','P',0};	
char dj_pic[7][12]={{'1','2','8','_','0','1',' ',' ','B','M','P',0},{'1','2','8','_','0','2',' ',' ','B','M','P',0},
	{'1','2','8','_','0','3',' ',' ','B','M','P',0},{'1','2','8','_','0','4',' ',' ','B','M','P',0},{'1','2','8','_','0','5',' ',' ','B','M','P',0},
	{'1','2','8','_','0','6',' ',' ','B','M','P',0},{'1','2','8','_','0','7',' ',' ','B','M','P',0}};


u16 Main_Menu_0[]={0x5e2e,0x52a9,0};    //               帮助|         
u16 Main_Menu_1[]={0x663e,0x793a,0};    //                显示|     
u16 *Main_Menu[]={Main_Menu_0,Main_Menu_1}; 

u16   Swit_Disp_Name_0[]={0x96e8,0x5237,0x5668,0};//雨刷器
u16   Swit_Disp_Name_1[]={0x0047,0x0053,0x004d,0};//GSM
u16   Swit_Disp_Name_2[]={0x6307,0x793a,0x706f,0};//指示灯

u16   Swit_Disp_Val_0[]={0x5f00,0}; //Open
u16   Swit_Disp_Val_1[]={0x5f00,0};
u16   Swit_Disp_Val_2[]={0x5f00,0};

u16 *Swit_Disp_Name[]={Swit_Disp_Name_0,Swit_Disp_Name_1,Swit_Disp_Name_2};
u16 *Swit_Disp_Val[]={Swit_Disp_Val_0,Swit_Disp_Val_1,Swit_Disp_Val_2};

u16   Simu_Disp_Name_0[]={0x7535,0x673a,0x8f6c,0x901f,0};//电机转速
u16   Simu_Disp_Name_1[]={0x6c34,0x4f4d,0};//水位 
u16   Simu_Disp_Name_2[]={0x673a,0x6cb9,0x538b,0x529b,0};//机油压力
u16   Simu_Disp_Name_3[]={0x7cfb,0x7edf,0x538b,0x529b,0};//系统压力
u16   Simu_Disp_Name_4[]={0x7a7a,0x6ee4,0x5668,0};//空滤器

u16   Simu_Disp_Val_0[]={0x0031,0x0032,0x0038,0x0030,0};// 1280
u16   Simu_Disp_Val_1[]={0x0038,0x0030,0};                       // 80%
u16   Simu_Disp_Val_2[]={0x0033,0x0032,0};                           // 32
u16   Simu_Disp_Val_3[]={0x0035,0x0035,0};                           // 55
u16   Simu_Disp_Val_4[]={0x0037,0x0030,0};                       //  70%

u16   Simu_Disp_Unit_0[]={0x0072,0x0070,0x006d,0};                                         //rpm         
u16   Simu_Disp_Unit_1[]={0x0025,0};                                   // %
u16   Simu_Disp_Unit_2[]={0x004d,0x0050,0x0061,0};            //MPa
u16   Simu_Disp_Unit_3[]={0x004d,0x0050,0x0061,0};            //MPa
u16   Simu_Disp_Unit_4[]={0x0025,0};                                   // %

u16 *Simu_Disp_Name[]={Simu_Disp_Name_0,Simu_Disp_Name_1,Simu_Disp_Name_2,Simu_Disp_Name_3,Simu_Disp_Name_4};
u16 *Simu_Disp_Val[]={Simu_Disp_Val_0,Simu_Disp_Val_1,Simu_Disp_Val_2,Simu_Disp_Val_3,Simu_Disp_Val_4};
u16 *Simu_Disp_Unit[]={Simu_Disp_Unit_0,Simu_Disp_Unit_1,Simu_Disp_Unit_2,Simu_Disp_Unit_3,Simu_Disp_Unit_4};

//Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help Help 
u16 Help_Menu_0[]={0x6309,0x952e,0};//按键
u16 Help_Menu_1[]={0x663e,0x793a,0};//显示
u16 *u16Help_Menu[]={Help_Menu_0,Help_Menu_1};
//字符串资源
u16 Help_Button[]={ 0x0020,  0x0030,0x0031,0x952e,0x003a,
                                 0x754c,0x9762,0x7684,0x5207,0x6362,0x0020,0x0020,
                                 0x0020,  0x0020,0x0020,0x0020,0x0020,  0x4e0a,
                                 0x4e0b,0x952e,0x003a,       0x5e2e,0x52a9,0x754c,0x9762,0x4e0b,
                                 0x002c,     0x9009,0x9879,0x7684,0x5207,0x6362,0x0020, 0};
                                 //按键:0、1键,界面的切换,
                                 //up,down 键,在某一界面下,选项的切换
u16 Help_Disp[]={0x0020,   0x663e,0x793a,0x754c,0x9762,0x4e0b,0x002c,   0x5c4f,
	                      0x5e55,0x5de6,0x4fa7,0x4e3a,0x6a21,0x62df,0x91cf,0x002c,
	                      0x53f3,0x4fa7,0x4e3a,0x5f00,0x5173,0x91cf,0};
                                 //在显示界面,左侧显示模拟量,右侧显示开关量

u16 *Help[]={Help_Button,Help_Disp};
void *Interface[]={(void*)Interface1,(void*)Interface2};

void InitInterface()
{

     InitCtrl();             // 创建列表框控件
     //InitMenu();          //创建菜单
     //InitFrame();        // 画边框
     InitPicture();
	 //显示宣传图片和报警图标
     //InitSwitDisp();     // 显示开关量
     //Interface1();       //显示界面一
}

 //初始化控件: 帮助列表框
 void InitCtrl()  
{
      PDC pdc;
      structRECT rect;
      int i=0;
      pdc=CreateDC();
       

      SetRect(&rect,260,220,320,240); //矩形左上角作为起始点
      FillRect2( pdc, &rect,  GRAPH_MODE_NORMAL, COLOR_WHITE);
      //PListCtrl pHelp;
      pHelp=(PListCtrl2)CreateListCtrl(ID_HELP_CTRL, &rect, HELP_ITEM_NUM, FONTSIZE_MIDDLE, CTRL_STYLE_NOFRAME, NULL);
      CreateListCtrl2Patch(pHelp, 2, TRUE);
      //while(i<HELP_ITEM_NUM){
      	AddStringListCtrl((PListCtrl)pHelp, Help_Menu_0);
	    DrawListCtrl2(pHelp);
		
		 DestoryDC( pdc);
      	//i++;
      	//}
}
 void InitMenu()
{
      PDC pdc;
      structRECT rect;
      int i=0;

      pdc=CreateDC();
      CopyRect(&rect,&Menu_Rect);
      //PListCtrl pMenu;
      pMainMenu=CreateMenu(ID_MENU, &rect, 10,FONTSIZE_MIDDLE, CTRL_STYLE_NOFRAME, NULL);
      SetWndCtrlFocus(NULL,ID_MENU);
      while(i<=(MENU_SHOW_NUM-1)){
      	AddStringListCtrl(pMainMenu, Main_Menu[i]);
      	i++;
      	}
      DrawMenu(pMainMenu);
      DestoryDC( pdc);
}
void InitFrame()
{
      PDC pdc;
      structRECT rect;
      
      pdc=CreateDC();
      CopyRect(&rect, &Main_Rect);
      DrawDBFrameRect2( pdc, &rect);//画边框
      VerticalLine( pdc, pVert_Start.x,pVert_Start.y+LINE_WIDTH_DEFAULT,pVert_End.x,pVert_End.y-LINE_WIDTH_DEFAULT);
      DestoryDC(pdc);
}

void InitPicture()     //显示宣传图片和报警图标
{
      PDC pdc;
      pdc=CreateDC();
      
      FillRect( pdc, 0,0,320,20, GRAPH_MODE_NORMAL, COLOR_WHITE);
      ShowBmp( pdc, cAd_Pic,45,0); 
	  //SetDrawOrg( pdc, 0, 300, &oldx, &oldy);
	  //FillRect( pdc, 0,300,240,320, GRAPH_MODE_NORMAL, COLOR_WHITE);
	  ShowBmp(pdc,cAd_Pic2,0,75);
	  ShowBmp(pdc,cAd_Pic1,140,220);
      DestoryDC(pdc);
}
void show()
{
      PDC pdc;
      pdc=CreateDC();
	  FillRect( pdc, 0,300,240,320, GRAPH_MODE_NORMAL, COLOR_WHITE);
	  ShowBmp(pdc,cAd_Pic1,50,220);
      DestoryDC(pdc);
}

void InitSwitDisp() //屏幕右侧开关量的显示
{
       PDC pdc;
       structRECT rect;
       
       pdc=CreateDC();
       FillRect( pdc, pVert_Start.x+10, pHori1_Start.y+10, 320-10, pHori2_Start.y-10, GRAPH_MODE_NORMAL, COLOR_WHITE);
       CmpSwitDisp( pdc, pSwit_Disp_Start, Swit_Disp_Name,Swit_Disp_Val, SWIT_NUM_DISP);
       DestoryDC( pdc);
}
void Interface1()
{
      PDC pdc;
      structRECT rect;
      
      pdc=CreateDC();
      SetRect(&rect, LINE_WIDTH_DEFAULT, pHori1_Start.y+LINE_WIDTH_DEFAULT, pVert_Start.x, pHori2_Start.y-LINE_WIDTH_DEFAULT);
      FillRect2( pdc, &rect,  GRAPH_MODE_NORMAL, COLOR_WHITE);

      DrawListCtrl2(pHelp);  //(PListCtrl2)
      FillRect2( pdc, &Help_Rect, GRAPH_MODE_NORMAL, COLOR_WHITE);
      TextOutRect2( pdc, &Help_Rect, Help[0], TRUE,FONTSIZE_MIDDLE);
      DestoryDC(pdc);
}


void Interface2()
{
       PDC pdc;
       structRECT rect;
       pdc=CreateDC();
       SetRect(&rect, LINE_WIDTH_DEFAULT, pHori1_Start.y+LINE_WIDTH_DEFAULT, pVert_Start.x, pHori2_Start.y-LINE_WIDTH_DEFAULT);
       FillRect2( pdc, &rect, GRAPH_MODE_NORMAL, COLOR_WHITE);
       CmpSimuDisp( pdc,pText_Start, Simu_Disp_Name,Simu_Disp_Val,Simu_Disp_Unit, SIMU_NUM);
       DestoryDC( pdc);
}



//自行编制的消息响应函数
U8 onKey(int nkey, int fnkey)
{
	PDC pdc;
    
	
	switch(nkey){
	case 11://OK
		ClearScreen();

		pdc=CreateDC();//创建绘图设备上下文
		
		

		DrawRectFrame(pdc, 20, 5, 40, 25);
		ShowBmp(pdc, dj_pic[0],65 , 0);//显示图片
		DrawRectFrame(pdc, 20, 37, 40, 57);
		ShowBmp(pdc, dj_pic[1],65 , 32);//显示图片
		DrawRectFrame(pdc, 20, 69, 40, 89);
		ShowBmp(pdc, dj_pic[2],65 , 64);//显示图片
		DrawRectFrame(pdc, 20, 101, 40, 121);
		ShowBmp(pdc, dj_pic[3],65 , 96);//显示图片
		DrawRectFrame(pdc, 20, 133, 40, 153);
		ShowBmp(pdc, dj_pic[4],65 , 128);//显示图片
		DrawRectFrame(pdc, 20, 165, 40, 185);
		ShowBmp(pdc, dj_pic[5],65 , 160);//显示图片
		ShowBmp(pdc, dj_pic[6],100 , 200);//显示图片
		//CreateText();
		//ReDrawOSCtrl();//重画控件

		DestoryDC(pdc);//删除绘图设备上下文
		return TRUE;
	}
	return FALSE;
}

/*void onKey(int nkey, int fnkey )
//{
       //switch(nkey){
	//case 0:
		MenuSelMove(pMainMenu, -1, TRUE);  //实现菜单左右移动
		break;
	case 1:
		MenuSelMove(pMainMenu, 1, TRUE);
		break;
	case 3:
		ListCtrl2SelMove(pHelp, -1, TRUE);
		break;
	case 7:
		ListCtrl2SelMove(pHelp, 1, TRUE);
		break;	
	case 11:
		ClearScreen();
		pdc=CreateDC();//创建绘图设备上下文
		FillRect( pdc, 0,300,240,320, GRAPH_MODE_NORMAL, COLOR_WHITE);
		ShowBmp(pdc, cAd_Pict, 140, 20);//显示图片

		//ReDrawOSCtrl();//重画控件

		DestoryDC(pdc);//删除绘图设备上下文
		return TRUE;
		break;
	default: 
		break;
		}
}*/
void onListCtrl2SelChange(u32 CtrlID, int CurrentSel) //消息响应函数: 响应列表框被改变
{
      PDC pdc;
      pdc=CreateDC();
      
      switch(CtrlID){
	case ID_HELP_CTRL:
		if(pMainMenu->CurrentSel==INTERFACE_HELP){
			FillRect2( pdc, &Help_Rect, GRAPH_MODE_NORMAL, COLOR_WHITE);
			TextOutRect2( pdc, &Help_Rect,Help[CurrentSel], TRUE, FONTSIZE_MIDDLE);
			}
		break;
		}
	DestoryDC(pdc);
}

//流程:
//按键消息调用onKey(),再由onKey()调用MenuSelMove(),在MenuSelMove()程序的结尾处 创建消息OSM_MENU_SELCHANGE,
// 主函数接到OSM_MENU_SELCHANGE后,调用消息响应函数onMenuSelChange() 
void onMenuSelChange(u32 CtrlID, int CurrentSel)
{
       PDC pdc;
       pdc=CreateDC();
       switch(CtrlID){
	case ID_MENU:
		((void (*)(void)) (Interface[CurrentSel]))();
		break;
		}
	DestoryDC(pdc);
}

⌨️ 快捷键说明

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