英创信息技术嵌入式Linux主板EM9160的LCD显示介绍

描述

        嵌入式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_240128       2        // 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;一个用于指定库文件所在的路径。

Linux

选择库文件

        在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; 
        }


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分