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

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

3天内不再提示

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

英创信息技术 来源:英创信息技术 作者:英创信息技术 2019-11-18 10:04 次阅读

低成本的单色LCD在工业领域应用非常广泛,英利公司提供的基于嵌入式Linux平台的EM9160支持外接单色LCD屏,目前应用得比较多的规格包括有LCD320x240、LCD240x128、LCD128x64、LCD160x160等。在实际应用中有许多对于菜单界面操作的需求,需要客户根据应用的具体要求自行构建菜单显示界面,本文将重点介绍这方面的内容。

基于菜单界面操作过程实质一个简单的交互式操作,需要实时响应键盘消息、定时消息等。嵌入式Linux操作系统是一个实时多任务系统,可以利用多线程的方式来实现各个应用请求的响应。在本案例是通过创建多个线程的方式来实现对于键盘、定时任务的实时响应,从而实现对于菜单界面的操作。

下面分两个部分来介绍该例程:

1、应用程序框架

为了便于程序的设计和管理,利用了Linux多任务的编程优势,利用内核的任务调度机制,采用面向对象的C++编程将各个应用功能模块化。在该例程中需要实现的响应功能:键盘和定时任务的响应,在应用程序中通过创建两个线程来实现。

在该程序例程中main(…)函数,首先进行初始化操作,包括对于LCD屏的初始化、菜单界面的初始化操作等;然后是创建键盘处理线程、再进入主线程,主线程的功能主要是处理定时任务,在本方案中实现的是定时显示界面刷新。如下图所示:

// LCD显示屏的初始化操作

i1 = LCD_Init( LCD_160160 );

if( i1《0 )

{

printf( ‘LCD Init fail!\n’ );

}

LCD_LoadSmallFnt( );

LCD_SetMode( 1 ); // set to XOR mode

LCD_SetFont( 12 ); // 设置汉字显示为12点阵模式

// 加载缺省菜单界面

status = MenuManager.LoadMenu( );

if( status 《 0 )

{

printf( ‘status=%d\n’, status);

return status;

}

MenuManager.Show( );

MenuManager.Update();

// 打开键盘设备,并启动键盘处理线程

KeyManager.Open( );

for( ExitFlag=0; ; )

{

if( ExitFlag )

{

break;

}

// 延时1S 执行一次显示刷新操作

sleep( 1 );

MenuManager.Update( );

}

// 关闭键盘设备,并卸载键盘处理线程

KeyManager.Close( );

LCD_DeInit( );

return 0;

其中的主线程很简单,只是定时处理的任务,直接调用sleep(1)函数阻塞等待。

键盘处理线程主要检查是否有键按下,一旦有键按下则读取相应的键码值,并作相应的响应处理。当一个键按下时,EM9160内核中的键盘驱动程序将得到的有效键码存储在内部的缓冲区中,应用程序可直接通过read函数读取键码。

应用程序打开矩阵键盘驱动程序的方法还是打开相应的设备文件,如下:

key_fd = open(‘/dev/em9x60_keypad’, O_RDONLY | O_NONBLOCK);

以下为读取键码值并作相应的处理代码:

FD_ZERO(&fs_read);

FD_SET(key_fd,&fs_read);

time.tv_sec = 0;

time.tv_usec = 100000; //timeout = 100ms

fs_sel = select(key_fd+1, &fs_read, NULL, NULL, &time);

if(fs_sel)

{

//data available, so get it!

len = read(key_fd, &KeyCode, sizeof(KeyCode));

if(len 》 0)

{

//printf(‘len=%d KeyCode= 0x%x\r\n’, len, KeyCode);

switch( KeyCode )

{

case 0x011b:

KeyCmd = ESC;

MenuManager.Key_ESC( );

break;

case 0x1c0d:

KeyCmd = ENTER;

MenuManager.Key_ENTER( );

break;

case 0x0635:

KeyCmd = UP;

MenuManager.Key_SHIFT( 1 );

break;

case 0x0938:

KeyCmd = DOWN;

MenuManager.Key_SHIFT( 0 );

break;

case 0x0837:

KeyCmd = LEFT;

break;

case 0x0939:

KeyCmd = RIGHT;

break;

}

}

}

2、菜单界面设计

在本例程中主要是针对一个基于LCD160x160显示终端所设计的二级菜单显示界面,功能键有六个:Key_ESC、Key_Enter以及Key_UP、Key_Down、Key_Left、Key_Right键,通过Key_UP、Key_Down键选择菜单项,Key_Enter确认键来进入下一级,Key_ESC返回上一级菜单。

菜单的显示和管理是通过C++方式来实现,Class Item定义菜单中各个菜单项的显示特性以及操作特性;Class Menu定义了菜单的特性,其中包含又对于菜单中各个菜单项管理的功能;Class MenuManager是一个菜单管理类,这个类实现了对于各个菜单的管理和操作特性,相当于一个人机交互界面的功能。它们定义分别在 Item.h Menu.h文件中。

为了增加菜单设计的灵活性,对于各个菜单界面的显示内容采用了读取配置文件的方式,即在配置文件中定义各个菜单的显示名称和显示位置,如:

// item的类型 显示名称 X位置 Y位置 下一级菜单名称

item=101 D1 0 0

item=100 D0 100 0

item=301 测量点数据显示 0 32 menu1

item=301 参数设置与查看 0 48 menu2

item=301 终端管理与维护 0 64 menu3

根据该配置文件所形成的显示菜单如下:

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

    关注

    87

    文章

    11342

    浏览量

    210266
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6086

    浏览量

    35555
收藏 人收藏

    相关推荐

    VS2005与ARM9嵌入式模块连接和调试步骤

    使用VS2005连接和调试ARM9嵌入式模块
    发表于 09-27 13:05

    如何利用ARM9嵌入式主板快速构建双CAN接口的方案

    提供的系列ARM9嵌入式主板,除EM9160嵌入式主板外,所有的ARM9主板上均可直接支持一个CAN接口。ETA701是
    的头像 发表于 10-08 11:37 4123次阅读
    如何利用<b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>ARM9</b>嵌入式主板快速构建双CAN接口的方案

    信息技术VS2005调试ARM9核心板简介

    C++(简称EVC)作为该平台的标准开发工具,EVC和标准PC平台VC的开发界面基本上完全一致,因此对于工程师来说,在ARM9平台上开发应用程序和开发PC上的应用程序一样容易。
    的头像 发表于 10-31 15:03 1920次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>VS2005调试<b class='flag-5'>ARM9</b>核心板简介

    信息技术ARM9工控主板WinCE应用程序远程控制应用

    公司推出的ARM9嵌入式工控主板产品系列,均预装了正版的WinCE5.0操作系统。微软的WINCE实时多任务操作系统是嵌入式领域的主流操作系统之一,它包括了以TCP/IP为特色的完整网络通讯协议
    的头像 发表于 11-04 09:28 1794次阅读

    信息技术ARM9工控主板内嵌AD概述

    公司推出的ARM9 嵌入式工控主板产品系列,均预装了正版WinCE5.0 操作系统。
    的头像 发表于 11-04 09:43 2692次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b>工控主板内嵌AD概述

    信息技术ARM9工控板在远程监控领域的应用

    ARM9工控主板的数据采集功能通常采用板上的GPIO实现数字输入输出、通过精简ISA总线扩展相应的AD或DA实现模拟数据的输入输出。在
    的头像 发表于 11-12 10:04 1849次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b>工控板在远程监控领域的应用

    信息技术ARM9工控板串口设备的COM组件应用

    公司的ARM9工控主板产品均预装了Windows CE5.0操作系统,支持包括EVC、C#、VB、LabView等多种开发工具。
    的头像 发表于 11-05 10:07 1805次阅读

    信息技术ARM9主板上运行案例解析

    今年(2009年)的市场活动中,为了让客户更好地完成产品应用开发,向第一次购买
    的头像 发表于 11-12 10:20 1491次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b>主板上运行案例解析

    信息技术CAN接口COM组件在C#语言领域应用

     ARM9工控主板的一个很大的特色就是提供了标准的CAN总线通讯接口,客户可以方便地在工业现场、汽车、船舶等等领域进行CAN通信应用。由于
    的头像 发表于 11-12 10:34 2486次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>CAN接口COM组件在C#语言领域应用

    信息技术ARM9工控板远程抓拍图像应用介绍

    ARM9工控主板功能齐全、体积小巧、性能稳定、超低价格的嵌入式主板产品。主板硬件完全按工业级标准设计,CPU采用了32位工业级ARM9芯片,PCB板经精心优化设计,除提供全面、高效
    的头像 发表于 11-13 09:41 2053次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b>工控板远程抓拍图像应用<b class='flag-5'>介绍</b>

    信息技术工控主板EM9360的GPIO介绍

    的WinCE驱动程序,支持应用程序通过WinCE相应的API函数来操作各路网络接口。此外EM9360还与公司其他ARM9主板一样,带有精简ISA扩展总线以及12位通用GPIO,精简ISA总线的基本使用方法可参考
    的头像 发表于 11-14 09:34 2440次阅读

    信息技术工控主板的复位管理介绍

     公司的工控主板是基于ARM9 CPU、预装正版WinCE的嵌入式主板产品。作为嵌入式应用,系统的可靠启动是其可靠性的重要组成部分。本文针对嵌入式应用的特点、介绍
    的头像 发表于 11-14 10:03 1710次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>工控主板的复位管理<b class='flag-5'>介绍</b>

    信息技术ARM9工控主板扩展矩阵键盘的方法

    键盘输入,仅需要一些数字键或功能键(比如方向键),此时可通过外扩矩阵键盘来实现。 1、矩阵键盘扩展硬件电路 ARM9工控主板可通过GPIO或精简ISA总线扩展矩阵键盘,通过GPIO扩展时,程序直接驱动IO作为扫描输入输出,比
    的头像 发表于 01-14 11:05 1703次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b>工控主板扩展矩阵键盘的方法

    信息技术ARM9主板进行连接调试的两种方法

    在我们提供给用户的《使用VS2005连接和调试ARM9嵌入式模块》一文中,我们分别以在EM9000上和在EM9260上为例讲述了两种对基于WinCE的ARM9主板进行连接调试的方法
    的头像 发表于 01-14 11:29 1515次阅读

    信息技术ARM9工控主板的SMS短信息应用介绍

    的应用越来越广泛,其中主要以GPRS数据通讯及SMS短信息方式为主。GPRS数据通讯是以TCP/IP方式进行通讯,GPRS模块发送SMS短信,是通过串口发送AT指令来实现。 公司基于ARM
    的头像 发表于 01-14 11:45 1386次阅读