英创信息技术国家电网智能电力终端标准显示接口的实现
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:以'