名 称: GUI_成长历程_part1
文章内容:在windows模拟液晶显示屏
基本参数:物理尺寸 480*272
像 素 16位色,565模式
运行环境:VS2008 VS2010
开发语言:标准C
模块构成:1 模拟FAT文件系统。以后可以加入真实的FAT
2 uc/GUI 是主要的。 jpeg文件夹是为了显示JPEG图片,否则可以不要。
3 opengl 详细见opengl_test工程
编 者:张永辉
日 期:2013年1月7日
//****************************************************************************************
1 文件目录层次
\FAT 模拟文件系统
\Picture
J326203.jpg 在存储器的文件
fat.c *对文件的读取操作
fat.h *
\GUI
\Config
GUIConf.h *必须的配置文件
GUITouchConf.h *触摸屏支持
LCDConf.h *
\ConvertColor
LCDP565.c GUI390 565色
\ConvertMomo 黑白转换,暂时不用
\Core GUI390
...
\Font GUI390
F10S_1.c
F10S_ASCII.c
F6x8.c
FComic24B_1.c
FComic24B_ASCII.c
\GuiTest
b240150.h 图片数据
b480272.h 图片数据
J480272.h 图片数据
GuiPicture.c *显示图片测试 依赖:FAT+GUI
GuiPicture.h *
GuiTouch.c *触摸屏测试
GuiTouch.h *
MainTask.c GUI390自带测试
MicriumLogo.C GUI390
MicriumLogo_1bpp.c GUI390
\JPEG
GUI_JPEG.c 必须的
... 需要包含所有的
\LCDDriver 修改此文件夹的内容,即可改平台
GUI_X_1788.c *依赖:OpenglLcd.h
GUI_X_1788.h *
OpenglLcd.c *最低层次提供显示屏和触摸相关函数
OpenglLcd.h *
sim_1788.c *模拟1788 依赖:OpenglLcd.h
sim_1788.h *
\main
main.c *
//****************************************************************************************
2 实现思路
1 opengl使用2个线程(外部不看见),提供显示屏 触摸屏(鼠标模拟) 键盘
所以,上层文件都可以脱离wdows平台。将调试好的程序,很容易移植到其他平台。
//****************************************************************************************
名 称: GUI_成长历程_part1
文章内容:main.c
fat.h
fat.c
GUIConf.h
GUITouchConf.h
LCDConf.h
/*****************************************************************************************
文 名: main.c
/*****************************************************************************************
#include <Windows.h>
#include "GuiTouch.h"
#include "GuiPicture.h"
#include "GUI.h"
void MainTask(void);
int main(void)
{
GUI_Init();
GuiThouchTest();
GuiPictureTest();
MainTask();
return 0;
}
/*****************************************************************************************
文 件:fat.h
功 能:模拟文件系统
*****************************************************************************************/
#ifndef __FAT_H_
#define __FAT_H_
//****************************************************************************************
void FatTest(void);
void FatInit(void);
unsigned int FatReadJpegFile(unsigned char *tmp,unsigned int tmpLen,const unsigned char *filename);
unsigned int FatGetJpegLen(const unsigned char *filename);
//****************************************************************************************
#endif
/*****************************************************************************************
文 件:fat.h
功 能:模拟文件系统
编 者:张永辉 2013年1月4日
*****************************************************************************************/
#include <stdio.h>
#include "FAT.h"
void FatTest(void)
{}
/*****************************************************************************************
功 能:FAT初始化
*****************************************************************************************/
void FatInit(void)
{ ;
}
/*****************************************************************************************
功 能:读取JPEG图片数据
入 参:tmp 装载数据的数组。
tmpLen 最大接收长度。
filename 文件名
出 参:已经读取的长度。
=0 表示读取失败 或文件不存在
*****************************************************************************************/
unsigned int FatReadJpegFile(unsigned char *tmp,unsigned int tmpLen,const unsigned char *filename)
{
FILE *fp;
unsigned int filelen;
//以2进制打开。经验:以“r”打开,部分数据读出错了的。
fopen_s(&fp,filename,"rb");
if(fp==NULL)
{ //文件打开失败
return 0;
}
//读取文件,当前位置在末尾了
fread(tmp,tmpLen,1,fp); //读取数据
//当前位置即长度
filelen = ftell(fp); //数据长度
fclose(fp);
filelen = (tmpLen < filelen) ? tmpLen:filelen;
return filelen;
}
/*****************************************************************************************
功 能:获取JPEG图片数据的长度, 单位:字节
入 参:filename 文件名
出 参:数据的长度
=0 表示读取失败 或文件不存在
*****************************************************************************************/
unsigned int FatGetJpegLen(const unsigned char *filename)
{
FILE *fp;
unsigned int filelen;
fopen_s(&fp,filename,"rb");
if(fp==NULL)
{ //文件打开失败
return 0;
}
fseek (fp, 0, SEEK_END);
//获取文件当前位置
filelen = ftell(fp); //数据长度
fclose(fp);
return filelen;
}
/***************************************************************************************************
File : GUIConf.h
功 能: GUI高层配置
*/
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (1) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_UNICODE (0) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font6x8
#define GUI_ALLOC_SIZE 2048 /* Size of dynamic memory ... For WM and memory devices*/
/*****************************************************************************************
* Configuration of available packages
*/
#define GUI_WINSUPPORT 0 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 0 /* Memory devices available */
#define GUI_SUPPORT_AA 0 /* Anti aliasing available */
#undef WIN32
//****************************************************************************************
#endif
/*****************************************************************************************
文 件:GUITouchConf.h
*****************************************************************************************/
#ifndef GUITOUCH_CONF_H
#define GUITOUCH_CONF_H
#define GUI_TOUCH_SWAP_XY 0 //=0 xy轴不交换,=1交换
#define GUI_TOUCH_MIRROR_X 0 //x轴镜像
#define GUI_TOUCH_MIRROR_Y 0 //Y轴镜像
#define GUI_TOUCH_AD_LEFT 0 //AD转换的X最小值
#define GUI_TOUCH_AD_RIGHT 480 //AD转换的X最大值
#define GUI_TOUCH_AD_TOP 0 //AD转换的Y最小值
#define GUI_TOUCH_AD_BOTTPM 272 //AD转换的Y最大值
#define GUI_TOUCH_XSIZE LCD_XSIZE
#define GUI_TOUCH_YSIZE LCD_YSIZE
#endif /* GUITOUCH_CONF_H */
/*****************************************************************************************
文 件:LCDConf.h
功 能: LCD配置
*****************************************************************************************/
#ifndef LCDCONF_H
#define LCDCONF_H
/*****************************************************************************************
* General configuration of LCD
*****************************************************************************************/
#define LCD_XSIZE (480) //* X-resolution of LCD, Logical coor. */
#define LCD_YSIZE (272) //* Y-resolution of LCD, Logical coor. */
#define LCD_BITSPERPIXEL (16) //16位颜色 按565模式
#define LCD_CONTROLLER (1788) //控制器 LPC1788
//****************************************************************************************
#endif