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

    文章

    10992

    浏览量

    206744
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34618
收藏 人收藏

    评论

    相关推荐

    构造廉价的Arm9 开发平台

    。但由于市面上的Arm9开发板价格不菲,使不少想学习Arm9开发技术的朋友望而却步,其中有一大部分是各大高校的学生。本文阐述了改造ipTIME的IP0422路由器,使其成为VxWorks和Li
    发表于 10-31 17:56

    ARM7和ARM9双核平台的技术分析

    ,教学内容侧重于微处理器接口设计、驱动开发和系统应用,培养工业自动化、测控、智能仪表等应用领域的嵌入式技术人才。  宣称采用两种CPU子板的方式,实现ARM7&ARM9的功能,是完全没
    发表于 05-04 15:46

    几个提供ARM9板的公司的比较

    。现在,周立功的技术支持远远不如以前了,有些时候还很不好,如果自己的软件及硬件开发能力很不错的话,选择它的东西还是可以的,性价比不错。成都信息:他的板子很少,X86的,
    发表于 12-02 17:29

    适合ARM7/ARM9/ARM9/A8的wifi模块、linux/andriod/wince系统

    `适合ARM7/ARM9/ARM9/A8的wifi模块、linux/andriod/wince系统`
    发表于 09-27 17:07

    支持Linux高级客户自行移植内核

    上市)  该项服务具体说明和实施流程参见:支持客户进行Linux移植  需要该服务的客户需与签订技术保密协议,并承诺严格履行协议:
    发表于 01-18 13:52

    工控主板产品选型指南

      成都信息技术有限公司是一家专注于嵌入式工控主板研发、销售与服务的高科技公司,在嵌入式领域已有超16年的从业经历。公司的主板产品在
    发表于 02-28 11:28

    Eclipse支持在线调试Linux应用程序

    调试linux应用程序》进行下载,也可以直接联系我们。成都信息技术有限公司http://www.emtronix.com
    发表于 03-24 16:28

    对stm32和arm9研究方向的猜想

    的产品还不如用STM32做得好。而这方面STM32虽然是有点瑕疵,但是也做得不错。4. 采用ARM9比STM32需要更多的人手。对于ARM9,假设上了Linux系统,又要做驱动,又要做界面
    发表于 08-16 05:57

    使用ARM9Linux的嵌入式打印终端系统设计介绍

    处理器体系架构的特点,使得Linux越来越广泛的应用于嵌入式领域。同时,ARM9处理器高主频的处理速度、大容量的闪存芯片和MMU控制单元的支持,使得运行嵌入式Linux变得稳定而高效。本文设计与实现的打印
    发表于 07-19 06:35

    ARM9嵌入式主板看门狗的使用方法

    ARM9嵌入式主板Watchdog的使用
    发表于 09-26 10:06

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

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

    对比stm32,arm9研究方向的猜想

    做出来的产品还不如用STM32做得好。而这方面STM32虽然是有点瑕疵,但是也做得不错。4. 采用ARM9比STM32需要更多的人手。对于ARM9,假设上了Linux系统,又要做驱动,又要做
    发表于 10-19 09:19

    ARM9 ETM9技术参考手册

    ETM9ARM9系列微处理器提供指令和数据跟踪。本文档介绍ARM9Thumb系列处理器与ETM9之间的接口。有关
    发表于 08-02 17:16

    MATLAB图形用户界面设计

    MATLAB图形用户界面设计:7.1 MATLAB 图形界面编程基础7.2 MATLAB 标准对话框7.3 MATLAB 图形界面设计基本控件7.4 MATLAB 界面
    发表于 09-03 12:20 0次下载

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

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