前阵子实在太忙了,一直在出差,所以STM32开发板都没有时间好好把玩,最近刚空下来,继续好好学习STemwin。
看正点原子的STemwin例程,只有一开始的emwin移植是使用裸机移植的,后面的演示例程都是基于操作系统,这点跟emwin的入门指引又有不同,所以我硬着头皮使用裸机来学习STemwin,直接用上一篇例程的demo来修改学习。而且正点原子的例程貌似没办法使用emwin提供的仿真软件仿真,找了很久资料,发现安富莱的STemwin教程还是很完善,很丰富的,就用着正点原子的硬件,学着安富莱的软件学习STemwin吧~
先修改一下上一篇demo例程中的程序,将原来的GUI_DEMO_Main()函数改为MainTask()函数,我看了STemwin官方给出的例程,GUI函数的入口都是从MainTask开始的,不知道为什么正点原子修改了这一处入口。
接着在GUIDEMO_Start.c文件中找到MainTask函数本体,修改函数为字符串显示内容,如下:
void MainTask(void) {
/* ??? emWin */
// GUI_Init();
/* 设置背景颜色 */
GUI_SetBkColor(GUI_LIGHTBLUE);
/* 清屏后背景颜色起效 */
GUI_Clear();
/* 设置字体大小 */
GUI_SetFont(&GUI_Font32_ASCII);
/* 显示内容 */
GUI_DispString("www.ickey.cc \nchixinmu");
while (1)
{
GUI_Delay(10);
}
}
整体函数结构完成,用emwin提供的仿真软件试一下,看下效果:
嗯,符合预期,在LCD原点显示
www.ickey.cc 换行,显示chixinmu,试下把程序烧写到阿波罗开发板中。
和仿真的效果一致(背景颜色实际上是比较接近的,手机拍出来饱和度和亮度高很多)
接着,我们来学习下emwin提供的字符显示函数:
GUI_SetPenSize(10);
GUI_SetColor(GUI_RED);
GUI_DrawLine(300, 0, 500, 300);
GUI_DrawLine(500, 0, 300, 300);
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_WHITE);
GUI_SetTextMode(GUI_TM_NORMAL);
GUI_DispStringHCenterAt("GUI_TM_NORMAL", 400, 0);
GUI_SetTextMode(GUI_TM_REV);
GUI_DispStringHCenterAt("GUI_TM_REV", 400, 50);
/* 透明文本 */
GUI_SetTextMode(GUI_TM_TRANS);
GUI_DispStringHCenterAt("GUI_TM_TRANS", 400, 100);
/* 异或文本 */
GUI_SetTextMode(GUI_TM_XOR);
GUI_DispStringHCenterAt("GUI_TM_XOR", 400, 150);
/* 设置文本模式 */
GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 400, 200);
这部分函数第一部分是画了两条交叉的红线,用于验证效果,然后设置字符显示底色为黑色,字符本色为白色。GUI_DispStringHCenterAt()函数用于将字符居中显示在某个坐标。 emwin提供了多种模式用于显示字符:
GUI_TM_NORMAL模式是正常模式,我们应看到黑底白字的字符;
GUI_TM_REV是反转模式,我们应看到白底黑字的字符;
GUI_TM_TRANS是透明模式,我们应看到蓝色背景色,白色字体的字符;
GUI_TM_XOR是异或模式,底色还是蓝色背景色,字符的颜色是原本设置的白色字符和背景色异或后的颜色,前面打的红色交叉可以验证此处会变为另一个颜色;
GUI_TM_TRANS | GUI_TM_REV是两种模式同时生效:透明且黑色字符。
先使用仿真,看下效果:
再将代码烧录到开发板中:
嗯~和预期效果一样~
毕竟GUI的改动相比程序内容的改动更加频繁(产品经理,项目经理,UI设计师,软件工程师深有体会),所以emwin提供了仿真软件,先把UI在PC上仿真完成,最后再烧录到嵌入式中,实际工作中,UI设计和程序设计分开执行,是一种高效率的生产方式。
前阵子实在太忙了,一直在出差,所以STM32开发板都没有时间好好把玩,最近刚空下来,继续好好学习STemwin。
看正点原子的STemwin例程,只有一开始的emwin移植是使用裸机移植的,后面的演示例程都是基于操作系统,这点跟emwin的入门指引又有不同,所以我硬着头皮使用裸机来学习STemwin,直接用上一篇例程的demo来修改学习。而且正点原子的例程貌似没办法使用emwin提供的仿真软件仿真,找了很久资料,发现安富莱的STemwin教程还是很完善,很丰富的,就用着正点原子的硬件,学着安富莱的软件学习STemwin吧~
先修改一下上一篇demo例程中的程序,将原来的GUI_DEMO_Main()函数改为MainTask()函数,我看了STemwin官方给出的例程,GUI函数的入口都是从MainTask开始的,不知道为什么正点原子修改了这一处入口。
接着在GUIDEMO_Start.c文件中找到MainTask函数本体,修改函数为字符串显示内容,如下:
void MainTask(void) {
/* ??? emWin */
// GUI_Init();
/* 设置背景颜色 */
GUI_SetBkColor(GUI_LIGHTBLUE);
/* 清屏后背景颜色起效 */
GUI_Clear();
/* 设置字体大小 */
GUI_SetFont(&GUI_Font32_ASCII);
/* 显示内容 */
GUI_DispString("www.ickey.cc \nchixinmu");
while (1)
{
GUI_Delay(10);
}
}
整体函数结构完成,用emwin提供的仿真软件试一下,看下效果:
嗯,符合预期,在LCD原点显示
www.ickey.cc 换行,显示chixinmu,试下把程序烧写到阿波罗开发板中。
和仿真的效果一致(背景颜色实际上是比较接近的,手机拍出来饱和度和亮度高很多)
接着,我们来学习下emwin提供的字符显示函数:
GUI_SetPenSize(10);
GUI_SetColor(GUI_RED);
GUI_DrawLine(300, 0, 500, 300);
GUI_DrawLine(500, 0, 300, 300);
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_WHITE);
GUI_SetTextMode(GUI_TM_NORMAL);
GUI_DispStringHCenterAt("GUI_TM_NORMAL", 400, 0);
GUI_SetTextMode(GUI_TM_REV);
GUI_DispStringHCenterAt("GUI_TM_REV", 400, 50);
/* 透明文本 */
GUI_SetTextMode(GUI_TM_TRANS);
GUI_DispStringHCenterAt("GUI_TM_TRANS", 400, 100);
/* 异或文本 */
GUI_SetTextMode(GUI_TM_XOR);
GUI_DispStringHCenterAt("GUI_TM_XOR", 400, 150);
/* 设置文本模式 */
GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 400, 200);
这部分函数第一部分是画了两条交叉的红线,用于验证效果,然后设置字符显示底色为黑色,字符本色为白色。GUI_DispStringHCenterAt()函数用于将字符居中显示在某个坐标。 emwin提供了多种模式用于显示字符:
GUI_TM_NORMAL模式是正常模式,我们应看到黑底白字的字符;
GUI_TM_REV是反转模式,我们应看到白底黑字的字符;
GUI_TM_TRANS是透明模式,我们应看到蓝色背景色,白色字体的字符;
GUI_TM_XOR是异或模式,底色还是蓝色背景色,字符的颜色是原本设置的白色字符和背景色异或后的颜色,前面打的红色交叉可以验证此处会变为另一个颜色;
GUI_TM_TRANS | GUI_TM_REV是两种模式同时生效:透明且黑色字符。
先使用仿真,看下效果:
再将代码烧录到开发板中:
嗯~和预期效果一样~
毕竟GUI的改动相比程序内容的改动更加频繁(产品经理,项目经理,UI设计师,软件工程师深有体会),所以emwin提供了仿真软件,先把UI在PC上仿真完成,最后再烧录到嵌入式中,实际工作中,UI设计和程序设计分开执行,是一种高效率的生产方式。