UCGUI在at8951单色液晶

UCGUI在at8951单色液晶
UCGUI在at8951单色液晶

超级好的移值过程介绍: μC/GUI 在 MSGl9264 液晶上的移植
μC/GUI 在 MSGl9264 液晶上的移植
μC/GUI 是美国 Micrium 公司出品的一款针对嵌入式系统的优秀图形软件。与 μC/OS 一样,μC/GUI 具 有源码公开、可移植、可裁减、稳定性和可*性高的特点[1]。采用 μC/GUI,开发人员可以很方便地在液 晶上显示文本、曲线、图形以及各种窗口对象如按钮、编辑框、滑动条等,可完全产生类似于 Windows 的 显示效果。另外,μC/GUI 提供了在 VC 下的仿真库,这使得用户完全可以在 Windows 下仿真 μC/GUI 的 各种效果。 采用 μC/GUI,可以大大降低嵌入式系统中显示设计的难度,但 μC/GUI 的使用需针对不同的液晶编写相 应的驱动程序才能实现。本文通过移植 μC/GUI 到 MSGl9264 液晶的过程,介绍了 μC/GUI 移植的原理以 及移植中应注意的事项。 1 开发工具和运行环境 为了实现 μC/GUI 的移植,选用 MSP430F149。MSP430F149 是一款 16 位超低功耗单片机,具有强大的处理 能力(RISC 结构、125ns 的指令周期)和丰富的片内外设(如硬件乘法器、ADC、定时器、看门狗等)。 它内 部具有 2KB 的 RAM 和 60KB 的 FLASH,能基本满足 μC/GUI 运行的需要[2]。 软件开发环境采用 IAR 公司的集成开发环境 IAR EW430 2.10A。相对于较早的 EW430 1.26A 版本,2.1 0 版本在各个方面有了较大改进,尤其是项目管理和调试上有了较大的改动,这使得移植 μC/GUI 更加方 便。
2 μC/GUI 移植 μc/GUI 针对不同的液晶控制器提供了多种驱动程序,如 KS0713、SEDl335、T6963 等控制器都有对应的 液晶驱动程序。但在很多情况下,用户采用的液晶,μC/GUI 并没有提供其对应的驱动程序,需自己着手 编写特定液晶的驱动程序。 2.1 液晶显示器工作原理

为了能编写正确的液晶驱动程序,了解相应液晶的显示原理非常重要。本文采用的 MSGl9264 液晶为 192x 64 点阵单色液晶,其中包含一个行驱动器 KS0107B 和三个列驱动器 KS0108B,每个列驱动器 KS0108B 对应 一块 64x64 的液晶[3]。 MSGl9264 液晶的控制线为 R/W、RS、CSA、CSB 和 LCDEN,数据线为 D0~D7。RS 用于指示当前的操作是数 据还是寄存器, R/W 用于表明当前是读还是写, CSA、 用于选择相应的列驱动器(其选择关系可见图 1)。 CSB RS 和 R/W 的功能可见表 1,液晶显示器的读写时序见图 2。 MSGl9264 模块一共提供 7 种指令(由 RW、 及数据总线的电子决定), RS 用于对该模块状态及显示进行控制。 这 7 种指令包括显示开关控制、设起始行、设起始列、设页地址、读状态、读/写显示内容。通过这些指 令的组合,可以控制液晶显示各种图形。
2.2 μC/GUI 结构
MSP430F149 是一款低功耗单片机,其供电电压为 1.8~3.6V,而 MSGl9264 液
晶为 5V 供电液晶,输入高电平为 3.3V。为确保与液晶的输入电平兼容,MSP430F149 的供电电压可设置

为 3.6V,这样就可以把 MSP430F149 与液晶直接连接而无需额外的驱动芯片。MSP430F149 与 LCD 的接口 电路如图 4 所示。 μC/GUI 提供的函数库和各种显示效果都是通过表 2 所示接口函数在 LCD 上实现, 所以 LCD 驱动文件的实现也就是把这些硬件接口函数的实现。 由于 MSGl9264 液晶与 μC/GUI 提供的 LCD SLin 较相似,所以笔者以 μC/GUI 提供的 LCDSLin.C 文件为基础,编写针对 MSGl9264 液晶的驱动程序。 μC/GUI 的软件体系结构如图 3 所示。μC/GUI 函数库为用户程序提供 GUI 接口,包含的函数有文本、数 值、二维图形、输入设备以及各种窗口对象。其中,输入设备可以是键盘、鼠标或触摸屏;二维图形包括 图片、直线、多边形、园、椭圆、圆弧等;窗口对象包括按钮、编辑框、进度条、复选框等。μC/GUI 函 数库可以通过 GUIConf.h 文件进行配置,配置的内容包括是否采用内存设备,是否采用窗口管理器,是 否支持操作系统、触摸屏,以及配置动态内存的大小等。 在 LCDConf.h 文件中定义了与硬件有关的各种属性,如液晶的大小、颜色以及与液晶的接口函数。而 LC D 驱动文件则负责把 μC/GUI 的各种函数解释成 LCDConf.h 文件中定义的液晶接口函数,这个文件与具 体的硬件连接无关。 μC/GUI 与 LCD 的硬件接口通过驱动文件把硬件接口函数转化为 LCDConf.h 中定义的 LCD 读写函数。 2.3 移植过程 2.3.1 修改 LCDConf.h LCDConf.h 定义了 LCD 的大小、颜色,对应的 LCD 控制器以及与硬件连接有关的 LCD 读写函数。按照 μC /GUI 的规定, 底层的读写 LCD 函数包括 LCD_WRITE_A1()(即写 LCD 命令)、 LCD_WRITE_A0()(写 LCD 数据)、 LCD_READ_A0()(读 LCD 状态)、LCD_READ_A1()(读 LCD 数据)。这些函数的实现与底层硬件有关,必须根据 硬件连接的具体情况编写这些函数。

LCD_WRITE A1()函数的具体实现如下: #define LCD_WRITE_A1(Byte) //定义写 LCD 控制命令函数 { //参数 Byte 为要写入液晶的数据。 P40UT:Byte; //把数据放到 LCD 的数据线上 _NOP(); //空指令,确保能可*地写入 P1OUT&=0xef; //LCDRS=0,表示写命令 P10UTI=Ox20; //LCDEN=1 _NOP(); //空指令 P1OUT&=0xcf; //LCDEN=0,把数据写入 LCD 显示 RAM _NOP(); }

2.3.2 编写 LCD 驱动文件 图 3 中的 μC/GUI 硬件接口函数主要由表 2 所示函数构成。
通过分析 LCDSLin 文件可以发现,液晶驱动程序的核心是画点函数,大部分硬件接口函数都可由画点函数 实现。因此,改造画点函数及其调用函数成为移植的重点问题。 画点函数的要求是改变液晶上任意点的颜色而不影响其他点的颜色。考虑到单片机 MSP430F149 的输入电 压不能超过 3.6V,笔者没有采取读液晶显示器内部显示 RAM 的方法,而是在 MSP430F149 的 RAM 中定义一 个数组存储 LCD 显示的数据。 此数组可定义为 unsigned char Cache[((LCD_YSIZE+7)>>3)xLCD_XSIZE]。 L CD_XSIZE、LCD_YSIZE 表示液晶的大小,在 LCDConf.h 文件中定义。考虑到液晶的长度可能不是 8 的整倍 数,可定义数组大小为(LCD_YSIZE+7)>>3)xLCD_XSIZE。 在定义了 Cache 的基础上,画点函数可如下实现: static void_SetPixel(int x,int y,LCD_PIXELINDEX c) { //画点函数 U8 Mask=1<<(y&7); //屏蔽字 int Adr=XY20FF(x,y); //由 x,y 的绝对位置得到 Cache 中的相对位置 //XY20FF(x,y)可被定义为((y>>3)+x×((64+7)>>3)) U8 CacheByte=Cache[Adrl; //获得显示 RAM 的数值

if(c) //根据颜色修改显示 RAM 的值 CacheBytel=Mask; //对应位“置 1” else CacheByte&=~Mask; //对应位清零 LCD_WRITE(Adr,CacheByte); //把 CacheByte 写入液晶显存并更改 Cache[Adr]的值为 CacheByte } 函数的参数 x,y 代表要画点的位置(x 为横坐标,y 为纵坐标),参数 c 代表要画点的颜色。在函数内部, U8 为 μC/GUI 提供的数据格式(相当于 unsigned char),Mask 为屏蔽字,Adr 为 x,y 对应显示 Cache 的 地址。 以把液晶的(5,5)处点亮为例,此时 x=5,y=5,c=1,可计算出 Mask=00100000,Adr=40(表示在 Cache[4 0]处存有(5,5)点的颜色值)。由于 c=1,所以应把 Cache[40]中对应位“置 1”,这是通过 CacheByte 的 值“或”上 Mask 的值 00100000 实现的。最后通过调用 LCD_WRITE 函数把得到的新 CacheByte 值写入液晶 对应的地址即可点亮该点。类似地,若要使某点不亮(c=0),则应该把对应位“清零”,这可以通过 Cach eByte&=~Mask 这条命令实现。 画点函数中调用的 LCD_Write 函数可如下实现: static void LCD_Write(int Adr,U8 Byte){ if(CacheIAdrl!=Byte){ //若写入值与原值不符则 把写入值保存到显示 RAM 中 Cache[Adr]=Byte; if(LCD_Adr!=Adr){ LCD_SETADR(Adr); //设置液晶的起始行、起始列和 CSA、CSB } LCD_WRITEl(Bytc); }}

由于此液晶由三块 64x64 的液晶组成,LCD_SETADR 函数除了设置液晶的起始行、起始列外还应根据 Adr 的值设置 CSA 和 CSB 的值,才能写到对应的液晶屏上。此外,在 LCD_WRITEl()函数中通过调用 LCDConf.h 文件中的 LCD_WRITE_A1()和 LCD_WRITE_A0()实现液晶显示。 除了_SetPixel()函数,基本函数还包括_GetPixel()函数和 XorPixel()函数。_GetPixel()函数可以返回 指定点的颜色信息,XorPixel()则可以对指定点颜色取反,实现“反白”的效果。由于这两个函数较简单, 这里不再给出具体代码。 以函数_SetPixel()、_GetPixel()和 XorPixel()为基础,结合 MSGl9264 液晶的 7 种指令就可以实现表 1 所给的硬件接口函数,以此构成了 LCD 驱动文件。 表 1 RS 和 R/W 的功能
RS 0 0 1 1
R/W 0 1 0 1 写命令
功 能
读液晶状态(主要用于判忙) 写液晶的显示 RAM 数据 读液晶的显示 RAM 数据
3 讨论 为了能使用 μC/GUI, 必须调用 GUI_Init()初始化。 与硬件有关的初始化如 CPU 时钟频率的选择等既可以 放在 GUI_Init()中,也可以单独编写一个函数初始化。 表 2 硬件接口函数的名称和功能
函数名称 LCD_L0_InIt() LCD_L0_ReInIt() LCD_L0_OFF LCD_L0_ON LCD_L0_DrawBitmap() LCD_L0_DrawPixel() LCD_L0_DrwaVline() LCD_L0_DrwaVline() LCD_L0_FillRect() LCD_L0_XorPixel()


显示初始化 重新初始化而不擦除显示内容 关显示 开显示 画图 以指定颜色画点 画水平线 画垂直线 填充一矩形 翻转指定点颜色
调试时应从基本的显示字符串开始,逐渐增加显示的功能和复杂度。

由于笔者采用单色液晶, 在 LCDConf.h 中定义 LCD_FIXEDPALETFE 为 1;若为彩色液晶,应根据液晶支持 的颜色设置 LCD_FIXEDPALETYE,具体可参考手册。 若使用窗口对象,则在 GUI_Conf.h 中定义 GUI—WINSUPPORT 为 1。 在 GUIConf.h 中定义 GUI_ALLOC_SIZE 为动态内存的大小,应根据需要合理选择。窗口对象(如按钮)的创 建需要申请内存,若申请不到内存则无法创建,相应地创建函数值为 0。可由此判断 GUI_ALLOC_SIZE 已经 不能满足需要, 一方面可以考虑增加 GUI_ALLOC_SIZE(受制于芯片内存的大小); 另一方面也可以删除不用 的窗口对象,释放内存,再创建新的窗口对象。 采用内存设备能有效克服闪烁现象,获得更快的显示速度,但它需要额外的内存。由于 MSP430F149 内存 较小,笔者没有采用内存设备。 可以设置窗口对象的默认字体及颜色以获得更好的显示效果。在单色液晶中,简单地改变背景颜色和字体 颜色即可获得反显效果。 可以通过 μC/GUI 提供的软件(位图转换器和字体转换器)转换需要的图像或字体为 μC/GUI 格式。 由于定义的 Cache 占用了大量的 RAM,若从液晶读回显存的值则可以省去 Cache 占用的 RAM,但同时也会 降低系统运行的速度。 在 LCDConf.h 文件中定义了与硬件连接有关的 LCD 读写函数,在液晶驱动文件中调用这些 LCD 读写函数。 这样做的好处是使驱动文件与硬件无关, 一旦一种液晶的驱动编写完毕可以很方便地移植到各种系统中而 只需更改 LCDConf.h 即可。
研究 uC/GUI, 构思新的嵌入式 GUI,有挑战性,爽....... 网名:ucgui 邮件:https://www.360docs.net/doc/f817373063.html,@https://www.360docs.net/doc/f817373063.html, QQ: 106719880 UCGUI 研究学习群--12111753 请支持本站 GOOGLE 上的 AdSense 广告.... 上面那个转贴已经很详细的说明了 UCGUI 的移值过程,把 UCGUI 的移值所要做的工作全部都从头到尾,从深 到浅讲了一遍,并且让读者知道了 UCGUI 的驱动的机制,把其对上的接口讲了, 而且对下 LCD 硬件的接口也 讲了, 我想多数人看了就会明白 UCGUI 的驱动应该如何写了. 以后大家写简单总线型的驱动, 在 UCGUI 中必须完成的接口如下: [通常情况下并不是所有结口都要实现, 但是有一个是必须实现的, 就是向 LCD 写数据及写命令这两个接 口]

void LCD_X_Write00(char c);//传命令, 必须实现... void LCD_X_Write01(char c);//传数据, 必须实现... char LCD_X_Read00(void);//读数据或是状态, 不是必须... char LCD_X_Read01(void); #define LCD_WRITE_A1(Byte) LCD_X_Write01(Byte) #define LCD_WRITE_A0(Byte) LCD_X_Write00(Byte) #define LCD_READ_A1(Byte) Byte = LCD_X_Read01() #define LCD_READ_A0(Byte) Byte = LCD_X_Read00() 读的接口不一定要实现, 有的硬件控制器不支持从 LCD 读回数据, 此时一般会用到数据缓冲, 将写到 LCD 的数据缓存起来. 所有的驱动函数, 最终的数据都是通过如下接口写入 LCD 或是从 LCD 读取的. 这里我再进一步的将与 LCD 硬件部分相关的再补充几点: 1.数据/指令到 LCD 控制器的传送. 2.传送数据前如何设定前列地址. 3.初始化工作. 另外, 还提供了有关这种 LCD 屏幕的两个应用说明资料如下:
https://www.360docs.net/doc/f817373063.html,/ucgui/LM19264A-AppNote-V0.1.pdf https://www.360docs.net/doc/f817373063.html,/ucgui/LM19264D-AppNote-V0.1.pdf
以及 LCD 屏的说明资料:
https://www.360docs.net/doc/f817373063.html,/ucgui/LM19264BBC-Manual-Rev0.1.pdf
以及此种 LCD 模块的驱动,仅供参考:
https://www.360docs.net/doc/f817373063.html,/ucgui/lcd19264.rar
一.液晶显示屏的区域

发送图片到手机 二.命令集

发送图片到手机 三.硬件连接图

发送图片到手机 四.驱动截图

发送图片到手机

UCGUI移植教程

UCGUI在STM32上移植教程 1说明 ●开发板芯片型号STM32F103VET6 ●板载液晶型号ILI9341 ●所需准备资料UCGUI3.90源码 ●一个工程模板 为了节约时间,此处所用模板为野火M3工程模板(3.5.0) 制作时间---2013-08-07 By NUAA---Kylin 2移植过程讲解 2.1首先打开工工程模板,页面如下,这个模板工程很简单

2.2在工程模板中新建两个文件夹 2.2.1命名为GUI与Mylib 2.2.2在GUI文件夹下添加以下内容 ●上述图片为UCGUI3.90源码中的一些文件夹 ●进入UCGUI3.90源码文件夹/Start,将Config文件夹原封不动的拷过来 ●进入UCGUI3.90源码文件夹/Start/GUI文件夹,将其中所有文件夹拷过来 ●在GUI文件夹下新建GUI_X文件夹,进入UCGUI3.90源码文件夹/ Sample/ GUI_X文件夹 中,如果带操作系统应该拷贝GUI_X_uCOS.c,如果不带操作系统拷贝GUI_X.c,在这里我们将将GUI_X.c拷贝到新建GUI_X文件夹。

2.2.3各文件夹说明 1)AntiAlias:9个C文件,主要用于抗锯齿的显示效果。 2)ConvertColor:彩色显示的色彩转换支持。 3)ConvertMono:(b/w)和灰度显示的色彩转换支持。 4)Core:核心文件,提供了GUI基本的功能。 5)Font:字库。 6)JPEG:图片操作函数。 7)LCDDriver:LCD驱动程序 8)MenDev:Memorydevice 支持。这个东西可用在很多情况下,但最主要的功能是防止在 项目重叠时,防止屏幕的闪烁。 9)Widget:窗体控件库。 10)WM:窗口管理库。 11)Config:配置文件。 12)GUI:源代码。 13)GUI_X:操作系统接口函数。 2.3添加组及源文件 2.3.1将GUI文件夹下的所有文件夹添加到GROUP 右键工程工程项目名选择manage components将这些组全部添加上如图

液晶常见知识问答

液晶能用直流电驱动吗? 直流驱动或驱动电路中直流分量较大,对液晶显示器寿命有很大影响,交流驱动是场效应,不存在带电粒子的迁移,而直流驱动是存在电子的迁移,当电压达到一定程度(如 3V )在两个电极表面即会发生电化学反应,如还原电极物质,破坏液晶,产生气泡等。因此在使用液晶显示器时,应尽量避免电路中的直流成 灌注液晶如何选择合适的真空度? 液晶灌注时,选择何种温度和真空度合适,这是一个工艺问题,各厂有各厂的不同考虑和习惯,这里只能从液晶性质方面考虑来谈一些。提高温度可降低液晶粘度,增加流动性,降低表面张力,对消除气泡、减少灌注时间有好处,在真空中加热温度不太高,对液晶品质不会带来很大的影响。 液晶虽然很难挥发,在高真空下还是可挥发的,尤其是含有 PCH-32 (降粘度用)的液晶,挥发性比其他液晶大 10 倍,长时间在高真空下使用,成分会发生改变,应加以注意。 如何选择存放液晶的容器? 硬质玻璃是指作化学试验烧器用的玻璃,如烧杯烧瓶等,所用的是一种高硅高硼的玻璃,如95料B40料等,这类玻璃耐热耐化学腐蚀,能用来盛放液晶,而我们普通用盛放药品的玻璃瓶,材料是钠玻璃,把这种玻璃打碎加入纯水一煮,水就变成明显的碱性,这类玻璃容器存放液晶半年电阻率会下降一倍(1×1011 5×1010) 液晶的最佳保存条件? 液晶保存最好条件是密封、避光、干燥、室温。有的厂将液晶和PI 等放在冰箱中这样作没有好处,由冷处到热处很容易吸收潮汽。冰箱是一个密闭体系,PI 等都有易挥发溶剂,挥发出会被液晶吸收,影响品质。石家庄永生华清液晶有限公司的推荐保存条件为:相对湿度<50%RH ;室温:15—25℃;避光密封。

关于uCGUI移植详解

关于uCGUI在STM32上的移植移详解 首先我们得知道啥是μC/GUI: 它是一种用于嵌入式应用的图形支持软件。它被设计用于为任何使用一个图形LCD的应用提供一个有效的不依赖于处理器和LCD 控制器的图形用户接口。它能工作于单任务或多任务的系统环境下。 μC/GUI 适用于使用任何LCD 控制和CPU 的任何尺寸的物理和虚拟显示。 它的设计是模块化的,由在不同的模块中的不同的层组成。一个层,称作LCD 驱动程序,包含了对LCD 的全部访问。因为它100%由ANSI 的C 语言编写的,μ所以C/GUI 适用于所有的CPU。 我们知道windowsXP的操作界面,是通过窗口、按钮、等来对计算机进行操作,同样,我们所讲的uC/GUI也能实现类似效果。 在网上找了些教程,但是讲述的不够详细,导致我在移植过程中遇到了很多问题,自己重头开始自己一点点移植,遇到的问题也只能靠自己解决,终于在忙活了一天后把它搞定了。希望对初次进行移植的同学能有所帮助。下面是我的吐血总结: 所需工具:1、uC/GUI v3.90 尽量找到没有修改的源码 2、一个硬件开发平台、LCD底层驱动程序,我使用的是STM32F103ZE+TFT3.2寸LCD 3、MDK开发软件(就是Keil) 4、一个编译无误的工程模板 4、uC/GUI相关的中文手册 移植步骤:

第一步:首先,得把你的LCD底层驱动写好,既在裸机下,可以正常显示。 通常只需3个底层驱动函数: LCD_SetPoint(u16 x,u16,y,int color);//设置某点,及颜色 LCD_GetPoint(u16 x,u16 y); //读取某点及颜色返回 LCD_Init(); //LCD初始化硬件函数,这里改成其他名字如LCD2_Init();防止和 uC/GUI冲突 第二步:向事先准备好的工程中加入uC/GUI文件夹,在工程设置中包含相应头文件 工程目录如下: 第三步:配置LCDConf.h、GUIConf.h、GUITouchConf.h(由于我没使用触摸功能,此配置在此不讲。) 配置LCDConf.h文件如下:LCD的设置 #ifndef LCDCONF_H #define LCDCONF_H #define LCD_XSIZE (320) //配置TFTLCD的水平分辨率 #define LCD_YSIZE (240) //配置TFTLCD的垂直分辨率 #define LCD_CONTROLLER (-1) //为什么是-1?接下来讲 #define LCD_BITSPERPIXEL (16) //每个像素的位数

uCGUI 汉字显示技巧及总结

UCGUI的基础应用 汉字显示 在uC/GUI中显示汉字,必要的一个步骤就是汉字取模。通常有两种方法: 一、单个字模法:使用字模取模软件,进行单个字的取模。此方法可应用于显示汉字字 数较少的情况下。其优点是:占用存储空间小,无冗余。但当显示汉字字数较多时,该方法则非常繁琐。 二、字模库法:该方式需要移植整个汉字字库,若项目要求需显示多种汉字字体,则需 移植多种字体的字库。其优点是:操作方便。若嵌入式系统的FLASH存储容量够大时,该方式可行。 根据作者多年的项目实践,找到一个兼具上述两种方式优点的显示方案:利用UCGUIFontTool软件,提取windows自带的字模库。该方法的使用步骤: 1、将项目中所要显示的汉字根据字体进行分类并汇总。 2、使用UCGUIFontTool软件分别提取上述字模。 3、将所产生的.C文件添加到工程中。 4、更改gui.h中的配置,添加该汉字的宏定义,如图 5、显示汉字前更改需显示的字体,如图 6、利用函数进行显示。 该方法移植方便,易实现同时显示多种字体,无字模冗余,占用存储空间最小。图片显示 uC/GUI提供了位图的解决方案,在GUI显示图片时,需先将其他格式的图片转换为bmp格式。可利用windows系统自带的画图软件打开一个图片,再另存为bmp格式,继而转换为.c 格式文件加入到工程中。其操作步骤如下: 1、将其他格式的图片另存为bmp格式。 2、打开UCGUI源码自带的工具uC-GUI-BitmapConvert,选择相应参数,并转换为.c文件。 3、将该.c文件加入到工程中。 4、添加外部变量,并调用相应函数进行显示。如图 5、也可UCGUI提供的缩放函数可对图片进行缩放显示。如图

液晶电视显示屏常见故障分析与维修

-98- 液晶电视显示屏常见故障分析与维修 惠州市技师学院 夏 威 【摘要】文章主要是针对液晶电视显示屏的常见故障分析和维修的。本文通过具体的案列,对故障产生的原因以及如何排除故障进行详细的阐述,希望对从事液晶电视故障维修的技术人员有所帮助。 【关键词】液晶电视;显示屏;故障分析与维修 液晶显示器,简称LCD。世界上第一台液晶显示设备出现在20世纪70年代初,被称之为TN-LCD(扭曲向列)液晶显示器。液晶是一种介于固态和液态之间的物质,是具有规则性分子排列的有机化合物,如果把它加热会呈现透明状的液体状态,把它冷却则会出现结晶颗粒的混浊固体状态。正是由于它的这种特性,所以被称之为液晶(Liquid Crystal)。用于液晶显示器的液晶分子结构排列类似细火柴棒,称为Nematic液晶,采用此类液晶制造的液晶显示器也就称为LCD(Liquid Crystal Display)。液晶电视图像显示原理是在两张玻璃之间的液晶内,加入电压,通过分子排列变化及曲折变化再现画面,屏幕通过电子群的冲撞,制造画面并通过外部光线的透视反射来形成画面。液晶电视拥有16.7百万的色彩,画面层次分明,颜色绚丽真实。[1] 液晶电视显示屏常见故障主要有“黑屏”、“白屏”、 “花屏”、等。还有一些如裂痕、划伤等无法修复的屏故障。本文主要从可修复的显示屏故障进行分析故障与维修。 一、液晶电视机显示屏的常见故障及检修方法 (1)显示屏亮一下就不亮了,电源指示灯绿灯常亮。这种问题一般是高压异常造成的,保护电路动作。这种情况“斜视”液晶屏上是有显示的。 (2)显示屏黑屏,可分为背光亮和背光不亮两种情况。如果背光不亮,而电源灯绿灯常亮,通过“斜视”液晶屏有显示图像,一般是背光源供电电路问题。重点检查12V供电(保险丝F)和3V或5V的开关电压是否正常。修理的思路(电源保险丝——开关控制管——电源管理IC——电源开关管——DA转换电路(储能电感,整流管)——LC升压电路(升压变压器,升压电容)——耦合电容——灯管。 如果背光亮,通过“斜视”观察液晶屏无显示图像,则可判断为液晶屏驱动故障。此时首先应检查DC-DC转换器供电是否正常,如果DC-DC转换电路输出电压异常,则检修DC-DC转换器,如果正常,则应重点检查时序控制电路的输出信号,如使能信号(EN),锁存信号(LP)和移位信号(CP)等。如果以上信号异常,则检查Timing Controller芯片是否正常工作,是否有引脚虚焊或芯片损坏。如果时序控制电路的输出信号正常,DC-DC供电正常,则问题一般出现在行、列驱动芯片上。行、列驱动在Source-PCB上,显示屏厂家将其和液晶屏一起捆绑销售,因此无论是Panel损坏或这种芯片损坏,没有配套芯片和专业设备无法维修。 (3)屏幕亮线,亮带或者是暗线。这种一般是液晶屏的故障。液晶显示器需要用电压控制产生灰阶,而薄膜晶体管的作用相当于一个开关,其主要决定LCD source driver 上来的电压是否充到这个像素点,以及这个像素点需要充到多高的电压,以此来控制该点液晶分子转向,进而控制显示相应的灰阶。 如图1中所示,常见液晶屏有1024列,768行。每个像素点包含3个子像素,分别是R、G、B。因此液晶屏的驱动芯片一般会有多颗,分别控制不同区域的液晶分子偏转,以此显示画面。如果排除柔性电路板开路,则通常的亮 线,亮带都是相应区域的行或者列驱动芯片损坏,因此解决办法是找到配套IC进行更换。 图1 液晶显示屏(panel)内部构造图 从上述分析可知,如果出现亮线等故障,首先检测是否是连接液晶屏的TAB柔性电路板开路,如果柔性电路板开路,则需要生产厂家的专业维修工具进行维修。 暗线一般是液晶屏本身有漏电,或者TAB 柔性电路板连线开路。以上两种问题都属于液晶屏的问题,需要特定的设备维修,或者更换液晶屏。 (4)花屏或者是白屏。 这种情况通常是屏的驱动电压出现问题,首先更换驱动板和驱屏线,若不行检查液晶电视背光供电电路。基本思路为,检查驱动板5V 转3.3V的稳压块是否有供电输出,检查屏体驱动板保险丝,检查DC-DC转换电路,检查负压形成IC,检查行、列驱动IC。 (5)LCD屏幕内部有污点,主要是由污染造成。维修方法是擦拭或更换保护膜——拆开屏体清洗外层偏光片和有机玻璃(用棉球,纯净水处理)——风筒吹。 (6)LCD屏漏光或光线不均,主要是背光出现故障。此种情况需重新安装调整光源、导光板和光学膜片位置。 (7)LCD屏亮点。一个或二个大的亮点,可以尝试轻轻用指尖压亮点,如果亮点消失,说明多为此象素的开关管和电极虚连。小的黑点和灰点有可能是内部导光板或偏光片有灰尘造成(清洗处理)。如果是有单点或者多点不亮,则检测控制脚是否与本行短路。如果采用“直下式”结构的背光源,则检测背光中是否有单颗或多颗LED灯损坏。 (8)LCD屏亮度低。可以检查高压板亮度调节电路,或者更换背光源。 (9)LCD显示屏显示混乱,如显示下一屏正常或完全混乱。 液晶显示模块电路中的控制信号是用来接收控制系统发来的数据信号和操作信号。如图2所示,由时序控制电路(Timing Controller)控制行驱动器和列驱动器动作,由DC-DC转换器提供给行驱动芯片、列驱动芯片工作电源。时序控制电路中信号一般有时钟信号(CLK)、数据信号(DATA)、行控制信号(HS)、列控制信号(VS)、锁存脉冲信号(STB)、使能信号(EN)和移位脉冲信号(CP)等。 如果出现显示混乱,应该检测时钟信号(CLK)和锁存信号(LP)是否短路,通常这种情况是以上两个信号短路或者无输出造成。 (10)显示屏显示缺色。检测数据输入(DATA_IN)和数据输出(DATA_OUT)是否正常,然后检测是否某一路颜色信号(如红色)短路,然后再检测相应的行、列驱动IC是否有短路、开 路和虚焊的现象。 (11)行扫描时,两行或几行同时点亮。检测数据信号之间是否短路。 其他常见问题较多的是显示画面部分区域明亮,部分区域较暗现象。这种一般是背光源的问题,对于冷阴极萤光灯(CCFL)来说,一般是部分灯管损坏或者电路问题,需要检修背光源。对于LED等来说,由于LED背光源目前都采取单侧或者双侧入光,连接方式是串并联结合,如果一组串联的LED出现问题,虽经过导光板和光学膜片作用后,仍然表现为显示屏显示画面时部分区域偏暗。这种也需要检修背光源或者更换LED。 还有一些MCU问题,包括软件和硬件问题,软件问题可通过重写MCU程序恢复,硬件问题则需更换MCU。 以上总结了液晶电视机显示屏的常见故障及检修方法,对于不同型号的液晶电视机,维修思路基本相似。 二、维修实例 故障机为TCL LCDC32F220电视机,机芯主芯片型号为MST6M181,显示屏型号为LTA320AN02-X02 60HZ HD ,其中模拟机芯电源信号框图如图2所示,电源板控模块如图3。 源板控模块如图3。 图2 电源功 能框图 图3 电源板控模块 以下从该机显示屏“花屏”、“白屏”和“黑屏”三方面进行分析检修。 (1)显示屏“花屏” 出现“花屏”现象时,首先检查驱屏线是否连接正常以及驱屏线本身是否良好,如果驱屏线正常,连接也正常,则检查U12输出网络部分,检修思路,如图4所示。 图4 花屏维修思路

LCD液晶屏接屏的三大常见症状、五大问题及对应的解决方案

LCD液晶屏接屏的三大常见症状、五大问题及对应的解决方案 由于LCD背景照明组件中的变压器在关机一定时间后依然可能带有1000V高压(尽管是微电流的),而非专业人员如果处理不好可能造成组件新的故障。 常见症状一:液晶拼接屏上会出现杂波杂点状的现象。解决方法:出现上述情况很可能是由于液晶拼接屏与显卡的连接线出现了松动,只要把连接线牢牢的接好,杂波杂点的状况就能得到好转。 常见症状二:屏幕上出现不规则、间断的横纹解决方法:检查显卡是否过度超频,若显卡过度超频使用经常会出现上述情况,这时应该适当降低超频幅度,但要注意,首先要降低显存的频率。 常见症状三:若出现花屏,但上述两招使用之后未能生效解决方法:出现上述情况之后,用户就得查检显卡的质量了。用户可以检查一下显卡的抗电磁干扰和电磁屏蔽质量是否过关。具体办法是:将一些可能产生电磁干扰的部件尽量远离显卡安装(如硬盘),再看花屏是否消失。若确定是显卡的电磁屏蔽功能不过关,则应更换显卡,或自制屏蔽罩。 LCD液晶屏 另外,LCD无论是出现什么问题,都禁止自行装配液晶拼接屏(特别是对一般DIY兴趣者更是如此),一旦液晶拼接屏工作不正常可以找厂商帮助解决。LCD显示屏十分脆弱娇贵,抗撞击能力差。这是因为LCD中含有很多精密玻璃元件和敏捷娇气的电气元件,一旦受到强烈撞击就会导致LCD屏幕以及其它相关部件损坏。 第一大问题:首先我们需要检查液晶拼接屏显卡的连线是否出现了松动。由于接触不良从而导致出现“杂波”、“杂点”状的花屏就是最常见的现象。 第二大问题:检查显卡是否出现了过度超频。假如由于显卡过度超频使用,通常就会会出现不规则、间断的横纹。而这时候我们需要适当的降低超频的幅度。注意,首先必须要降低显存频率。 第三大问题:检查液晶拼接屏的分辨率或者刷新率是否都出现了设置过高。而液晶拼接屏的分辨率通常都是低于CRT显示器,假如超过了厂家所推荐的最佳分辨率,那么就极有可能会出现花屏的现象。 第四大问题:检查显卡的质量。假如在更换显卡后出现花屏的问题,同时在使用第一、二招还是没有,那么我们就必须要先检查一下显卡的抗电磁干扰以及电磁屏蔽质量是否是过关的。具体办法就是:将一些有可能产生电磁干扰的部件尽量的都远离显卡安装(如硬盘),然后再看花屏是否已经消失了。假如确定是显卡的电磁屏蔽功能不过关的话,那么建议要更换显卡,或者自制屏蔽罩。 第五大问题:假如使用了以上的五招之后,还是不能够解决问题,那么就很可能是

基于STM32的uCGUI移植和优化

基于STM32的uCGUI移植和优化 移植篇 首先,我们需要准备的东西有uCGUI3.90,这个版本是大家现在用的比较多的,效率也比较高,别人都是这么评论的,至于其他版本的,我没有接触很多,所以 不能过多评论. uCGUI有三个文件夹,一个是tool,这个文件夹是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的.在sample文件夹下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能.在Start文件夹里面,这是我们最主要的文件夹.里面就包含了uCGUI的源代码,uCGUI的作者把源代码放进vc里面进行编译了(当然,这是用标准C语言写的程序,所以我们可以放在任何C语言平台下编译而不会担心兼容性问题,这个uCGUI在这方面做的算是完美了),所以,我们可以在vc平台下写界面,然后再把代码拷进我们的下位机编译器进行编译,这样子效率就会非常高了.(像51 那时候写界面就是疯狂的一次一次的烧,真是纠结..). 然后这里放的就是uCGUI的源代码了,在GUI文件夹下面. 这则是每个文件夹的功能(参考uCGUI中文手册,https://www.360docs.net/doc/f817373063.html,翻译). 大概看一下就可以了,这个跟我们移植的关系不大,关键点是带*的可以不包含进去(待会配置会讲到.).然后其他的都要包含进去. 接着我们要把我们的文件包含进我们已经搭建好的工程,这里说明下我们的工程要求. 一般来说,我们要画一个图形,最基本的就是从点开始,从点到线,从点到面...,所以在已经建好的工程里面你要能点亮你的屏幕,能点出最基本的点,能填充出 最基本矩阵(这是uCGUI最包含的函数),反正我移植的时候涉及到的包括三个函 数,LCD_Init();LCD_Draw_Point(x,y,color),LCD_Fillcircuit(x1,x2,y1,y 2).这三个函数是必须的,后面也会说明如何把这三个函数进行填充. 当我们把文件复制进去的时候,再加上我们一开始已经创建好的工程的时候,文件结构差不多就是这个样子了,截图如下 user包括,main函数就是我们初始化和函数调用,绘图用的文件,另外那几个文件相信大家都明白了把,tft_lcd.c就是你在,没有移植uCGUI的情况下,纯液晶屏驱动,这里建议把液晶屏的API和最底层驱动(API就是画圆啊,画椭圆啊,清除屏幕之类的,底层驱动就是驱动液晶屏的管脚运作,fsmc初始化,时钟配置之类的),不过我这里也是集成在一起了,比较懒,大家别学.

LED显示屏常见问题及解决方法大全

随着LED行业的快速发展,LED显示屏的应用越来越广泛,尤其是全彩LED大屏幕在户外媒体广告领域,已经成为户外广告媒体的主流。但是这些外表绚丽,画面唯美的LED显示屏经常也会出现这样,或那样的问题。其实有些问题并不是产品本身的质量问题,而在我们在日常使用过程中,不注意维护而造成的。安装在高处的全彩LED显示屏,安装的时候就不容易,要维修就更难。所以LED显示屏的保护是一个重大的问题。接下来我们来分析下造成LED显示屏损坏的原因,以及如何防护和解决。 LED灯的温度过高,使LED显示屏的特性变质,若灯具内部进了水,也会造成很大的影响。 供电电压的突然升高。让供电电源电压突然升高的原因就很多了,如电源的质量问题,或者用户的不当使用等等原因都可能让供电的电源电压突然升高而造成显示屏的损坏。 线路中某个元件或印制线条或其它导线的短路而形成LED显示屏供电通路的局部短路,使这个地方的电压增高。 某个LED显示屏因为自身的质量原因损坏因而形成短路,它原有的电压降就转嫁到其它LED 显示屏上。 在装配的时候没有做好防静电的工作,使LED显示屏的内部已经被静电所伤害。尽管施加的是正常电压和电流值,也是极易造成LED显示屏的损坏。 经常也会出现这样,或那样的问题。其实有些问题并不是产品本身的质量问题,而在我们在日常使用过程中,不注意维护而造成的。安装在高处的全彩LED显示屏,安装的时候就不容易,要维修就更难。所以LED显示屏的保护是一个重大的问题。接下来我们来分析下造成LED显示屏损坏的原因,以及如何防护和解决。 一般来说造成LED显示屏损坏主要有以下原因 LED显示屏在实际工作中是以20mA的电流为上限,但往往会由于在使用中的各种原因而造成电流增大,如果不采取保护措施,这种增大的电流超过一定的时间和幅度后LED显示屏就会损坏。 这些原因都会造成LED显示屏电流的明显大幅上升,很快LED显示屏的芯片就会因为过热而被烧毁。造成其它LED显示屏的更大电流,其它LED显示屏就会更快的被烧毁,甚至危急电源。本来是小损坏就极容易的造成大事故。 白光LED显示屏由于有着很多优点,正在越来越多的进入人们的日常生活之中,它的使用量现在变得非常的巨大。它是新器件,有其自身使用上的特点。白光LED显示屏属于电压敏感型的器件。每支LED显示屏工作时电流不要超过20mA,超过太多LED显示屏就会很容易被烧毁。LED显示屏如果是正常使用,其寿命是非常长的。但人们在实际使用中LED显示屏往往容易坏,道理何在呢?其实就是没有考虑到LED显示屏的使用特点和对它加上保护电路。 对LED显示屏的保护措施,首先应该想到的是用保险管。但保险管是一次性的,而且反应速度也太慢,既效果差实际使用也很麻烦,所以保险管不适宜用于现在LED显示屏灯成品中,因为LED显示屏灯现在主要是在城市的光彩工程和亮化工程。LED显示屏是光电半导体器件,在装配过程中容易被静电击伤。这就需要在装配过程中进行静电防护。当然LED显示屏在使用过程中,经常还会遇到其他的问题,如果您在使用中出现了无法解决反而问题,可以联系厂家的售后服务热线,售后技术人员会帮你解答。

LED显示屏单元板常见故障

LED显示屏常见故障及其排除方法 LED显示屏常见信号的了解 CLK时钟信号:提供给移位寄存器的移位脉冲,每一个脉冲将引起数据移入或移出一位。数据口上的数据必须与时钟信号协调才能正常传送数据,数据信号的频率必须是时钟信号的频率的1/2倍。在任何情况下,当时钟信号有异常时,会使整板显示杂乱无章。 STB锁存信号:将移位寄存器内的数据送到锁存器,并将其数据内容通过驱动电路点亮LED显示出来。但由于驱动电路受EN使能信号控制,其点亮的前提必须是使能为开启状态。锁存信号也须要与时钟信号协调才能显示出完整的图象。在任何情况下,当锁存信号有异常时,会使整板显示杂乱无章。 EN使能信号:整屏亮度控制信号,也用于显示屏消隐。只要调整它的占空比就可以控制亮度的变化。当使能信号出现异常时,整屏将会出现不亮、暗亮或拖尾等现象。 数据信号:提供显示图象所需要的数据。必须与时钟信号协调才能将数据传送到任何一个显示点。一般在显示屏中红绿蓝的数据信号分离开来,若某数据信号短路到正极或负极时,则对应的该颜色将会出现全亮或不亮,当数据信号被悬空时对应的颜色显示情况不定。 ABCD行信号:只有在动态扫描显示时才存在,ABCD其实是二进制数,A是最低位,如果用二进制表示ABCD信号控制最大范围是16行(1111),1/4扫描中只要AB信号就可以了,因为AB 信号的表示范围是4行(11)。当行控制信号出现异常时,将会出现显示错位、高亮或图像重叠等现象。 故障与排除方法 * 判断问题必须先主后次方式的处理,将明显的、严重的先处理,小问题后处理。短路应为最高优先级。 1、电阻检测法,将万用表调到电阻档,检测一块正常的电路板的某点的到地电阻值,再检测另一块相同的电路板的同一个点测试与正常的电阻值是否有不同,若不同则就确定了问题的范围。 2、电压检测法,将万用表调到电压档,检测怀疑有问题的电路的某个点的到地电压,比较是否与正常值相似,否则确定了问题的范围。 3、短路检测法,将万用表调到短路检测挡(有的是二极管压降档或是电阻档,一般具有报警功能),检测是否有短路的现象出现,发现短路后应优先解决,使之不烧坏其它器件。该法必须在电路断电的情况下操作,避免损坏表。 4、压降检测法,将万用表调到二极管压降检测档,因为所有的IC都是由基本的众多单元件组成,只是小型化了,所以在当它的某引脚上有电流通过时,就会在引脚上存在电压降。一般同一型号的IC相同引脚上的压降相似,根据引脚上的压降值比较好坏,必须电路断电的情况下操作。该方法有一定的局限性,比如被检测器件是高阻的,就检测不到了。 单元板故障: A.整板不亮 1、检查供电电源与信号线是否连接。 2、检查测试卡是否以识别接口,测试卡红灯闪动则没有识别,检查灯板是否与测试卡同电源地,或灯板接口有信号与地短路导致无法识别接口。(智能测试卡)

UCOS-II ucGUI的完美移植

stm32 UCGUI 完美移植 作者:Changing发表时间:09-16 04:13分类:电子相关1 Comment 前一篇:stm32 DA 数模转换 后一篇:Stm32 SWD 下载 调试配置 UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。 它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。 类似程序还有国产的一个MINIGUI (https://www.360docs.net/doc/f817373063.html,/zhcn/),MiniGUI 是一个自由软件项目。其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Li nux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucleus 等)的实时嵌入式操作系统。有机会尝试下,支持下国产,毕竟国内这样的公司不多。。 这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。但是目前来说只有这个版本的代码是最全的,包括了JPEG , MULTILAYER , MEMDEV ,AntiAlias等模块。一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。 UCGUI390a 下载 整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。。。总之移植是个累人的活 首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 T F T LCD stm32 驱动 触摸屏 两篇文章 UCGUI的文件数量很大,主要用到UCGUI390a/Start/Con f ig 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。。。 相关文件介绍如下:

ucgui做界面切换

这次在用ucgui做界面切换的时候,决定不给每个菜单界面都创建一个对话框,和网友讨论的过程中,得出两种方法,一位网友说的是STM32的存储空间足够,可以先把自己所要用到的控件全部建立好,然后根据需要去设置控件是显示还是隐藏。另一位网友认为这样有点浪费内存,采用的方法是,先建立好一个对话框,然后根据自己的需要去删除和新建控件。 之后我就选择了第二种方法,在菜单的切换中去删除和新建控件。可能是自己太菜了,第一次删除控件和新建控件就出了问题。 问题是这样的:我先创建一个对话框作为欢迎界面(两个TEXT控件和一个BUTTON控件) hWinMenu = GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),_cbWelcome,0,0,0) ; 我的想法是,点击按钮后删掉按钮控件和两个TEXT控件。然后再新建4个按钮控件。 1.hButton[0] = BUTTON_CreateAsChild(30,26,115,70,hWinMenu ,GUI_ID_BUTTON1,WM_CF_SH OW); 2.hButton[1] = BUTTON_CreateAsChild(30,124,115,70,hWinMenu,GUI_ID_BUTTON2,WM_CF_S HOW); 3.hButton[2] = BUTTON_CreateAsChild(188,26,115,70,hWinMenu,GUI_ID_BUTTON3,WM_CF_S HOW); 4.hButton[3] = BUTTON_CreateAsChild(188,124,115,70,hWinMenu,GUI_ID_BUTTON4,WM_CF_S HOW); 5.BUTTON_SetBitmapEx(hButton[0],0,&bmqd,30,10); 6.BUTTON_SetBitmapEx(hButton[1],0,&bmpf,30,10); 7.BUTTON_SetBitmapEx(hButton[2],0,&bmsz,30,10); 8.BUTTON_SetBitmapEx(hButton[3],0,&bmdc,30,10); 9.BUTTON_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_BUTTON0)); 10.TEXT_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_TEXT0)); 11.TEXT_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_TEXT1)); 这样写了之后的结果是,原先的控件被删除了,我所需要的4个按钮新建成功。但是此时出现了一个问题,我仿真的时候发现,我按下新建的按钮时,按键颜色虽然有变化但是回调函数里并没有收到按钮传递给父窗口的按钮按下的消息。这样我就很纳闷的总是想不出是为什么。 通过查看新建对话框函数的源代码之后有了一点发现 hWinMenu=GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),_cbWelcome,0,0,0); 我是想查看一下hWinMenu是不是我之后新建按钮所需要的父窗口句柄。

关于ucgui的字库

关于ucgui的字库 1、在UCGUI中有两种类型字体, 一种是等宽字体(Monospaced Font),即字体当中所有字都是同一宽度,它在UCGUI中的相应结构体是GUI_FONT_MONO, 一种是均衡字体(Proportional font), 这种字体中的字都有自己独立的宽度, 字体内的每个字都可以有不同宽度, 它在UCGUI中的相应结构体是GUI_FONT_PROP, 对于等宽字体, 一般都是将所有字的点阵存放在一个数组中, 因为每个字都宽度相同. 对于均衡字体, 则要单独用数组来定义每个字符的点阵, 然后将每一个字符的宽高及点阵存为一个数组即字符信息(ucgui中对应结体为GUI_CHARINFO), 所有字符信息再存到一个数组当即称为字符集, 它包含每个字的字符信息(点阵高宽及一行占几个字节), 所谓一行占几个字节, 是指这个字体的点阵每一行有多少个字节, 它与宽度高度单位不同, 宽度高度的单位是象素数. 2.另外特别指出的是, 在等宽字体中不仅所有字符宽度相同,高宽也是相等的; 对于均衡字体, 不仅可以宽度不同, 高度也可以不同, 每一行有多少个字节自然也不同, 在均衡字体中每一个字符都单独定义之后才组成字体的字符集.

3.字符集的问题, 在UCGUI中每种字体含的字符集不同, 这个可以参看UCGUI手册中的"Standard Font"一章,这一章中对于字符集有如下描述: ASCII: Only ASCII characters 0x20-0x7E (0x7F).[仅包含 0x20-0x7E这个范围内的ansii字符] 1: ASCII characters and European extensions 0xA0 - 0xFF.[除 0x20-0x7E这个范围内的ansii字符, 还有0xA0 - 0xFF这个范围内的欧洲字符集, 这里要指出美国英语只用到 0x20-0x7E, 它只考虑了自己的须求, 没有考虑其它国家的须求, 在欧洲是有拉丁字符的, 所以欧洲国家扩展了剩余的 0xA0 - 0xFF这个范围内的来表示欧洲的字符集, 其实我们 国家的汉字也是在这个范围内扩展的, 不过我们用的是二个字节来表示一个汉字, 是因为汉字太多, 这区区94个值无法满足汉字的须求, 94*94就差不多了. 汉字用到的第一个值为0xb0a1(啊), 最后一个为0xf7fe(齄), 在机内码1当中只用到a1+15~a0+86这个范围的, 关于机内码是这个意思: 对于"啊"字模,机内码:(0xb0,0xa1), 0xb0为"啊"字的机内码1,0xa1为机内码2. 对于机内码2合使用是0xa1~0xff这个范围内的所有值, 关于机内码及汉字显示的原理及汉字库的构成, 本论坛中有专门的一篇文章介绍--"ucgui中处理汉字显示的说明",

HDMI线常见问题解答

HDMI(威迅)线常见问题解答说明书 针对很多朋友使用HDMI线连接电脑和电视的一些常见问题,特意撰写本篇文章进行解答,希望能解决各位买家使用HDMI线连接电脑和电视的所遇到的问题。 1、我的电脑和电视上都有HDMI接口,我能使用HDMI线连接电脑和电视吗? 只要输出设备(如电脑、高清机顶盒、XBX360)和输入设备(如电视、显示器、投影仪)有HDMI接口都可以使用HDMI进行连接的。 2、为什么电脑和电视使用HDMI线连接以后,电视图像上没有电脑的图标? 电脑和电视连接以后电脑一般默认“扩展模式”,只需要在电脑分辨率设置窗口上设置成“复制模式”即可。(针对这一问题在文章后面会有更详细的介绍) 3、为什么电视上只有图像没有声音? 首先要确定显卡驱动是否正确,然后在电脑上设置音频输出为显卡端的音频(文章后有具体设置) 4、为什么我的电视显示不能满屏?(电视上有边框) 首先正确的调整电视最佳的分辨率,然后调节显卡的缩放功能即可。(具体可询问显卡官方技术服务) 5、怎么调整电视上的分辨率? 在XP系统右键桌面—属性—设置—点击电视屏幕的图标(一般为2)调整屏幕分辨率 在win7系统右键桌面—屏幕分辨率点击电视屏幕的图标(一般为2)调整屏幕分辨率 6、为什么我的电视分辨率达不到1920*1080? 首先保证电视机的分辨率能达到1920*1080的分辨率(可以查看电视机说明书或者联系电视机服务商)。在电脑上调整电视端的分辨率。 7、为什么选择扩展模式的时候,电视上的桌面图片只在中间,没有不满屏幕? 因为当选择扩展模式的时候,电视所显示的画面是点对点的显示模式,电视的分辨率是1920*1080,而桌面图片的分辨率没有达到1920*1080,所以电视上的桌面图片没有布满整个屏幕。 8、为什么我的电脑和电视连接好以后电视偏色还有雪花? 是由于电脑或电视的接口接触不良造成的!请更换其他的接口进行测试。 9、为什么我的电脑和电视连接上后电视没有反应? 先切换电视信号源是相对应的HDMI接口(也许有1-5个) 切换视频的时候首先将电脑分辨率调整到电视初始要求的分辨率和刷新频率。(一般为设置电脑的分辨率为1024*768,刷新频率为60hz)连接上后可再调整电视分辨率 如果是笔记本,要切换输出屏幕。(不一样的机型切换按键不一样) 有部分电脑需要关机连线,连好后再开机。

ucgui液晶显示深度优化篇

UCGUI液晶显示深度优化篇 Author:wzt 2012年7月21日10:55:12 前一段进行了ucgui的移植,但是移植后续还是存在很多问题,比如液晶刷新速率慢,横竖屏切换不支持等,所以针对这些问题进行了一次彻底的优化,现在刷新能够达到20帧的速度对于50mhz的io口来说已经相当可以了。下面就进行一次彻底的剖析,看究竟是那些问题占用了宝贵的百万分之一秒: 一、速度优化篇: 1.我用的是stm32的处理器,stm32公司为了让使用者加快项目开发速度 和便于日后对整个软件部分的维护管理编写了一套标准库。这个库用 起来确实很方便也另学习简化了很多,但是它也有缺点所在:就是效 率问题。我之前用的液晶屏驱动就是基于库函数编写的,所以第一步 就是液晶驱动全部换为直接对寄存器操作,经实践确实刷新率成好几 倍的增长。这个代码比较长,这里就不贴出来的,这里仅仅指点下思 路,具体请看源代码。 代码下载地址:https://www.360docs.net/doc/f817373063.html,/icview-357489-1-1.html 2.深入液晶驱动内部:液晶屏刷新可不是像我们眼睛看到的一样瞬间整 个屏幕同时更新。实际上一个一个像素更新的:也就是说我的屏幕分 辨率是320*240就要更新320*240=76800个点。每一个点更新时都要 调用一个写数据函数。所以接下来要做的就是提高调用这个函数的速 度。有两种解决办法:使用宏定义函数或者内敛函数。我使用的是内 敛函数:如下定义: __inline void LCD_WR_DATA(u16 data) { LCD_RS_SET; LCD_CS_CLR; DATAOUT(data); LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET; }可以看到和普通函数区别就在于前面增加了__inline关键字。它有什么 作用?为什么可以提高速度?下面讲解一下它是如何起作用的:假如现 在我们定义了两个函数A,函数B,函数A调用函数B:正常情况下如

UCGUI

uC/GUI作为一个通用的嵌入式应用的图形模块,它在嵌入式系统中的作用也显得的越来越重要。uC/GUI是一个源代码开放的图形系统,它提供了丰富的资源,包括二维绘图库、多字体及可扩充字符集、Unicode、位图显示、多级RGB及灰度调整、动画优化显示、具有Windows风格的对话框和预定义控件(按钮、编辑框、列表框等),以及对键盘、鼠标、触摸屏等输入设备和双LCD输出的支持,目前在具有图形界面的嵌入式产品中得到越来越广泛地应用。 2 通用嵌入式图形模块uC/GUI uC/GUI是一个通用的嵌入式应用的图形模块,它是美国Micrium公司开发的一种高效的、与处理器和LCD控制器独立的通用GUI,可以适用各种CPU和LC D,在单任务和多任务操作系统中,它都可以工作得很好。它具有驱动接口层和应用层,全部代码采用ANSI _C编写,提供源代码,可以方便的移植到各种平台下。 2.1 uC/GUI特点 (1) 支持任何8位、16位和32位的CPU,只要求CPU具有相应的ANSI_C编译器即可。 (2) 所有硬件接口定义都使用可配置的宏。 (3) 字符、位图可显示与LCD的任意点,并不限制与字节长度的整数倍数地址。 (4) 所有程序在长度和速度方面都进行了优化,结构清晰。 (5) 对于慢速的LCD控制器,可以使用缓冲存储器减少访问时间,提高显示速度[1]。 因为uC/GUI具有这些优点,它越来越受到更多嵌入式设计者的青睐。 2.2 uC/OS-II介绍 在嵌入式系统的开发过程中,选择操作系统与选择开发平台一样的重要。虽然不是一个完整的实时操作系统,只是一个实时内核,但与其它操作系统比起来它具有很多优点因而得到了广泛的应用。首先它是一种结构简单、源代码公开的操作系统,适合所有的开发者使用;它具有可移植性,它的绝大部分源码都是用移植性很强的ANSI _C编写,与微处理器硬件相关的部分采用汇编语言编写,很容易被移植到各种微处理器上;它还具有可固化和可裁剪等特点,对于嵌入式设计者来讲的,只要拥有固化手段(C编译、连接、下载和固化),就可以很方便将其嵌入到产品中去。设计者还可以根据系统应用程序的需要对uC/OS-I I进行相应的裁剪来减少产品中的uC/OS-II所需的存储器空间,这可以通过条件编译来实现。 2.3 uC/GUI接口

Windows平台下Glade GTK开发环境的搭建

Windows平台下Glade GTK开发环境的搭建 【@.1 MVVM设计模式与Glade】做上层软件开发的程序员可能对于MVVM模式比较熟悉,这是一种经典的软件设计模式,很好的将用户界面与后台处理之间分层开,通过属性、事件绑定这种统一的'接口'将软件重新组装起来,将原本看上去很混乱很冗余的软件开发流程抽象出来,以一种统一而又合理的思想来组织软件开发。下面截自wiki的一幅图简单说明了MVVM模式的组织结构。View层提供了人机交互界面,Model层则是处理实际逻辑操作、数据操作的核心,二者之间由ViewModel层来进行协调,即绑定(Binding)View层的操作和属性,请求Model执行并得到反馈结果。MVVM模式在Windows平台下的WPF开发得到了很好的体现,而WPF开发中View层并不是用C代码,而是用XAML来描述的,这是以前的传统软件开发或是MFC 开发中所没有的。在实际使用这种WPF开发时可以用Expression Blend来进行UI设计,这个软件专门而且仅仅生成一个XAML文件用于界面描述,而底层的逻辑代码直接连到Visual Studio中进行编写。通过Blend画出的界面可以很好的释放你的创造力想象力,而其跟Visual Studio之间的无缝连接将MVVM模式演绎的淋漓尽致。因此我开始考虑有没有一种更通用的工具,不仅仅局限于Windows平台,

能在多数平台下用MVVM模式进行开发。于是我发现了Glade与GTK的配合。GTK是一个以纯C语言开发的图形库,同样适用于跨平台开发中。对于做底层开发比较多的人来说看到纯C代码比较亲切,我也一直想用纯C,而不是Visual Studio中提倡的C#,进行软件开发。单独使用GTK 非常棒,但是一个问题就在于,需要手写的代码太多了。画一个按键,按键的布局,按键的事件,这些都需要自己一行行手写,而且还得留意代码的顺序。而其中一个我觉得是很大的门槛在于,布局需要盲打,即,你只能先在脑中有个界面的想法,写好代码后才能看到界面的结果。当然对于嵌入式设计中的很多界面设计都是盲打,比如uCGUI,但是如果有一个工具能像Visual Studio之类的集成开发环境一样能画界面,再生成代码,那开发的速度将大大提升。Glade就很好的解决了这一问题。Glade很像Expression Blend的作用,它仅仅生成一个xml文件,描述了界面是怎样布局的,界面上需要绑定那些事件(Signal)。通过Glade+GTK开发的程序每次在运行时都会解析这个xml文件生成一个界面(是不是跟WPF一样~),main函数里的代码量大大减少,所需要的就是新建一个builder,解析这个xml,传给gtk中的窗口类型,再显示这个窗口,之后进入Gtk的主循环即可。但是,Glade+GTK劣势于Blend的一个关键特性是,不支持属性绑定。虽然GTK中的Glib在2.26以后就增加了

相关文档
最新文档