嵌入式Linux主板EM9x60作为一种高效、低成本的产品解决方案,专门针对小型的单色LCD显示模块(分辨率通常在128×64至320×240),设计了一套通用的汉字及图形显示接口函数。这些API函数封装为静态库libLCD_API.a,以C的方式提供给客户,以方便客户的使用。
EM9x60提供的LCD_API函数库包括有两个文件:LCD_API.H和libLCD_API.a。该函数库目前支持的LCD屏类型包括有:
LCD控制器类型 |
显示分辨率 |
简要说明 |
KS0108 | 128×64 | 最常用的LCD模块 |
T6963C | 240×128 | 具有较大的显示窗口 |
SED1335 | 320×240 | |
KS0108 | 192×64 | |
UC1698U | 160×160 | 电力集抄终端标准显示屏 |
在头文件LCD_API.H中的对应定义如下。
#define LCD_12864 1 // LCD 128×64 KS0108控制器
#define LCD_2401282 // LCD 240×128 T6963C控制器
#define LCD_320240 3 // LCD 320×240 SED1335控制器
#define LCD_19264 4 // LCD 192×64 KS0108控制器
#define LCD_160160 5 // LCD 192×64 UC1698U控制器
LCD_API函数库提供了一系列对LCD屏进行画点、画线、画Bar条以及字符串(包括汉字和西文)显示的接口函数,一共包括了14个函数,其中的汉字支持为标准一级全汉字,为16×16点阵字模或者12X12点阵汉字字模,西文(字母、数字和符号)为8×14点阵字模,这两个字模文件分别为cclib、cclib12.fnt、ascii.chr,放置在EM9x60嵌入式Linux主板的根文件系统“/lib”目录中。
在各个功能API函数中,特别是字符串显示函数LCD_WriteString( ),对于显示16点阵的汉字,为了加快显示的速度,实现的方式是通过写一个字节(writebyte)来实现的,所以客户在调用这些函数时所定义的坐标位置最好是8的倍数。如果客户需要显示一些特殊字体的字符,可以利用LCD_API中的画点函数来实现专门的特殊字符显示功能。
下面以Step1_LCDTest为例,介绍利用Sourcery G++工具进行应用程序开发时,如何使用LCD_API函数库来实现对LCD的显示操作。
首先需要在应用工程项目文件Step1_LCDTest中导入LCD_API函数库的这两个文件:LCD_API.H和libLCD_API.a。在Sourcery G++ IDE下导入不仅仅是将这两个文件加入到项目工程中,同时也会把这两个文件复制到项目工程所在的目录下。
然后还需要设置应用工程(Step1_LCDTest)的编译属性,指定编译链接的库文件名称和路径libLCD_API.a,设置的方法如下:
在Project Explorer视窗下,选择Step1_LCDTest工程文件,然后点击鼠标右键,选择Properties项,在窗口中选择C/C++ Build -> Settings -> Tool Settings -> Sourcery G++ C++ Linker -> Libraries,如图5-1所示。其中的一个窗口用于指定库文件的名称,Linux静态链接库命名的方式为lib+name.a,所以此处需要输入库文件的名称应该只是name,即LCD_API;一个用于指定库文件所在的路径。
选择库文件
在Step1_LCDTest中Test_LCD12864.cpp提供了一个调用LCD_API中相关函数进行LCD显示的示例,以下为测试代码:
#include
#include
#include
#include
#include 'lcd_api.h'
int main( )
{
int x, y;
char BufStr[200];
// 对LCD屏进行初始化操作
LCD_Init( LCD_12864 );
// 设置为异或模式
LCD_SetMode( 1 ); // set to XOR mode
// 居中显示中文、字符
strcpy( BufStr, '** 欢迎测试 **' );
x = (128-strlen(BufStr)*8)/2;
y = 8;
LCD_WriteString( x, y, BufStr, TEXT_COLOR );
strcpy( BufStr, '嵌入式网络模块' );
x = (128-strlen(BufStr)*8)/2;
y = 24;
LCD_WriteString( x, y, BufStr, BK_COLOR ); // 反显
sleep( 1 );
// 画线
LCD_DrawLine( 0, 42, 127, 42, TEXT_COLOR );
LCD_DrawLine( 0, 63, 127, 63, TEXT_COLOR );
// 画曲线
for( x=0; x<128; x++ )
{
y = 53 - 10.0*sin( 2.0*M_PI*x/24.0 );
LCD_PutPixel( x, y, TEXT_COLOR );
}
sleep( 1 );
for( x=0; x<128; x++ )
{
y = 53 - 10.0*sin( 2.0*M_PI*x/24.0 );
LCD_PutPixel( x, y, TEXT_COLOR );
}
sleep( 1 );
LCD_FillBar( 0, 42, 127, 63, BK_COLOR );
LCD_FillBar( 0, 42, 127, 63, TEXT_COLOR );
LCD_FillBar( 0, 42, 127, 63, BK_COLOR );
// 退出LCD显示
LCD_DeInit( );
return 0;
}
-
Linux
+关注
关注
87文章
11196浏览量
208670 -
嵌入式主板
+关注
关注
7文章
6084浏览量
35148
发布评论请先 登录
相关推荐
评论