EM9160是英创公司一款资源丰富、性能稳定、简单易用的高性价比工控主板,它包含了6个用户可用的通用异步串口、一个网口、16位GPIO、以及英创特有的精简ISA总线等丰富的硬件资源,支持WinCE5.0、WinCE6.0和Linux系统。目前,EM9160广泛应用于国家电网智能电力终端,如集抄器、充值终端等,出货量超过10W片。国家电网公司企业标准对国家电网智能电力终端的外形接口、人机界面、通信接口等都做了详细的规定。用户基于EM9160,在外围做一定的威廉希尔官方网站 扩展后就能满足国网标准关于电力终端数据通信、电量采集、信息显示等方面的需求。
国家智能电网己经进入全面建设阶段,要求电力终端的通讯接口越来越多,应用软件越来越复杂,对系统可靠性的要求也越来越高。为此,我们将EM9160 的操作系统WinCE5.0的升级到了WinCE6.0,系统可靠性进一步提高。同时根据当下对电力终端的新需求,开发了EM9160的升级主板EM9280。
EM9280板载了8个异步串口,完全满足当下电力智能终端对通讯接口的需求,根据电力智能终端特点,去掉了ISA总线扩展,转而支持多达32位的GPIO。同时系统内核、Flash、CPU主频等都有较大升级。在显示方面,EM9280支持分辨率从320 X 240到1024 X 768的彩色TFT LCD显示,为了支持国家智能电网智能电力终端对显示的规定,EM9280专门引出了一个单色LCD接口。下图是EM9280连接符合国网标准的单色LCD的效果图。
图1:EM9280连接160*160单色液晶
本文就将介绍EM9280如何支持满足国家电网标准的160 X160单色点阵液晶显示。
1、EM9280单色LCD硬件接口
EM9280的单色屏接口在主板背面,编号为CN4,其引脚定义如下:
EM9280_CN4 | 单色LCD信号定义及说明 |
1 | GND |
2 | LCD_RS,LCE命令/数据寄存器选择 |
3 | LCD_WR#,LCD写信号,低有效,Inter时序 |
4 | LCD_RD#,LCD读信号,低有效,Inter时序 |
5 | LCD_CS#,LCD片选,低有效 |
6 | LCD_REST#,LCD复位信号,低有效 |
7 | VDD,LCD电源,+3.3V |
8 | LCD_D0,LCD数据总线 |
9 | LCD_D1,LCD数据总线 |
10 | LCD_D2,LCD数据总线 |
11 | LCD_D3,LCD数据总线 |
12 | LCD_D4,LCD数据总线 |
13 | LCD_D5,LCD数据总线 |
14 | LCD_D6,LCD数据总线 |
15 | LCD_D7,LCD数据总线 |
16 | LEDK,LCD背光负极 |
17 | NC |
18 | LEDA,LCD背光正极 |
EM9280单色屏接口详细说明请参考《EM9280工控主板数据手册》。
2、EM9280单色LCD软件接口
EM9280预装了WinCE6.0嵌入式操作系统,本身支持窗口编程,但对于160 X160点阵的单色屏来讲,却并不适合MFC框架的界面编程。针对单色点阵屏的显示特点,我们封装一组高效、简单易用的画点、画线、写块、写字符串等操作屏的API函数。介绍如下:
功能描述: 启动对LCD屏的操作功能,并初始化LCD显示屏,下面的所有函数,应该在LCD_Init()返回成功后再调用。
输入参数: LCD的类型。
返回值 > 0: 启动LCD成功,并返回LCD的类型。
= -1: 启动LCD失败。
INT LCD_Init( int LCDType );
功能描述: 设置显示字体,本驱动支持12*12和16*16点阵字体,默认字体为16*16点阵
输入参数: FontWidth = 12:设置12*12点阵
FontWidth = 16: 设置16*16点阵(默认设置)
返回值 > 0: 设置字体成功。
= -1: 设置字体失败。
INT LCD_SetFont( unsigned int FontWidth );
功能描述: LCD刷新模式。
输入参数:
nRefreshMode = REAL_REFRESH:实现刷新,方便调试
nRefreshMode = AUTO_REFRESH:自动刷新,刷新时间间隔为50mS.(默认设置)
nRefreshMode = MANUAL_REFRESH:手动刷新,设置成此模式后,只有调用了LCD_Refresh函数,驱动才会将显存中的数据显示到LCD上。
返回值 = 0: 设置刷新模式成功。
= -1: 设置刷新模式失败。
INT LCD_RefreshMode( unsigned int nRefreshMode );
功能描述: 将显存中的数据更新到LCD
返回值 = 0: 刷新成功。
= -1: 刷新失败。
INT LCD_Refresh(void);
功能描述: 释放对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显示屏的写模式。(不支持)
输入参数: Mode = 0 : COPY 写模式
Mode = 1 : XOR 写模式
返回值 0: 成功
INT LCD_SetMode( int Mode );
功能描述: 对LCD显示屏进行描点操作。
输入参数:
x0: 描点的列坐标(x坐标),范围0~(MaxX-1),不可大于或等于MaxX
y0: 描点的行坐标(y坐标),范围0~(MaxY-1),不可大于或等于MaxY
color: 描点的颜色:BK_COLOR,TEXT_COLOR或XOR_WRITE
返回值 0: 成功。
INT LCD_PutPixel( int x0, int y0, int color );
功能描述: 对LCD显示屏进行写字节操作。
输入参数:
x0: 写字节的列坐标(x坐标),范围0~(MaxX-1)
y0: 写字节的行坐标(y坐标),范围0~(MaxY-1)
byte: 写的字节
返回值 0: 成功。
INT LCD_WriteByte( int x0, int y0, UCHAR byte );
功能描述: 对LCD显示屏进行写多个字节操作,兼容原有LCD库。
输入参数:
x0: 写字节的列坐标(x坐标),范围0~(MaxX-1)
y0: 写字节的行坐标(y坐标),范围0~(MaxY-1)
pHfont: 需要写的字节组
NumOfBytes: 需要写的字节数
返回值 0: 成功。
INT LCD_WriteByteBlock( int x0, int y0, PBYTE pHfont, int nNumOfBytes );
功能描述: 对LCD显示屏进行写多个字节操作
输入参数:
x0: 写字节的列坐标(x坐标),范围0~(MaxX-1)
y0: 写字节的行坐标(y坐标),范围0~(MaxY-1)
x1: 写字节的列坐标(x坐标),范围0~(MaxX-1)
pHfont: 需要写的字节组
NumOfBytes: 需要写的字节数
返回值 0: 成功。
INT LCD_WriteBlock( int x0, int y0, int x1, PBYTE pHfont, int NumOfBytes );
功能描述: 对LCD显示屏进行读字节操作。
输入参数:
x: 写字节的列坐标(x坐标),范围0~(MaxX-1)
y: 写字节的行坐标(y坐标),范围0~(MaxY-1)
返回值 : 读取的字节。
INT LCD_ReadByte( int x0, int y0 );
功能描述: 对LCD显示屏画直线操作。
输入参数:
x0: 直线开始列坐标(x坐标),范围0~(MaxX-1),不可大于或等于MaxX
y0: 直线开始行坐标(y坐标),范围0~(MaxY-1),不可大于或等于MaxY
x1: 直线结束列坐标(x坐标),范围0~(MaxX-1),不可大于或等于MaxX
y1: 直线结束行坐标(y坐标),范围0~(MaxY-1),不可大于或等于MaxY
color: 颜色设置:BK_COLOR,TEXT_COLOR或XOR_WRITE
INT LCD_DrawLine( int x0, int y0, int x1, int y1, int color );
功能描述: 对LCD显示屏画Bar条操作。
输入参数:
x0: 直线开始列坐标(x坐标),范围0~(MaxX-1),不可大于或等于MaxX
y0: 直线开始行坐标(y坐标),范围0~(MaxY-1),不可大于或等于MaxY
x1: 直线结束列坐标(x坐标),范围0~(MaxX-1),不可大于或等于MaxX
y1: 直线结束行坐标(y坐标),范围0~(MaxY-1),不可大于或等于MaxY
color: 颜色设置:BK_COLOR,TEXT_COLOR或XOR_WRITE
INT LCD_FillBar( int x0, int y0, int x1, int y1, int color );
功能描述: 对LCD显示屏进行写字符串的操作。
输入参数:
x0: 字符写入的列坐标(x坐标),范围0~(MaxX-1)
y0: 字符写入的行坐标(y坐标),范围0~(MaxY-1)
pStr:以'