显示器是系统的输出设备,用于反馈系统的运行状态,并给用户以直观信息,用户可以 根据提示进行相应的操作。本控制系统采用 LCD 显示屏,没有驱动电路,需要设计驱动电路与之配合使用。设计中所选的液晶显示屏是 SHARP 公司的 5.7 寸显示屏 LQ057Q3DC12I,其供电要求是 3.0V~3.6V,需将芯片接上 3.3V 的电压。
3 、控制系统软件设计
3.1 键盘输入程序
键盘输入模块的工作任务包括键盘扫描、键盘驱动和键盘处理。键盘扫描获得按键的扫描码,键盘驱动接收扫描码并对其进行处理,将处理后的数据送至应用程序,应用程序获得键值信息后对信息进行处理,实现按键功能。
键盘采用循环扫描方式,按照设定的扫描频率对键盘输入进行检测。系统创建一个扫 描任务,当检测到合法按键之后就将该按键扫描码写入消息发送给其他任务,通知系统某键被按下,被按键的扫描码通常放置在一个缓冲区内,直到该应用程序准备处理一个按键为止。键盘驱动由 VxWorks 操作系统的一个可选组件——多媒体库 WindML 提供[4],包括下 层驱动和上层驱动。下层驱动负责驱动设备控制器并向上层驱动传送设备的原始数据,它是作为 I/O 驱动来实现的,被设置在系统内核。上层驱动接收来自下层驱动的设备原始数据,并进行解释处理,将其打包成一个输入事件信息,然后将该信息发送至驱动接口。应用程序通过驱动获得键盘的状态之后,根据从缓冲区读出的键值,按照键盘的预定义对各控制模块的组态信息进行设置,以执行相应的功能。
3.2 图形显示程序
进行图形界面(GUI)的设计同样需要加载多媒体库 WindML,WindML 支持多线程和多任务,但图形的资源是一定的,为了防止多线程之间产生资源冲突,需要使用互斥信号量锁定资源。在使用一组绘图函数前,用 uglBatchStart(gc)通过互斥信号量锁定图形上下文, 图形设备及缓冲,并隐藏光标。绘图操作完成后,再用 uglBatchEnd(gc)释放被锁定的资源, 以被其他的绘图函数使用。以下根据 WindML 的编程流程,以绘制直线为例给出一个绘图 操作的程序:
{
UGL_GC_ID gc;
。..。..
uglInitialize(); // 初始化
。..。..
uglColorAlloc(devId, &colorTable[GREEN].rgbColor, UGL_NULL,
&colorTable[GREEN].uglColor, 1); // 配置颜色
。..。..
gc= uglGcCreate(devId); // 创建图形上下文
。..。..
uglBatchStart(gc); // 锁定图形资源
uglForegroundColorSet(gc, colorTable[WHITE].uglColor); // 设置前景色 uglBackgroundColorSet(gc, colorTable[RED].uglColor); // 设置背景色 uglLineWidethSet(gc, 9); // 设定线宽