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

📄 main.c

📁 一个用于LPC2119液晶,GUI测试及演示的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
      }
      
      x1 += x1_ver;					// 圆运动计算
      y1 += y1_ver;
      x1 += x1_ver;				
      y1 += y1_ver;
      
      if(x1<=22)					// 移到了最左边吗?若是,则向右运动(x_ver=1)
      {  x1_ver = 1;
      }
      if(x1>=217)					// 移到了最右边吗?若是,则向左运动(x_ver=-1)
      { x1_ver = -1;
      }
      if(y1<=34)					// 移到了最下边吗?若是,则向上运动(y_ver=1)
      {  y1_ver = 1;
      }
      if(y1>=95)					// 移到了最上边吗?若是,则向下动动(y_ver=-1)
      {  y1_ver = -1;
      }
      
      x2 += x2_ver;					// 圆运动计算
      y2 += y2_ver;
      x2 += x2_ver;				
      y2 += y2_ver;
      
      if(x2<=22)					// 移到了最左边吗?若是,则向右运动(x_ver=1)
      {  x2_ver = 1;
      }
      if(x2>=217)					// 移到了最右边吗?若是,则向左运动(x_ver=-1)
      { x2_ver = -1;
      }
      if(y2<=34)					// 移到了最下边吗?若是,则向上运动(y_ver=1)
      {  y2_ver = 1;
      }
      if(y2>=95)					// 移到了最上边吗?若是,则向下动动(y_ver=-1)
      {  y2_ver = -1;
      }
      
      if(0!=keypress) break;
   }
   
   VICIntEnClr = 0x020000;		
}






/****************************************************************************
* 名称:RunDemo()
* 功能:进行GUI的演示,包括画线、画圆、圆弧、椭圆、矩形、多边形、bmp图及汉字、动画等。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RunDemo(void)
{  WINDOWS  mainwindows;
static   MENUICO  mainmenu[8];
   uint8  select;					// 菜单选项变量
   uint8  key;
   uint8  i;
   
   /* 设置主窗口并显示输出 */
   mainwindows.x = 0;
   mainwindows.y = 0;
   mainwindows.with = 240;
   mainwindows.hight = 128;
   mainwindows.title = (uint8 *) "Graphics Function  Demo!";
   mainwindows.state = NULL;
   GUI_WindowsDraw(&mainwindows);	// 绘制主窗口	
   
   /* 设置图标菜单 */
   for(i=0; i<8; i++)
   {  if(i<4)
      {  mainmenu[i].x = i*59+11; 
         mainmenu[i].y = 20;
      }
      else
      {  mainmenu[i].x = (i-4)*59+11;
         mainmenu[i].y = 72;
      }
      mainmenu[i].state = 0;		// 初始化为末选中状态
   }
   
   
   /* 连接相应的图标数据 */
   mainmenu[0].icodat = (uint8 *) menuico1;
   mainmenu[0].title = (uint8 *) menuchar1;
   mainmenu[1].icodat = (uint8 *) menuico2;
   mainmenu[1].title = (uint8 *) menuchar2;
   mainmenu[2].icodat = (uint8 *) menuico3;
   mainmenu[2].title = (uint8 *) menuchar3;
   mainmenu[3].icodat = (uint8 *) menuico4;
   mainmenu[3].title = (uint8 *) menuchar4;
   mainmenu[4].icodat = (uint8 *) menuico5;
   mainmenu[4].title = (uint8 *) menuchar5;
   mainmenu[5].icodat = (uint8 *) menuico6;
   mainmenu[5].title = (uint8 *) menuchar6;
   mainmenu[6].icodat = (uint8 *) menuico7;
   mainmenu[6].title = (uint8 *) menuchar7;
   mainmenu[7].icodat = (uint8 *) menuico8;
   mainmenu[7].title = (uint8 *) menuchar8;
      
   /* 连接菜单功能函数 */
   mainmenu[0].Function = (void(*)())DemoLine;
   mainmenu[1].Function = (void(*)())DemoCircle;
   mainmenu[2].Function = (void(*)())DemoArc;
   mainmenu[3].Function = (void(*)())DemoEllipse;
   mainmenu[4].Function = (void(*)())DemoRectang;
   mainmenu[5].Function = (void(*)())DemoPoly;
   mainmenu[6].Function = (void(*)())DemoBmp;
   mainmenu[7].Function = (void(*)())MoveCircle;
 
   /* 设置默认菜单 */
   mainmenu[0].state = 1;
   select = 0;
   
   /* 进行主菜单显示及选择操作 */
   while(1)
   {  for(i=0; i<8; i++)								// 显示图标菜单
      {  GUI_MenuIcoDraw(&mainmenu[i]);
      }
      /* 选择功能 */
      while(1)
      {  key = WaitKey();
         if(key==KEY_OK) break;							// 点击OK键选择
         if(key==KEY_NEXT) 
         {  mainmenu[select].state = 0;					// 取消上一选择
            GUI_MenuIcoDraw(&mainmenu[select]);
            select++;									// 指向下一菜单
            if(select>7) select=0;
			mainmenu[select].state = 1;				
            GUI_MenuIcoDraw(&mainmenu[select]);
         }
         if(key==KEY_BACK) 
         {  mainmenu[select].state = 0;					// 取消上一选择
            GUI_MenuIcoDraw(&mainmenu[select]);
            if(select==0) select=7;
              else  select--;							// 指向下一菜单
			mainmenu[select].state = 1;				
            GUI_MenuIcoDraw(&mainmenu[select]);
         }
      }
      
      /* 执行相应功能 */
      (*mainmenu[select].Function)();
      if(select>=6) GUI_WindowsDraw(&mainwindows);	// 主窗口重绘(清屏)
   }
}




/****************************************************************************
* 名称:RunOpen()
* 功能:执行"Open"菜单命令,打开一个图标。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RunOpen(void)
{  GUI_LoadPic(105, 70, (uint8 *)critter, 32, 32);
}

/****************************************************************************
* 名称:RunClose()
* 功能:执行"Close"菜单命令,关闭一个图标。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RunClose(void)
{  GUI_RectangleFill(105, 70, 137, 102, 0);
   
}

/****************************************************************************
* 名称:RunBye()
* 功能:执行"Exit"菜单命令,显示退出信息。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RunBye(void)
{  GUI_PutString(80, 105, "Goodbye sir!");
   DelayNS(50);
}

/****************************************************************************
* 名称:NotThing()
* 功能:显示执行信息,然后退出。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  NotThing(void)
{  GUI_PutString(80, 105, "Do notthing!");
   DelayNS(50);
   GUI_PutString(80, 105, "            ");
}


/****************************************************************************
* 名称:RunAbout()
* 功能:显示关于信息,然后退出。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RunAbout(void)
{  GUI_PutString(80, 105, "ZLG_GUI v0.1");
   DelayNS(100);
   GUI_PutString(80, 105, "            ");
}


/****************************************************************************
* 名称:RunMenuDemo()
* 功能:进行菜单的演示操作。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RunMenuDemo(void)
{  WINDOWS  mainwindows;
   MMENU    mainmenu;
   SMENU    submenu[5];
   uint8    mselect;
   uint8    select, bak;
   uint8    key;
      
   /* 设置主窗口并显示输出 */
   mainwindows.x = 0;									
   mainwindows.y = 0;
   mainwindows.with = 240;
   mainwindows.hight = 128;
   mainwindows.title = (uint8 *) "Down Menu  Demo!";
   mainwindows.state = (uint8 *) "ready    (Let's make things better.)";
   GUI_WindowsDraw(&mainwindows);						// 绘制主窗口	
   
   mainmenu.win = &mainwindows;							// 设置主菜单所属窗口
   mainmenu.no = 5;										// 主菜单项个数
   mainmenu.str[0] = (char *) "File";					// 主菜单项各项字符
   mainmenu.str[1] = (char *) "Edit";
   mainmenu.str[2] = (char *) "View";
   mainmenu.str[3] = (char *) "Find";
   mainmenu.str[4] = (char *) "Help";
   GUI_MMenuDraw(&mainmenu);							// 显示主菜单
   
   /* 子菜单设置 */
   for(bak=0; bak<5; bak++)
   {  submenu[bak].win = &mainwindows;					// 设置菜单所属的窗口
      submenu[bak].mmenu_no = bak;          
      submenu[bak].state = 0;
   }
   
   submenu[0].no = 3;
   submenu[0].str[0] = (char *) "Open";
   submenu[0].str[1] = (char *) "Close";
   submenu[0].str[2] = (char *) "Exit";
   submenu[0].Function[0] = (void(*)()) RunOpen;
   submenu[0].Function[1] = (void(*)()) RunClose;
   submenu[0].Function[2] = (void(*)()) RunBye;
  
   submenu[1].no = 4;
   submenu[1].str[0] = (char *) "Cut";
   submenu[1].str[1] = (char *) "Copy";
   submenu[1].str[2] = (char *) "Paste";
   submenu[1].str[3] = (char *) "Delete";
   submenu[1].Function[0] = (void(*)()) NotThing;
   submenu[1].Function[1] = (void(*)()) NotThing;
   submenu[1].Function[2] = (void(*)()) NotThing;
   submenu[1].Function[3] = (void(*)()) NotThing;

   submenu[2].no = 2;
   submenu[2].str[0] = (char *) "Tools";
   submenu[2].str[1] = (char *) "Font";
   submenu[2].Function[0] = (void(*)()) NotThing;
   submenu[2].Function[1] = (void(*)()) NotThing;
   
   submenu[3].no = 3;
   submenu[3].str[0] = (char *) "Find";
   submenu[3].str[1] = (char *) "Replace";
   submenu[3].str[2] = (char *) "Next";
   submenu[3].Function[0] = (void(*)()) NotThing;
   submenu[3].Function[1] = (void(*)()) NotThing;
   submenu[3].Function[2] = (void(*)()) NotThing;
   submenu[3].Function[3] = (void(*)()) NotThing;   
   
   submenu[4].no = 1;
   submenu[4].str[0] = (char *) "About";
   submenu[4].Function[0] = (void(*)()) RunAbout;
   
   
   /* 进行子菜单1显示及选择操作 */
   mselect = 0;
   while(1)
   {  /* 选择主菜单项 */
      while(1)
      {  GUI_MMenuSelect(&mainmenu, mselect);			// 显示当前主菜单项
         key  = WaitKey();								// 等待按键操作
         if(key==KEY_OK) break;							// 若是OK键,则退出主菜单选择
         if(key==KEY_BACK)								// BACK键操作
         {  if(mselect>0)								
            {  GUI_MMenuNSelect(&mainmenu, mselect); 	// 取消当前主菜单项选择
               mselect--;								// 指向下一主菜单项
            }
         }
         if(key==KEY_NEXT)								// NEXT键操作
         {  if( mselect<(mainmenu.no-1) )						
            {  GUI_MMenuNSelect(&mainmenu, mselect); 	// 取消当前主菜单项选择
               mselect++;								// 指向下一主菜单项
            }
         }         
      }
      GUI_MMenuNSelect(&mainmenu, mselect);
      
      /* 下拉子菜单,选择功能 */
      select = submenu[mselect].state;
      bak = select;
      GUI_SMenuDraw(&submenu[mselect]);					// 显示子菜单
      while(1)
      {  key = WaitKey();
         if(key==KEY_OK) break;							// 点击OK键选择
         if(key==KEY_NEXT) 
         {  bak = select;
            select++;
            if(select>=submenu[mselect].no) select = 0;
            GUI_SMenuSelect(&submenu[mselect], bak, select);
         }
         if(key==KEY_BACK) 
         {  bak = select;
            if(select==0) select = submenu[mselect].no - 1;
              else select--;
            GUI_SMenuSelect(&submenu[mselect], bak, select);
         }
      }
      GUI_SMenuHide(&submenu[mselect]);
      (*submenu[mselect].Function[select])();					// 调用相应的服务程序
      if( (mselect==0) && (select==2) )
      {  break;
      }
   }
}

void TargetInit(void)
{
   /* I2C初始化,包括初始化其中断为向量IRQ中断。*/
   PINSEL0 |= 0x00000055;			// 设置I/O口工作模式,使用I2C口
   PINSEL1 = 0x20000000;			// 使用P0.30作为EINT3
   IO0DIR  |= BEEPCON;
   IO1DIR = LCM_LEDCON;
   IO1SET = LCM_LEDCON;
   UART0_Ini();
   /* 设置I2C时钟为30KHz */
   I2SCLH = I2SCLL = 50;            // 晶振为11.0592MHz,Fpclk = 2.7648MHz
   
   /* 设置I2C中断允许 */
   VICIntSelect = 0x00000000;		// 设置所有通道为IRQ中断
   VICVectCntl0 = 0x29;				// I2C通道分配到IRQ slot 0,即优先级最高
   VICVectAddr0 = (int)IRQ_I2C;	    // 设置I2C中断向量地址	
   
   VICVectCntl1 = 0x31;
   VICVectAddr1 = (int)IRQ_EINT3;
   
   VICIntEnable |= 0x0200;           // 使能I2C中断
}

uint8 const DISP_TAB[16] = { 0x5A, 0xA5, 0x5A, 0xA5, 0x5A, 0xA5, 0x5A, 0xA5,
                             0x5A, 0xA5, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA
	                   		};
/***********************************************************************
* 名称:main()
* 功能:主程序,用于GUI测试及演示。
***********************************************************************/
int  main(void)
{  
   uint8  LPC2210_LOG[8] = {0x0f, 0x00, 0x01, 0x02, 0x02, 0x0c, 0x16, 0x14};
   uint8 i, j;
   double pi = 3.1415926535358;
   double yuyu = pi/30;
   uint8 pp=0,yy=0;
   	for(i=0;i<60;i++)
	{   qqq[i] = sin(yuyu*pp);
		pp++;  }
	for(j=0;j<60;j++)
	{   www[j] = cos(yuyu*yy);
	    yy++;  }	
	for(i=0;i<60;i++)
	{   sec[i][0] = R0*qqq[i]+X0;
		sec[i][1] = Y0-www[i]*R0;
		min[i][0] = R1*qqq[i]+X0;
		min[i][1] = Y0-www[i]*R1;
		hor[i][0] = R2*qqq[i]+X0;
		hor[i][1] = Y0-www[i]*R2;
	}   
   TargetInit();
   DelayNS(500);
   ZLG7290_SendBuf(LPC2210_LOG,8);
   DelayNS(1000);   
   GUI_Initialize();
   DelayNS(50);
   //Time0Init();   
   RTCIni();
   MSpiIni();
   IO0DIR |= HC595_CS;
   UART0_SendStr("fantianqi");	
   for(i=0; i<16; i++) 
      {  MSendData(~DISP_TAB[i]);	//  发送显示数据
         DelayNS(50);		
      }
   DelayNS(1000);				   
   GUI_SetColor(1, 0);
   GUI_ClearSCR();				
   GUI_LoadPic(0, 0, (uint8 *)windows, 240, 128);
   DelayNS(1000);
   GUI_ClearSCR();
   //GUI_LoadPic(76, 34, (uint8 *)LOGO_202, 83, 59);
   DelayNS(1000);
   RunMenuDemo();					// 显示菜单
   RunDemo();						// 运行演示程序
   while(1);
}

⌨️ 快捷键说明

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