📄 main.c
字号:
}
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 + -