一种RS485接口多国语言LCD12864显示器的设计
2020-02-03赵建新
赵建新
(哈尔滨华德学院 黑龙江省哈尔滨市 150025)
RS485 通信标准自从上世纪80年代以来,以其传输距离远、抗干扰能力强、布线成本低等优点,在工业控制领域中得到了广泛应用[1]。工业领域中的PLC、变频器、电能表等设备大多采用RS485 通信标准,为了方便用户实时监测这些设备的状态信息,设计了一种RS485 通信标准的显示屏,可以读取工控设备的状态信息并实时显示到显示屏上,在工控领域有着广阔的应用空间。
1 系统硬件设计
系统硬件组成框图如图1所示。
如图1所示,工控设备通过RS485 接口把数据传输至MCU,MCU 将数据解包后,得到需要显示的数据,如果数据中包含文字则会从字库芯片中查找字模,最后将数据显示到12864 液晶屏上[2]。
1.1 MAX3485通信芯片
MAX3485 是MAXIM 公司生产的一款3.3V 供电的RS485 电平收发芯片,静态电流仅300uA,最高可达到2.5Mbps 传输速度,使用广泛。MAX3485 应用电路如图2所示。
MAX3485 的2 脚和3 脚是使能管脚,低电平为接收状态,高电平为发送状态,因此2 脚和3 脚可以短接,仅需MCU 一个IO口即可控制。
1.2 STC12LE5A60S2单片机芯片
STC12LE5A60S2 是STC 公司生产的一款3.3V 供电的单时钟/机器周期(1T)的MCU芯片,指令集和管脚兼容传统8051单片机(如图3所示),速度比传统51 单片机快6~12 倍,在工业控制,强干扰场合比较适用。
本系统运行中涉及到字库读取、字模运算等操作,对MCU 运算性能要求高,因此速度快性能强的STC12LE5A60S2 是系统正常工作的保障。
1.3 GT30L24A3W字库芯片
本系统选用GT30L24A3W 为字库芯片,2.7~3.6V 供电,功耗低,SPI 串行总线接口,操作方便。该字库芯片内建12*12、16*16、24*24、32*32 点阵字库,支持GB18030 简繁体汉字、JIS0208日文字符集、KSC5601 韩文字符集等180 国外文字符,并且兼容以上各种文字的Unicode 字符集。横置横排的字模排列格式[3]。用户通过字符内码,计算出该字符所对应点阵在芯片中的地址,然后可以从该地址连续读出字符点阵信息。
片选输入(CS#):CS#的下降沿为串行数据传输开始信号,传输期间必须保持低电平,两条指令之间为高电平。
串行数据输出(SO):数据从芯片输出,在时钟的下降沿移出。
串行数据输入(SI):数据从串行输入芯片,在时钟的上升沿移入。
串行时钟输入(SCLK):数据在时钟上升沿移入,在下降沿移出。
总线挂起输入(HOLD#):该信号变低电平并且SCLK 信号为低电平时,进入挂起状态;该信号变高电平并且SCLK 信号为低电平时,结束挂起状态。
表1:GT30L24A3W 指令参数表
图1:系统硬件电路框图
图2:MAX3485 应用电路图
图3:STC12LE5A60S2 管脚图
1.4 LCD12864液晶屏
本系统选用深圳晶联讯电子有限公司生产的JLX12864G-1503型号的液晶屏,使用方便,显示清晰,广泛应用于人机交互面板。
JLX12864G-1503 液晶模块选用矽创公司生产的ST7567 驱动IC,功能强,稳定性好,接口丰富,可以采用4 线SPI 或并口连接外部MCU(6800 时序和8080 时序可选)。
图4:系统整体运行流程图
2 软件部分设计
2.1 串口超时接收
工业领域中的PLC、变频器、电能表等设备通信协议一般为MODBUS 协议,这种协议没有包头包尾作为标志,不知道该帧是否接收完成,一般采用超时方式。接收超时应根据自己实际应用加入,现在大多数都是硬件中断接收,一进中断就将数据拷到接收缓存中,等有空再处理这些数据就可。但是如果利用循环查询时,最好加入超时,让接收函数能够在一段时间内持续检测是否有数据过来。
大部分串口应用程序都是以一字节为单位传输,当检测到特定字符(如换行)才判定一帧数据结束。这样做的问题在于一旦特定字符受干扰丢失,会导致MCU 误判。该系统需要以帧为单位传输数据,只要字符与字符之间间隔超过一定的时间,那么就判定这一帧数据结束。
2.2 字库芯片GT30L24A3W读取操作
GT30L24A3W 使用SPI 接口和MCU 通信,该字库芯片的读取操作只有两种模式:正常模式和快速模式。指令参数如表1所示。
正常模式下,需要用指令码来执行每一次操作。读取操作如下:
(1)首先将片选信号(CS#)拉低,串行数据输入(SI)发送1 字节的命令字(0x03)和3 个地址,每一位在串行时钟输入(SCLK)上升沿被锁存。
(2)然后该地址的字节数据通过串行数据输出引脚(SO)移位输出,每一位在串行时钟输入(SCLK)下降沿被移出。(3)读取字节结束后,将片选信号(CS#)拉高,结束本次操作。快速模式下,同样需要用指令码来执行每一次操作。读取操作如下:
(1)首先将片选信号(CS#)拉低,串行数据输入(SI)发送1 字节的命令字(0x0B)和3 个地址以及一个字节的Dummy,每一位在串行时钟输入(SCLK)上升沿被锁存。
(2)然后该地址的字节数据通过串行数据输出引脚(SO)移位输出,每一位在串行时钟输入(SCLK)下降沿被移出。
(3)如果片选信号(CS#)持续保持为低,则下一个地址的字节数据继续通过串行数据输出引脚(SO)移位输出。
以12×12 点阵为例,给出从首地址fontaddr 读出12×12 点阵字符数据的程序操作。
(1)text[i]为汉字GB2312 编码的高8 位。
(2)text[i+1]为汉字GB2312 编码的低8 位。
(3)fontaddr 为汉字首地址。
(4)0x3cf80 + 376*24 为12×12 汉字点阵起始地址。
(5)0x3cf80 为12×12 全角字符点阵起始地址。
2.3 系统整体运行流程
串口接收到一帧数据后,根据这一帧数据中的字符GB2312 码,计算出该字符在字库芯片中的首地址,取出字模并显示到液晶屏上。系统整体运行流程图如图4所示。
3 结束语
使用STC12LE5A60S2 单片机芯片和GT30L24A3W 多国语言字库芯片设计的LCD12864 显示器,显示正常,稳定可靠。不足之处在于屏幕尺寸小,显示文本内容有限。