<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • EM335x支持低成本單色LCD顯示方案

     2015-7-22              

    1、簡述

     

      英創公司嵌入式板卡EM335x是一款高性能的Cortex-A8硬件平臺,板卡帶有豐富的硬件接口,非常適用于工業應用開發。

     

      EM335x板卡CPU采用了Ti公司的AM3354,AM3354的LCD控制器包括有兩種獨立的控制器:一種是行掃(raster)模式,一種是LCD接口驅動(LIDD)模式,raster 模式用于處理同步LCD,用于支持彩色液晶顯示屏,而LIDD模式可以用來支持低成本的單色點陣LCD模塊。

     

      EM335x板卡的標準應用是采用的raster模式LCD驅動,支持多種分辨率彩色液晶顯示接口,最高分辨率到1024X768。在此基礎上英創公司在EM335x上還實現了基于LIDD模式的LCD驅動,可滿足部分工業場合對于單色點陣屏的需求。本文以單色點陣屏160X160 LCD為例,介紹該屏在EM335x上的應用。

     

     

    2、單色LCD接線

     

      EM335x的LCD接口請參見EM335x數據手冊中CN3的信號定義。下面是通過EM335x CN3連接HGO160160 LCD模塊(UC1698U控制器,160x160點陣)的信號對應表:

     

     

      LCD的第19腳為背光電源正,EM335x CN3的第30腳為PWM信號輸出,低電平有效。這兩個引腳在物理上并不是直接相連,而是應該將PWM作為LCD的背光控制信號,通過控制一個電子開關實現LCD背光的打開與關閉,具體連接可參考下圖。

     

     

    3、單色屏LCD應用程序開發

     

      在Linux操作系統中,與彩色屏的設備節點不同,對于單色LCD的設備節點定義為:'/dev/em335x_lcd',因此Linux應用程序操作單色LCD時,一般為以下幾個步驟:

      1、打開LCD設備文件:
      fd = open('/dev/em335x_lcd', O_RDWR);
      2、調用標準的write( )函數對LCD屏進行操作。
      3、關閉LCD設備文件。

     

      為了方便客戶使用,我們設計了一套通用的漢字及LCD顯示接口函數,這些接口函數定義和實現分別在lcd_api.h lcd_api.cpp中,函數中包括畫點、畫線、畫Bar條、寫塊數據、輸出漢字及字符等操作。關于各個函數的定義說明,可參見lcd_api.h頭文件中的中文注釋。其中的漢字支持為標準一級全漢字,為16×16點陣字模,西文(字母、數字和符號)為8×14點陣字模,這兩個字模文件分別為cclib、cclib12.fnt、ascii.chr,放置在EM335x嵌入式主板的根文件系統“/usr”目錄中。各個函數定義如下:

     

      // 功能描述: 啟動對LCD屏的操作功能,并初始化LCD顯示屏
      // 返回值 > 0: 啟動LCD成功
      // = -1: 啟動LCD失敗

      int LCD_Init( );

      // 功能描述: 釋放對LCD顯示屏的操作功能
      // 輸入參數: 無
      // 返回值 > 0: 初始化LCD成功,并返回LCD的類型
      // = -1: 初始化LCD失敗
      int LCD_DeInit( );

      // 功能描述: 對LCD顯示屏的清屏操作
      // 輸入參數: 無
      // 返回值 = 0: LCD清屏成功
      // <0 : LCD清屏失敗

      int LCD_Clearup( );

      // 功能描述: 獲取LCD顯示屏的X方向最大分辨率
      // 輸入參數: 無
      // 返回值 : LCD顯示屏的X方向最大分辨率

      int LCD_GetMaxX( );

      // 功能描述: 獲取LCD顯示屏的Y方向最大分辨率
      // 輸入參數: 無
      // 返回值 : LCD顯示屏的Y方向最大分辨率

      int LCD_GetMaxY( );

      // 功能描述: 設置LCD顯示漢字字模:16點陣、12點陣
      // 輸入參數: FontWidth = 16 : 16點陣漢字
      // FontWidth = 12 : 12點陣漢字
      // 返回值 : 字模的類型16或12
      int LCD_SetFont( int FontWidth );

      // 功能描述: 對LCD顯示屏進行描點操作
      // 輸入參數:
      // int x0: 描點的列坐標(x坐標),范圍0~(MaxX-1)
      // int y0: 描點的行坐標(y坐標),范圍0~(MaxY-1)
      // int color: 描點的顏色:BK_COLOR或者TEXT_COLOR
      // 返回值 0: 成功

      int LCD_PutPixel( int x0, int y0, int color );

      // 功能描述: 對LCD顯示屏進行寫多個字節操作
      // 輸入參數:
      // int x: 寫字節的列坐標(x坐標),范圍0~(MaxX-1),不可大于或等于MaxX
      // int y: 寫字節的行坐標(y坐標),范圍0~(MaxY-1),不可大于或等于MaxY
      // unsigned char* hfont: 需要寫的字節組
      // int xsize: x方向的大小,最大不超過8
      // int NumOfBytes: 需要寫的字節數,最大不超過16
      // 返回值 0: 成功

      int LCD_WriteByteBlock( int x, int y, unsigned char* hfont, int xsize,
      int NumOfBytes );

      // 功能描述: 對LCD顯示屏畫直線操作
      // 輸入參數:
      // int x0: 直線開始列坐標(x坐標),范圍0~(MaxX-1),不可大于或等于MaxX
      // int y0: 直線開始行坐標(y坐標),范圍0~(MaxY-1),不可大于或等于MaxY
      // int x1: 直線結束列坐標(x坐標),范圍0~(MaxX-1),不可大于或等于MaxX
      // int y1: 直線結束行坐標(y坐標),范圍0~(MaxY-1),不可大于或等于MaxY
      // int color: 顏色設置:BK_COLOR或者TEXT_COLOR

      int LCD_DrawLine( int x0, int y0, int x1, int y1, int color );

      // 功能描述: 對LCD顯示屏畫Bar條操作
      // 輸入參數:
      // int x0: 直線開始列坐標(x坐標),范圍0~(MaxX-1),不可大于或等于MaxX
      // int y0: 直線開始行坐標(y坐標),范圍0~(MaxY-1),不可大于或等于MaxY
      // int x1: 直線結束列坐標(x坐標),范圍0~(MaxX-1),不可大于或等于MaxX
      // int y1: 直線結束行坐標(y坐標),范圍0~(MaxY-1),不可大于或等于MaxY
      // int color: 顏色設置:BK_COLOR或者TEXT_COLOR

      int LCD_FillBar( int x0, int y0, int x1, int y1, int color );

      // 功能描述: 對LCD顯示屏進行寫字符串的操作
      // 輸入參數:
      // int x0: 字符寫入的列坐標(x坐標),范圍0~(MaxX-1)
      // int y0: 字符寫入的行坐標(y坐標),范圍0~(MaxY-1)
      // int color: 字符寫入的顏色設置:BK_COLOR或者TEXT_COLOR
      // 返回值 0: 成功
      int LCD_WriteString( int x0, int y0, char* pStr, int color );

     

      以test_lcd為例,介紹利用eclipse / Sourcery G++工具進行應用程序開發時,如何使用lcd_api.h函數庫來實現對LCD的顯示操作。

     

      首先需要在應用工程項目文件test_lcd中導入API函數相關的幾個文件:lcd_api.h、lcd_api.cpp 以及DotLib.CPP(主要實現了西文、漢字顯示功能)。在eclipse / Sourcery G++ IDE下導入不僅僅是將這些文件加入到項目工程中,同時也會把這幾個文件復制到項目工程所在的目錄下。以下為測試代碼:

     

      // 對LCD屏進行初始化操作
      i1 = LCD_Init( );
      if( i1<0 )
      {
        printf( 'LCD Init fail!\n' );
        return -1;
      }

      MaxX = LCD_GetMaxX( );
      MaxY = LCD_GetMaxY( );
      LCD_Clearup( );

      LCD_PutPixel( 0, 0, 1 );
      LCD_PutPixel( MaxX-1, 0, 1 );
      LCD_PutPixel( 0, MaxY-1, 1 );
      LCD_PutPixel( MaxX-1, MaxY-1, 1 );

      LCD_SetFont( 12 );

      // 顯示中文、字符操作
      strcpy( BufStr, '** 歡迎測試 **' );
      x = (MaxX-strlen(BufStr)*8)/2;
      y = 8;
      LCD_WriteString( x, y, BufStr, TEXT_COLOR );

      strcpy( BufStr, '嵌入式Linux主板' );
      x = (MaxX-strlen(BufStr)*8)/2;
      y = 24;
      LCD_WriteString( x, y, BufStr, BK_COLOR );
      sleep( 2 );

      // 畫線
      LCD_DrawLine( 0, 42, MaxX-1, 42, TEXT_COLOR );
      LCD_DrawLine( 0, 63, MaxX-1, 63, TEXT_COLOR );

      // 畫曲線
      for( x=0; x  {
        y = 53 - 10.0*sin( 2.0*M_PI*x/24.0 );
        LCD_PutPixel( x, y, XOR_WRITE );
      }
      sleep( 2 );

      for( x=0; x  {
        y = 53 - 10.0*sin( 2.0*M_PI*x/24.0 );
        LCD_PutPixel( x, y, XOR_WRITE );
      }
      sleep( 2 );

      LCD_Clearup( );
      LCD_DrawLine( 0, 0, MaxX-1, MaxY-1, TEXT_COLOR );
      LCD_DrawLine( 0, MaxY-1, MaxX-1, 0, TEXT_COLOR );
      // 畫Bar條
      start = time(NULL);
      for( i1=0; i1<9; i1++)
      {
        LCD_FillBar( MaxX/2-20, MaxY/2-20, MaxX/2+20, MaxY/2+20, XOR_WRITE );
        sleep(1);
      }
      end = time(NULL);
      printf('The pause used %f seconds.\n',difftime(end,start)/10);//

      LCD_DeInit( );

    精品久久久久久中文字幕无碍| 亚洲精品国产第一综合99久久| 久久久久人妻一区精品性色av| 日韩久久精品一区二区三区| 久久精品无码一区二区无码| 亚洲精品国产精品国自产观看| 四虎成人精品永久免费AV| 在线观看91精品国产不卡免费| 国产福利精品视频自拍| 99久久99久久免费精品小说| 久久99热这里只有精品国产| 精品久久久久久无码专区不卡| 亚洲精品国产自在久久| 国产精品亚洲av色欲三区| 国产成人精品免费久久久久| 国产精品成人免费综合| 久久99热只有频精品8| 亚洲国产美女精品久久久久∴| 久久国产精品成人无码网站| 国内精品51视频在线观看| 日本精品一区二区三区视频| 国产精品一区二区不卡| 国语自产少妇精品视频蜜桃| 国产精品女人呻吟在线观看| 久久国产精品成人无码网站| 亚洲av产在线精品亚洲第一站| 99久久99久久久99精品齐| 青青青青久久精品国产h| 国产乱人伦偷精精品视频| 精品无码一区二区三区亚洲桃色 | 国产aⅴ精品一区二区三区久久| 亚洲国产日产无码精品| 国色精品va在线观看免费视频| 欧洲精品成人免费视频在线观看| 国产高清精品入口91| 91精品观看91久久久久久| 91久久精品国产91久久性色tv| 国产亚洲美女精品久久久| 国产成人久久精品麻豆二区| 国产成人精品久久免费动漫| 亚洲AV无码成人网站久久精品大|