有新的UCGUI了,3.98的。支持JPEG和GIF。于是心动了,想试一下。GIF很好做。我先没有用OS 平台ADS1.2
1。GIF的显示。
先写一段显示GIF的代码如下:网上参考的,其实用不了那么多。
void ShowGif(const void * Pgif, U32 NumBytes , int x0, int y0)
{
static U16 i = 0;
GUI_GIF_INFO InfoGif1;
GUI_GIF_IMAGE_INFO InfoGif2;
GUI_GIF_GetInfo(Pgif, NumBytes, &InfoGif1);
if(i < InfoGif1.NumImages)
{
GUI_GIF_GetImageInfo(Pgif, NumBytes, &InfoGif2, i );
//if(!GUI_GIF_DrawEx(Pgif, NumBytes, x0 + InfoGif2.xPos, y0 + InfoGif2.yPos, i++))
if(!GUI_GIF_DrawEx(Pgif, NumBytes, x0, y0, i++))
{
//SysDelay(InfoGif2.Delay * 2);
GUI_Delay(InfoGif2.Delay * 5);
}
}
else
{
i = 0;
}
}
这里把GUI_Delay();里再调用你的延时函数。是要是没得OS提供时间片的维护。
while(1);
ShowGif(acGifTest, 3072, 0, 0);
当然,acGifTest是我用bin2C转换出来的C文件.
2。JPEG的显示。
因为3。98源码中,我没找到JPEG这个文件夹。于是把3。90中的JPEG文件夹搞入工程了。
(3。98主要是加了GIF显示。)
主要的问题是编译遇到以下错误:
Undefined symbol main (referred from kernel.o)
原因是JPEG文件包中的一个C文件用到了exit。而这里是不支持的。用网上的一句话说:好多嵌入式系统,对C或C++运行时系统,进行了精简或修改,
我把这个函数内部实现注释了。因为它的反回是一个static void的类型.
METHODDEF(void)
error_exit (j_common_ptr cinfo)
{
return ;
}
如下调用即可:
GUI_JPEG_Draw(acJpegTest, sizeof(acJpegTest), 0, 0);
3.补充,LCDWin.c是VC上位机的模拟LCD。
删了,加我们的LCD44B0.c
#define LCD_CONTROLLER (0) ///用我们自己的屏,240*160 不然它用其它的驱动,显示就不会在我们的LCD上了。
其它我的设置:
#define GUI_OS (0) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (0) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_MOUSE (0) /* Support a mouse */
#define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */
在编译过程中,有什么错再看提示改,一般就是点宏定义啊,数据类型定义什么的。你都能搞定的。
有不行的可以问我。QQ573618118