DOS DM&P LCM 库参考手册

2003/01/06 Version 0.25

图形LCM

伴随提供的一系列嵌入式CPU模块,图形/文本LCM库也提供。LCM库可以缩短用户开发时 间,该库用于DOS系统大型记忆体模式,仅仅适用M6117D CPU。如果用Turbo C/C++开发 GrLCM程序,将会遇到一些问题; 运用我们的GrLCM库进行开发工作,推荐使用编译器Borland C++ 3.1。

如果你有任何问题,请联系我们,邮件地址: tech@dmp.com.cn

举例

图形库很容易使用。例代码来源于图形库的“demo.c”文件,编译并运行它,LCM会显示 DM&P标识、线和“Hello”字符串。


#include <stdio.h>
#include "grlcm.h"

void main()
{
  char cType;
  int  nLcmType, nLcmSize;
  int  nMaxX, nMaxY;
  /*
  Bitmap buffer to display. One bit to one pixel.
  for this 8x8 buffer:
  10000001
  01000010
  00100100
  00011000
  00011000
  00100100
  01000010
  10000001
  Note: The width of bitmap must be byte boundary.
  If you want to define a 20x15 image. You should define a
  ((20+8)/8)*15 = 3*15 bytes buffer.
  */
  char pcImage[] = { 0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81 };

  printf("\nDM&P Graphic LCM Library Demo Program, %s %s.\n\n",__DATE__,__TIME__);
  printf("GrLCM Library Version %s\n\n",GrLcm_Version());

  /* Select LCM type */
  printf("1. 122X32 \n");
  printf("2. 128X64 \n");
  printf("3. 320X240\n");
  printf("4. 128X128\n");
  printf("5. 240X128\n");
  printf("6. 240X64 \n");
  printf("Your LCM type: ");
  cType = getch();
  printf("%c\n",cType);
  switch(cType)
  {
    case '1': nLcmSize = LCM_122X32;  break;
    case '2': nLcmSize = LCM_128X64;  break;
    case '3': nLcmSize = LCM_320X240; break;
    case '4': nLcmSize = LCM_128X128; break;
    case '5': nLcmSize = LCM_240X128; break;
    case '6': nLcmSize = LCM_240X64;  break;
  }

  /* Select LCM interface */
  printf("\n");
  printf("1. GPIO\n");
  printf("2. Printer port\n");
  printf("3. VGA emulator\n");
  printf("Your interface type: ");
  cType = getch();
  printf("%c\n",cType);
  switch(cType)
  {
    case '1': nLcmType = LCM_GPIO; break;
    case '2': nLcmType = LCM_PRN;  break;
    case '3': nLcmType = LCM_VGA;  break;
  }

  /* Initialize graphic LCM library */
  if(GrLcm_Init(nLcmType,nLcmSize)==0)
  {
    printf("Unable to initialize LCM library.\n");
    return;
  }

  /* Select font size */
  GrLcm_SetFontType(LCM_FONT_5X7);

  /* Clear LCM. Show DM&P logo and text "Hello" */
  GrLcm_ClearScreen();
  GrLcm_DisplayBitmapFile(0,0,"dmp.bmp");
  GrLcm_printf(70,0,"Hello");

  /* Display bitmap buffer */
  GrLcm_DisplayBitmap(70,10,8,8,pcImage);

  /* Line function test */
  nMaxX = GrLcm_GetMaxX() - 1;
  nMaxY = GrLcm_GetMaxY() - 1;
  GrLcm_DrawLine(    0,    0,nMaxX,    0);
  GrLcm_DrawLine(nMaxX,    0,nMaxX,nMaxY);
  GrLcm_DrawLine(nMaxX,nMaxY,    0,nMaxY);
  GrLcm_DrawLine(    0,nMaxY,    0,    0);
  GrLcm_DrawLine(    0,    0,nMaxX,nMaxY);
  GrLcm_DrawLine(nMaxX,    0,    0,nMaxY);

  getch();

  /* Close GrLCM library */
  GrLcm_Close();
  printf("Program terminated.\n");
}

函数参考



char *GrLcm_Version();

说明: 获取库版本字符串
参数:
返回参数; 库版本
举例:

/* Show GrLCM version. */
printf("DM&P GrLCM Library Version %s\n",GrLcm_Version());
	


void GrLcm_Close();

说明: 关闭图形LCM
参数:
N/A
举例:

GrLcm_Close();
	

int GrLcm_Init(int nIoType,int nLcmType);

说明: 初始化图形LCM,设置I/O连接模式
参数:
返回参数; 0:失败;其它:成功
nIoType I/O模式:LCM_GPIO,LCM_PRN.
nLcmType LCM大小: LCM_122X32, LCM_128X64, LCM_320X240, LCM_128X128, LCM_240X128.
举例:

if(GrLcm_Init(LCM_GPIO,LCM_128X64))
  printf("Unable to initialize LCM library\n");
	

void GrLcm_SetFontType(int nType);

说明: 设置字体大小,GrLcm_printf()函数调用
参数:
nType 字体类型:LCM_FONT_5X7,LCM_FONT_8X10,LCM_FONT_8X16.
举例:

GrLcm_SetFontType(FONT_5X7);
	

int GrLcm_GetFontType();

说明: 获取字体大小,GrLcm_printf()函数调用
参数:
返回参数: 字体大小常量,用法同GrLcm_SetFontType()函数
举例:

if(GrLcm_GetFontType()==FONT_5X7)
  printf("Font size is 5X7.\n");
	

void GrLcm_SetLanguage(int nLang);

说明: 设置语言类型,GrLcm_printf()函数调用
参数:
nLang 字体类型: LCM_ENGLISH, LCM_CHINESE_BIG5, LCM_CHINESE_GB, LCM_JAPANESE_SJIS, LCM_GREEK, LCM_THAI.
注意: 如果选择非英语,务必设置字体大小为8×16
举例:

GrLcm_SetLanguage(LCM_CHINESE_BIG5);
GrLcm_SetFontType(FONT_8X16);
	

int GrLcm_GetLanguage();

说明: 获取语言类型,GrLcm_printf()函数调用
参数:
返回参数; 语言类型常量,用法同GrLcm_SetLanguage()函数
举例:

if(GrLcm_GetLanguage()==LCM_CHINESE_BIG)
  printf("Trad. Chinses is used.\n");
	

void GrLcm_printf(int x, int y, char *szFmt, ...);

说明: 在LCM上打印格式化字符串
参数:
x X 坐标
y Y 坐标
szFmt 格式化字符串,用法同printf()函数
举例:

GrLcm_printf(0,0,"<Mity-Mite Module>\nIP:192.168.0.100");
	

void GrLcm_printf2(int x, int y, int nType, char *szFmt, ...);

说明: 在LCM上打印格式化字符串,并且可以选择字体类型
参数:
x X 坐标
y Y 坐标
nType 字体大小常量,用法同GrLcm_SetFontType()函数
szFmt Format string, the same as printf().
举例:

GrLcm_printf2(0,0,LCM_FONT_5X7,"<Mity-Mite Module>\nIP:192.168.0.100");
	

void GrLcm_printf3(int x, int y, int nLang, char *szFmt, ...);

说明: 在LCM上打印格式化字符串,并且可以选择语言类型
参数:
x X 坐标
y Y 坐标
nLang 语言类型常量,用法同GrLcm_SetLanguage()函数
szFmt 字体大小常量,用法同printf()函数
Note: 如果选择非英语,务必设置字体大小为8×16
举例:

GrLcm_SetFontType(FONT_8X16);
GrLcm_printf3(0,0,LCM_ENGLISH,"<Mity-Mite Module>\nIP:192.168.0.100");
	

void GrLcm_ClearScreen();

说明: 清屏LCM
参数: N/A
举例:

GrLcm_ClearScreen();
GrLcm_printf(0,0,"\nIP:%s",szBuf);
	

void GrLcm_ClearRect(int x,int y,int xs,int ys);

说明: 清除LCM上一个矩形区域
参数:
x X 坐标
y Y 坐标
xs 水平大小
ys 垂直大小
举例:

GrLcm_ClearRect(0,0,100,20);
	

void GrLcm_DisplayBitmapFile(int x,int y,char *szFile);

说明: 在LCM上显示一幅位图
参数:
x X坐标
y Y坐标
szFile 位图文件名称
举例:

GrLcm_DisplayBitmapFile(0,0,"dmp.bmp");
	

void GrLcm_DisplayBitmap(int x,int y,int xs,int ys,char *pcBuf);

说明: 在LCM上显示一个位图缓冲区
参数:
x X坐标
y Y坐标
xs X坐标大小
ys Y坐标大小
pcBuf 位图缓冲区的缓冲区指针
注意: 位图宽度必须是byte边界;如果希望定义一个20×15的图像,则应该定义缓 冲区大小为((20+8)/8)×15=3×15 bytes
举例:

char pcImage[] = { 0x81,0x42,0x24,0x18,0x08,0x04,0x02,0x01 };
/* Display bitmap buffer */
GrLcm_DisplayBitmap(70,10,8,8,pcImage);
	

void GrLcm_DrawLine(int x1,int y1,int x2,int y2);

说明: 在LCM上画一条线
参数:
x1 点1的X坐标
y1 点1的Y坐标
x2 点2的X坐标
y2 点2的Y坐标
举例:

GrLcm_DrawLine(0,0,100,50);
	

void GrLcm_DrawDot(int x,int y);

说明: 在LCM上画一个点
参数:
x X坐标
y1 Y坐标
举例:

GrLcm_DrawDot(10,10);
	

int GrLcm_GetMaxX();

说明: 获取LCM宽度
参数:
返回参数; LCM上最大X坐标
举例:

int nMaxX = GrLcm_GetMaxX();
	

int GrLcm_GetMaxY();

说明: 获取LCM高度
参数:
返回参数; LCM上最大Y坐标
举例:

int nMaxX = GrLcm_GetMaxX();
	

Jan Yin Chan Electronics Co., LTD.保留所有权利。 Email us: tech@dmp.com.cn