一种用于嵌入式系统的液晶显示单元设计
在自动化仪器仪表、工业测控装置等嵌入式计算机系统中,图形液晶显示模块(点阵LCD)以显示灵活、信息量大、可实现图形界面等优点而被广泛的用做显示终端。这些模块大多提供并行数据接口,少量提供串行接口的模块也要求通信采用特殊协议,给系统的软硬件设计都带来较大不便。在显示程序上,可移植通用的嵌入式图形用户界面GUI软件,如MiniGUI,OpenGUI等,以简化软件设计工作。但是,这些GUI软件移植繁琐,有些源代码不公开,一般需要数百KB的存储量,对于一些只要求实现简单界面的工控应用来说过于庞大,有一些功能(如鼠标操作、支持汉字输入法等)也不十分必要。
针对上述问题,本文结合LCD显示模块STN6448D-4K设计了一种满足工控要求的模块化图形液晶显示单元。硬件上通过51单片机搭建转换电路,实现模块并行访问时序到串行显示命令的转换。软件上结合串行接口命令和通信协议,用C语言编写了具有消息驱动机制的简单通用图形用户界面GUI程序,可以方便地移植到各种工控嵌入式系统。
1.标准串口扩展的设计
液晶显示模块STN6448D-4K支持640×480点阵4096伪彩色显示,用户接口为8位并行口。图1为模块的RS-232硬件扩展接口结构,在AT89C51单片机最小系统基础上,扩展了一片MAX232。单片机通过总线与模块STN6448D-4K的控制器相连。单片机接收并分析串口指令,调用相应函数完成对LCD的各种显示控制。为减少串行通信数据量,还扩展了一片2MB的Flash存储器AM29F016D,用于存储BMP图像和字符库、汉字库。通常采用的字库有汉字库文件Hzk16f.bin(16×16点阵)、Hzk24k.bin(24×24点阵),ASCII码文件ASC16.bin(16×8点阵)、ASC24.bin(24×12点阵)等,位图文件可以根据需要自行制作和增减。所有的字库和位图均通过RS-232接口从PC机下载到Flash存储器中,根据每个文件的存储首地址索引可以完成字符、汉字、位图的显示。
2.串口指令和通信软件设计
按照STN6448D-4K的编程格式编写清屏、画点、画线、画矩形、写字符(ASCII字符、汉字)、加载位图等基本绘图函数的单片机程序比较简单,这里不作说明。单片机在完成初始化、清屏操作后,将就绪状态信息传递给嵌入式系统的CPU,并等待从RS-232传来的绘图指令。每一个绘图指令,都是一个绘图命令帧,与一个绘图函数相对应。
单片机收到一个完整的绘图指令后根据指令码识别不同的绘图操作,调用相应的函数完成显示控制。由于各个函数的指令长短不一,单片机需要判断出一条指令的结束;而且单片机完成LCD操作需要时间,硬件上又没有一个“BUSY”信号来指示单片机暂时不能接收指令。故程序设计上需保证传输同步和可靠性。
2.1 显示命令帧的封装
每一个绘图指令都封装成一个绘图命令帧,封装时依据以下3条规则:
(1)在每一个绘图指令的结尾加上标志字节END,封装成一个绘图命令帧。一个完整的绘图命令帧包括绘图指令码、绘图函数参数以及END标志。标志字节END的编码为0x55;
(2)在帧数据(指令的有效数据)中的某一个字节如果与END(0x55)相同,则将这个字节转换为(0xDE,0xCF)的2字节序列。其中0xDE称为转义字符TRANS,0xCF为数据与END标志相同时转义后的替换符TRANS_REP。
(3)如果帧数据中某个字节与转义字符(0xDE)本身相同,则将其更换为(0xDE,0xDE)2字节序列。
如果不考虑转义字符,一个完整的绘图命令帧格式如下:
其中:CMD指令码,P1-Pn为n个字节数据。例如画水平线函数对应的命令帧中的字符依次为:0xCA, X0_H, X0_L, Y_H, Y_L, X1_H, X1_L, CLR。其中0xCA为指令码(对每个函数唯一),之后的6个为坐标参数,CLR为颜色。
2.2 接收状态机
单片机的接收中断处理采用接收状态机机制,状态转换如图2所示。
三个状态的含义为:
评论