UCGUI 联系客服

发布时间 : 星期一 文章UCGUI更新完毕开始阅读40228020aaea998fcd220e05

上面基本就讲清了GUI_TOUCH_Calibrate()这个校正函数的计算原理,用户可以调用这个函数进行运行时校正,只须提高一个点相应的两种坐标系统下面的坐标值,即可以计算出触摸屏边界相对于屏幕坐标系统的坐标. 公式[2]. Xl = (Xp - Offset)/Kx LCD坐标的原理.

这个公式将在第3点中说明.

3.触摸屏坐标与LCD屏幕坐标的转换计算.

[1].UCGUI中使用如下函数来进行转换, 其中xyMinMax数中存放的是触摸屏校正后的触摸屏边界相对屏幕坐标系统的坐标.

static int _AD2X(int adx);//Convert physical value into coordinates. static int _AD2Y(int ady);//Convert physical value into (logical) coordinates.

static int _AD2X(int adx) {

I32 r = adx - xyMinMax[GUI_COORD_X].Min; r *= GUI_TOUCH_XSIZE - 1;

return r / (xyMinMax[GUI_COORD_X].Max - xyMinMax[GUI_COORD_X].Min); }

static int _AD2Y(int ady) {

I32 r = ady - xyMinMax[GUI_COORD_Y].Min; r *= GUI_TOUCH_YSIZE - 1;

return r/(xyMinMax[GUI_COORD_Y].Max - xyMinMax[GUI_COORD_Y].Min); }

Xl = (Xp - Offset)

可以理解 _AD2X/_AD2Y这两个转换触摸屏坐标到屏幕LCD坐标的转换关系: [1].xyMinMax[GUI_COORD_X].Min/xyMinMax[GUI_COORD_Y].Min触摸屏坐标相对屏幕LCD坐标系的偏移值OffSet. [2].(GUI_TOUCH_YSIZE

-

1)/(xyMinMax[GUI_COORD_Y].Max

-

//这个公式就是从触摸屏坐标转换成

xyMinMax[GUI_COORD_Y].Min)即为转换比率Kx.

36

4.4-UcGui图像驱动分析

相比于上面的触摸屏校正计算,UCGUI中的图形驱动没有什么计算方法问题,须要移值UCGUI时提供相应的图形驱动接口实现即可,但针对多种不同的LCD控制器,因为提供的功能强弱不同,所以差别还是比较大的,而且UCGUI中LCD控制器有大量的配置宏.

本文将对实际的LCD驱动为例来讲解UCGUI中的LCD的配置以及LCD驱动接口,从而让移值的用户能够更加明白移值过程. 1. UCGUI在驱动层的接口如下:

void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);//画点.. unsigned int LCD_L0_GetPixelIndex(int x, int y) ; //取点.. void LCD_L0_XorPixel(int x, int y);//反色画点?

void LCD_L0_DrawHLine (int x0, int y, int x1); //水平线? void LCD_L0_DrawVLine (int x, int y0, int y1); //竖直线? void LCD_L0_FillRect(int x0, int y0, int x1, int y1); //矩形填充?

void LCD_L0_DrawBitmap(int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine,

const U8* pData, int Diff,

const LCD_PIXELINDEX* pTrans);//位图?

static void _DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans);//单色位图?

static void _DrawBitLine2BPP(int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans); //2色位图?

static void _DrawBitLine4BPP(int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans); //4色位图?

static void _DrawBitLine8BPP(int x, int y, U8 const * p, int xsize, const

37

LCD_PIXELINDEX * pTrans); //8色位图?

static void DrawBitLine16BPP(int x, int y, U16 const * p, int xsize, const LCD_PIXELINDEX * pTrans); //16色位图?

在写驱动时最基础的是画点函数,其它所有的图形都可以通过调用画点函数完成,这可以是初期的时候;但是到优化阶段的话,则必须进行优化. 2.驱动的优化问题

[1].水平线/竖直线的优化:

如果是控制器上点是横排的,则可以优化水平线;如果是纵排的,则可以优化竖直线,比如以13xx系列的一个象素占用1 Bit的,总线宽度是8 Bit,则优化水平线一直画八个点;如是是15xx系列的,则可以优化竖直线一次画八个点。优化时有三点原则: (一) (二) (三)

尽量避免多次的调用函数,使用宏来定义画点的代码. 尽量根据总线宽度,画多个点.

如果硬件上有加速功能则使用硬件上的加速.

第五章.总结

嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,

适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。随着时间的推移,嵌入式已经越来越多的出现在我们生活中,可以说,嵌入式的到来是个不可逆转的潮流,势必让INTEL当年的辉煌再一次重现。而用户图形接口GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是可用用通过窗口、菜单、按键等方式来方便地进行操作。嵌入式GUI更是具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。这次的课题就是紧紧围绕着嵌入式的用户界面展开。通过本次实践,我初步掌握了以下几点。

38

1.嵌入式操作系统有那些,怎么分类,分别适合什么领域。(uCos2是RTOS可抢占内核型)

2.移植操作系统要注意哪些方面的问题。(像我这次使用的uCos2是开源的,所以把更多注意力放在哪些是我们需要修改的地方)

3.UcGui在开发板上是怎么来实现的。(通过一个基本库,里面包含我们平时最基本的图形,然后在应用时根据坐标,大小进行组合)

可以这么说,UcGui的本身移植并不难,但是要求比较熟悉硬件,也发现我们这代学生在动手能力上还是有所欠缺,以后我会去更多的了解一些硬件和它们的基本的参数。还需要熟练在这次课题中用到的VC开发环境和MDK开发环境,相信对以后的工作会十分有帮助。

参考文献

【1】邵贝贝 嵌入式实时操作系统μC/OS-II(第2版) 北京航空航天大学出版社 【2】陈渝 李明 杨晔 源码开放的嵌入式系统软件分析与实践——基于SkyEye和ARM开发平台 北京航空航天大学出版社

【3】王洪辉 嵌入式系统Linux内核开发实战指南(ARM平台) 电子工业出版社 【4】周立功 ARM嵌入式系统基础教程(第2版) 北京航空航天大学出版社 【5】李无言 一步步写嵌入式操作系统—ARM编程的方法与实践 电子工业出版社 【6】刘洪涛 ARM嵌入式体系结构与接口技术 人民邮电出版社

【7】倪旭翔 计春雷 ARM Cortex-A8嵌入式系统开发与实践:WinCE与Android平台

中国水利水电出版社

39