0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

低成本的单色LCD构建菜单界面的方案介绍

英创信息技术 作者:英创信息技术 2019-09-28 02:49 次阅读

低成本的单色LCD在工业领域应用非常广泛,英创公司提供的基于WinCE平台的EM9X60系列板卡均支持外接单色LCD屏,目前应用得比较多的规格包括有LCD320X240、LCD240X128、LCD128X64等。在实际应用中有许多对于菜单界面操作的需求,由于EM9X60系列板没有支持标准的Windows桌面显示,因此应用程序无法直接利用WindowsCE的窗口界面、或者基于MFC的对话框作为应用程序的操作界面,而是需要客户根据应用的具体要求自行构建菜单界面,本文将重点介绍这方面的内容。
基于菜单界面操作过程实质一个简单的交互式操作,需要实时响应键盘消息、定时消息等。WinCE操作系统内部具备有完善的消息处理机制,来实现应用请求消息的实时响应。因此本案例是一个具有Windows风格的应用例程,通过窗口的消息传递来实现对于键盘、定时任务的实时响应,从而实现对于菜单界面的操作。
下面分两个部分来介绍该例程:

1、应用程序框架
在Windows下进行窗口应用程序编程的优点,程序只对操作系统发给它的通知进行响应,比如收到键盘被按下、定时任务等,而不需要应用程序不断地查询窗口的请求输入。在支持单色LCD的WinCE系统下也是如此,操作系统在有输入发生时会通知应用程序,操作系统是通过发送消息到应用程序窗口的方式来完成这个通知,虽然该“应用程序窗口”无法正常显示,但是可以通过它来完成消息的传递。本例程采用传统的Windows窗口应用程序编程的框架,以方便实现对于外界请求输入的响应,从而实现在单色LCD上菜单界面的操作显示。
在该程序例程中WinMain(…)函数也是按照窗口应用程序的过程,首先进行初始化操作,包括对于LCD屏的初始化、菜单界面的初始化操作、加载矩阵键盘驱动等操作;然后是创建窗口;再进入消息循环。如下图所示:

低成本的单色LCD构建菜单界面的方案介绍

// LCD初始化操作以及加载缺省的菜单界面
i1 = LCD_Init( LCD_12864 );
LCD_LoadSmallFnt( );
LCD_SetMode( 1 ); // set to XOR mode
status = MenuManager.LoadMenu( );
if( status < 0 ) return status;
MenuManager.Show( );
// 激活基于EM9x60板卡ISA的矩阵键盘驱动
hDevice = ActivateDevice( TEXT('Drivers\\isa_keypad'), 0);

// 初始化本程序实例,主要是创建窗口等工作
hwndMain = InitInstance( hInstance, lpCmdLine, nCmdShow );
if( hwndMain == 0 )
return 0x10;// init fail!
// 设置定时器的时间间隔为2秒
SetTimer( hwndMain, 1, 2000, NULL );

// 应用程序消息循环
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
KillTimer( hwndMain, 1 );
LCD_UnLoadSmallFnt( );
其中的消息循环为主线程,循环很简单,调用GetMessage函数,从应用程序的消息队列中取得一条来自系统的消息,如果没有消息到来,这个函数就是处于等待状态,相当于这个应用主线程就被阻塞直到消息到来。
菜单例程中响应的系统消息包括:键盘消息(WM_KEYUP)和定时消息(WM_TIMER),WinCE和Windows标准系统一样使用了相同的键盘消息处理方式。当一个键按下时,通常是以WM_KEYDOWN消息起始,如果按下的键代表一个字符,比如一个字母或数字,在WM_KEYDOWN之后还会发送一个WM_CHAR消息,当键被释放时,最终的WM_KEYUP消息被发送,在这些消息的参数wParam指示了按下键的虚拟键值。为了简化程序,在此例程中对于按键的响应,是等到按键释放的时候,也就是说应用程序只响应WM_KEYUP消息。定时消息则可以通过函数SetTimer( … )来实现,该函数同时也设置了定时事件、以及定时间隔。
消息的响应是通过定义MainMessage表格,将消息值和消息处理例程函数关联起来。如:
const struct decodeUINT MainMessages[] =
{
{ WM_KEYUP, DoKeysMain },
{ WM_TIMER, DoTimerMain },
{ WM_DESTROY, DoDestroyMain }
};

// 键盘消息WM_KEYUP ..处理函数
LRESULT DoKeysMain( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
switch( wParam )
{
case 0x33:// 移动键
MenuManager.Key_SHIFT( );
break;
case 0x36:// 确认键
MenuManager.Key_ENTER( );
break;
}
return 0;
}
// 定时消息WM_TIMER处理函数
LRESULT DoTimerMain( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
MenuManager.Update( );
return 0;
}
2、菜单界面设计
在本例程中主要是针对一个基于LCD128X64显示终端所设计的二级菜单显示界面,功能键有两个:移动键(Key_Shift)和确认键(Key_Enter),通过移动键选择菜单项,确认键来进入下一级,或者返回上一级菜单。
菜单的显示和管理是通过C++方式来实现,Class Item定义菜单中各个菜单项的显示特性以及操作特性;Class Menu定义了菜单的特性,其中包含又对于菜单中各个菜单项管理的功能;Class MenuManager是一个菜单管理类,这个类实现了对于各个菜单的管理和操作特性,相当于一个人机交互界面的功能。它们定义分别在 Item.h Menu.h文件中。
为了增加菜单设计的灵活性,对于各个菜单界面的显示内容采用了读取配置文件的方式,即在配置文件中定义各个菜单的显示名称和显示位置,如:
// item的类型 显示名称 X位置 Y位置 下一级菜单名称
item=301 终端参数 0 0 MENU1
item=301 实时数据 0 16 MENU2
item=301 终端状态 0 32 MENU3
item=301 显示配置 0 48 MENU4
item=301 扩展菜单 64 0 MENU5
item=301 扩展菜单 64 16 MENU6
item=301 扩展菜单 64 32 MENU7
item=301 扩展菜单 64 48 MENU8
根据该配置文件所形成的菜单如下:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3440

    浏览量

    87144
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34614
收藏 人收藏

    评论

    相关推荐

    一款低成本高性能的LCD移动电源设计方案

    据统计,市面上80%以上的产品采用的粗略的电量计量方式,同质化严重。为了让消费者有更好的用户体验,携带多重优秀品质的高性价比LCD移动电源应运而生。本文介绍一款低成本高性能的LCD移动
    发表于 10-20 11:08 2309次阅读

    EM335x支持低成本单色LCD显示方案

    LCD控制器包括有两种独立的控制器:一种是行扫(raster)模式,一种是LCD接口驱动(LIDD)模式,raster 模式用于处理同步LCD,用于支持彩色液晶显示屏,而LIDD模式可以用来支持
    发表于 07-11 11:00

    低成本LCD偏置电源分立式解决方案

    描述此参考设计使用升压转换器 IC TPS61085 提供低成本 LCD 偏置电源电路。此解决方案提供薄膜晶体管 (TFT) LCD 显示屏所需的所有四个电压。TPS61085 升压转
    发表于 11-19 14:54

    使用STM32F10xxx实现低成本现实的应用方案

    本文档适用于STM32F1系列微控制器。文档描述了在没有片内LCD驱动硬件的情况下,使用STM32F10xxx微控制器驱动LCD的技术。此技术提供了使用STM32F10xxx实现低成本现实的应用
    发表于 12-01 06:26

    图形LCD模块的菜单方式人机交互界面

    在以单片机为核心的嵌入式应用中,友好的人机交互界面起着十分重要的作用。笔者在设计中使用WGM-12864B 图形LCD 模块实现一种中文窗口菜单界面,设计中使用的方法具有普遍性意
    发表于 04-16 13:57 43次下载

    低成本LCD驱动控制的ASIC实现方案

    低成本LCD驱动控制的ASIC实现方案深圳集成电路设计产业化基地管理中心刘 奇LCD驱动控制是显示驱动信号,进而驱动LCD显示器的核心部件。
    发表于 12-20 09:32 56次下载

    低成本、双SCART机顶盒方案,支持Kanal+

    低成本、双SCART机顶盒方案,支持Kanal+ 这篇应用笔记描述了采用MAX9655视频滤波放大器构建低成本、双SCART开关解决方案
    发表于 12-26 10:14 1012次阅读
    <b class='flag-5'>低成本</b>、双SCART机顶盒<b class='flag-5'>方案</b>,支持Kanal+

    基于MAX17014的低成本LCD TV电源解决方案

    基于MAX17014的低成本LCD TV电源解决方案 Maxim 公司的MAX17014是低成本多输出的LCD TV电源控制器,能
    发表于 03-24 17:53 834次阅读
    基于MAX17014的<b class='flag-5'>低成本</b><b class='flag-5'>LCD</b> TV电源解决<b class='flag-5'>方案</b>

    WinCE下单色LCD菜单界面设计方案

    低成本单色 LCD 在工业领域应用非常广泛,英创公司提供的基于WinCE平台的EM9X60系列板卡均支持外接单色LCD屏,目前应用得比较多
    发表于 06-09 15:49 49次下载
    WinCE下<b class='flag-5'>单色</b><b class='flag-5'>LCD</b>屏<b class='flag-5'>菜单</b><b class='flag-5'>界面设计方案</b>

    适用于单片机LCD12864的界面菜单设计思路资料免费下载

    本文档的主要内容详细介绍的是适用于单片机LCD12864的界面菜单设计思路资料免费下载。
    发表于 07-02 16:06 43次下载
    适用于单片机<b class='flag-5'>LCD</b>12864的<b class='flag-5'>界面</b><b class='flag-5'>菜单</b>设计思路资料免费下载

    英创信息技术ARM9 Linux智能终端菜单界面设计介绍

    240x128、LCD128x64、LCD160x160等。在实际应用中有许多对于菜单界面操作的需求,需要客户根据应用的具体要求自行构建
    的头像 发表于 11-18 10:04 1117次阅读
    英创信息技术ARM9 Linux智能终端<b class='flag-5'>菜单</b><b class='flag-5'>界面</b>设计<b class='flag-5'>介绍</b>

    英创信息技术EM335x支持低成本单色LCD显示介绍

    LCD控制器包括有两种独立的控制器:一种是行扫(raster)模式,一种是LCD接口驱动(LIDD)模式,raster 模式用于处理同步LCD,用于支持彩色液晶显示屏,而LIDD模式可以用来支持
    的头像 发表于 02-03 10:04 1370次阅读

    英创信息技术ESM335x主板支持单色LCD屏显示简介

    英创公司曾经在EM335x主板上推出了一套支持低成本单色LCD屏的方案,详细的介绍请参考文章《EM335x支持
    的头像 发表于 02-07 11:05 1172次阅读
    英创信息技术ESM335x主板支持<b class='flag-5'>单色</b><b class='flag-5'>LCD</b>屏显示简介

    低成本的医疗检测与监测方案

    介绍最新的低成本的医疗检测与监测方案
    发表于 03-16 15:38 8次下载
    <b class='flag-5'>低成本</b>的医疗检测与监测<b class='flag-5'>方案</b>

    基于AVR单片机的树状菜单界面的设计

    电子发烧友网站提供《基于AVR单片机的树状菜单界面的设计.pdf》资料免费下载
    发表于 10-30 11:10 0次下载
    基于AVR单片机的树状<b class='flag-5'>菜单</b><b class='flag-5'>界面的</b>设计