0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)ARM9 Linux智能終端菜單界面設(shè)計介紹

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2019-11-18 10:04 ? 次閱讀

低成本的單色LCD在工業(yè)領(lǐng)域應(yīng)用非常廣泛,英利公司提供的基于嵌入式Linux平臺的EM9160支持外接單色LCD屏,目前應(yīng)用得比較多的規(guī)格包括有LCD320x240、LCD240x128、LCD128x64、LCD160x160等。在實際應(yīng)用中有許多對于菜單界面操作的需求,需要客戶根據(jù)應(yīng)用的具體要求自行構(gòu)建菜單顯示界面,本文將重點介紹這方面的內(nèi)容。

基于菜單界面操作過程實質(zhì)一個簡單的交互式操作,需要實時響應(yīng)鍵盤消息、定時消息等。嵌入式Linux操作系統(tǒng)是一個實時多任務(wù)系統(tǒng),可以利用多線程的方式來實現(xiàn)各個應(yīng)用請求的響應(yīng)。在本案例是通過創(chuàng)建多個線程的方式來實現(xiàn)對于鍵盤、定時任務(wù)的實時響應(yīng),從而實現(xiàn)對于菜單界面的操作。

下面分兩個部分來介紹該例程:

1、應(yīng)用程序框架

為了便于程序的設(shè)計和管理,利用了Linux多任務(wù)的編程優(yōu)勢,利用內(nèi)核的任務(wù)調(diào)度機制,采用面向?qū)ο蟮?a href="http://wenjunhu.com/tags/C++/" target="_blank">C++編程將各個應(yīng)用功能模塊化。在該例程中需要實現(xiàn)的響應(yīng)功能:鍵盤和定時任務(wù)的響應(yīng),在應(yīng)用程序中通過創(chuàng)建兩個線程來實現(xiàn)。

在該程序例程中main(…)函數(shù),首先進行初始化操作,包括對于LCD屏的初始化、菜單界面的初始化操作等;然后是創(chuàng)建鍵盤處理線程、再進入主線程,主線程的功能主要是處理定時任務(wù),在本方案中實現(xiàn)的是定時顯示界面刷新。如下圖所示:

// 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 ); // 設(shè)置漢字顯示為12點陣模式

// 加載缺省菜單界面

status = MenuManager.LoadMenu( );

if( status 《 0 )

{

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

return status;

}

MenuManager.Show( );

MenuManager.Update();

// 打開鍵盤設(shè)備,并啟動鍵盤處理線程

KeyManager.Open( );

for( ExitFlag=0; ; )

{

if( ExitFlag )

{

break;

}

// 延時1S 執(zhí)行一次顯示刷新操作

sleep( 1 );

MenuManager.Update( );

}

// 關(guān)閉鍵盤設(shè)備,并卸載鍵盤處理線程

KeyManager.Close( );

LCD_DeInit( );

return 0;

其中的主線程很簡單,只是定時處理的任務(wù),直接調(diào)用sleep(1)函數(shù)阻塞等待。

鍵盤處理線程主要檢查是否有鍵按下,一旦有鍵按下則讀取相應(yīng)的鍵碼值,并作相應(yīng)的響應(yīng)處理。當一個鍵按下時,EM9160內(nèi)核中的鍵盤驅(qū)動程序?qū)⒌玫降挠行фI碼存儲在內(nèi)部的緩沖區(qū)中,應(yīng)用程序可直接通過read函數(shù)讀取鍵碼。

應(yīng)用程序打開矩陣鍵盤驅(qū)動程序的方法還是打開相應(yīng)的設(shè)備文件,如下:

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

以下為讀取鍵碼值并作相應(yīng)的處理代碼:

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、菜單界面設(shè)計

在本例程中主要是針對一個基于LCD160x160顯示終端所設(shè)計的二級菜單顯示界面,功能鍵有六個:Key_ESC、Key_Enter以及Key_UP、Key_Down、Key_Left、Key_Right鍵,通過Key_UP、Key_Down鍵選擇菜單項,Key_Enter確認鍵來進入下一級,Key_ESC返回上一級菜單。

菜單的顯示和管理是通過C++方式來實現(xiàn),Class Item定義菜單中各個菜單項的顯示特性以及操作特性;Class Menu定義了菜單的特性,其中包含又對于菜單中各個菜單項管理的功能;Class MenuManager是一個菜單管理類,這個類實現(xiàn)了對于各個菜單的管理和操作特性,相當于一個人機交互界面的功能。它們定義分別在 Item.h Menu.h文件中。

為了增加菜單設(shè)計的靈活性,對于各個菜單界面的顯示內(nèi)容采用了讀取配置文件的方式,即在配置文件中定義各個菜單的顯示名稱和顯示位置,如:

// item的類型 顯示名稱 X位置 Y位置 下一級菜單名稱

item=101 D1 0 0

item=100 D0 100 0

item=301 測量點數(shù)據(jù)顯示 0 32 menu1

item=301 參數(shù)設(shè)置與查看 0 48 menu2

item=301 終端管理與維護 0 64 menu3

根據(jù)該配置文件所形成的顯示菜單如下:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209476
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6085

    瀏覽量

    35329
收藏 人收藏

    評論

    相關(guān)推薦

    VS2005與創(chuàng)ARM9嵌入式模塊連接和調(diào)試步驟

    使用VS2005連接和調(diào)試創(chuàng)ARM9嵌入式模塊
    發(fā)表于 09-27 13:05

    如何利用創(chuàng)ARM9嵌入式主板快速構(gòu)建雙CAN接口的方案

    創(chuàng)提供的系列ARM9嵌入式主板,除EM9160嵌入式主板外,所有的ARM9主板上均可直接支持一個CAN接口。ETA701是
    的頭像 發(fā)表于 10-08 11:37 ?4069次閱讀
    如何利用<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>ARM9</b>嵌入式主板快速構(gòu)建雙CAN接口的方案

    創(chuàng)信息技術(shù)VS2005調(diào)試ARM9核心板簡介

    C++(簡稱EVC)作為該平臺的標準開發(fā)工具,EVC和標準PC平臺VC的開發(fā)界面基本上完全一致,因此對于工程師來說,在創(chuàng)ARM9平臺上開發(fā)應(yīng)用程序和開發(fā)PC上的應(yīng)用程序一樣容易。
    的頭像 發(fā)表于 10-31 15:03 ?1886次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>VS2005調(diào)試<b class='flag-5'>ARM9</b>核心板簡介

    創(chuàng)信息技術(shù)ARM9工控主板WinCE應(yīng)用程序遠程控制應(yīng)用

    創(chuàng)公司推出的ARM9嵌入式工控主板產(chǎn)品系列,均預(yù)裝了正版的WinCE5.0操作系統(tǒng)。微軟的WINCE實時多任務(wù)操作系統(tǒng)是嵌入式領(lǐng)域的主流操作系統(tǒng)之一,它包括了以TCP/IP為特色的完整網(wǎng)絡(luò)通訊協(xié)議
    的頭像 發(fā)表于 11-04 09:28 ?1755次閱讀

    創(chuàng)信息技術(shù)ARM9工控主板內(nèi)嵌AD概述

    創(chuàng)公司推出的ARM9 嵌入式工控主板產(chǎn)品系列,均預(yù)裝了正版WinCE5.0 操作系統(tǒng)。
    的頭像 發(fā)表于 11-04 09:43 ?2644次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ARM9</b>工控主板內(nèi)嵌AD概述

    創(chuàng)信息技術(shù)ARM9工控板在遠程監(jiān)控領(lǐng)域的應(yīng)用

    創(chuàng)ARM9工控主板的數(shù)據(jù)采集功能通常采用板上的GPIO實現(xiàn)數(shù)字輸入輸出、通過精簡ISA總線擴展相應(yīng)的AD或DA實現(xiàn)模擬數(shù)據(jù)的輸入輸出。在創(chuàng)
    的頭像 發(fā)表于 11-12 10:04 ?1788次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ARM9</b>工控板在遠程監(jiān)控領(lǐng)域的應(yīng)用

    創(chuàng)信息技術(shù)ARM9工控板串口設(shè)備的COM組件應(yīng)用

    創(chuàng)公司的ARM9工控主板產(chǎn)品均預(yù)裝了Windows CE5.0操作系統(tǒng),支持包括EVC、C#、VB、LabView等多種開發(fā)工具。
    的頭像 發(fā)表于 11-05 10:07 ?1761次閱讀

    創(chuàng)信息技術(shù)ARM9主板上運行案例解析

    創(chuàng)今年(2009年)的市場活動中,為了讓客戶更好地完成產(chǎn)品應(yīng)用開發(fā),創(chuàng)向第一次購買創(chuàng)
    的頭像 發(fā)表于 11-12 10:20 ?1428次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ARM9</b>主板上運行案例解析

    創(chuàng)信息技術(shù)CAN接口COM組件在C#語言領(lǐng)域應(yīng)用

     創(chuàng)ARM9工控主板的一個很大的特色就是提供了標準的CAN總線通訊接口,客戶可以方便地在工業(yè)現(xiàn)場、汽車、船舶等等領(lǐng)域進行CAN通信應(yīng)用。由于創(chuàng)
    的頭像 發(fā)表于 11-12 10:34 ?2457次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>CAN接口COM組件在C#語言領(lǐng)域應(yīng)用

    創(chuàng)信息技術(shù)ARM9工控板遠程抓拍圖像應(yīng)用介紹

    創(chuàng)ARM9工控主板功能齊全、體積小巧、性能穩(wěn)定、超低價格的嵌入式主板產(chǎn)品。主板硬件完全按工業(yè)級標準設(shè)計,CPU采用了32位工業(yè)級ARM9芯片,PCB板經(jīng)精心優(yōu)化設(shè)計,除提供全面、高效
    的頭像 發(fā)表于 11-13 09:41 ?1999次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ARM9</b>工控板遠程抓拍圖像應(yīng)用<b class='flag-5'>介紹</b>

    創(chuàng)信息技術(shù)工控主板EM9360的GPIO介紹

    的WinCE驅(qū)動程序,支持應(yīng)用程序通過WinCE相應(yīng)的API函數(shù)來操作各路網(wǎng)絡(luò)接口。此外EM9360還與創(chuàng)公司其他ARM9主板一樣,帶有精簡ISA擴展總線以及12位通用GPIO,精簡ISA總線的基本使用方法可參考
    的頭像 發(fā)表于 11-14 09:34 ?2402次閱讀

    創(chuàng)信息技術(shù)工控主板的復(fù)位管理介紹

     創(chuàng)公司的工控主板是基于ARM9 CPU、預(yù)裝正版WinCE的嵌入式主板產(chǎn)品。作為嵌入式應(yīng)用,系統(tǒng)的可靠啟動是其可靠性的重要組成部分。本文針對嵌入式應(yīng)用的特點、介紹
    的頭像 發(fā)表于 11-14 10:03 ?1673次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>工控主板的復(fù)位管理<b class='flag-5'>介紹</b>

    創(chuàng)信息技術(shù)ARM9工控主板擴展矩陣鍵盤的方法

    鍵盤輸入,僅需要一些數(shù)字鍵或功能鍵(比如方向鍵),此時可通過外擴矩陣鍵盤來實現(xiàn)。 1、矩陣鍵盤擴展硬件電路 創(chuàng)ARM9工控主板可通過GPIO或精簡ISA總線擴展矩陣鍵盤,通過GPIO擴展時,程序直接驅(qū)動IO作為掃描輸入輸出,比
    的頭像 發(fā)表于 01-14 11:05 ?1661次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ARM9</b>工控主板擴展矩陣鍵盤的方法

    創(chuàng)信息技術(shù)ARM9主板進行連接調(diào)試的兩種方法

    在我們提供給用戶的《使用VS2005連接和調(diào)試創(chuàng)ARM9嵌入式模塊》一文中,我們分別以在EM9000上和在EM9260上為例講述了兩種對基于WinCE的ARM9主板進行連接調(diào)試的方法
    的頭像 發(fā)表于 01-14 11:29 ?1455次閱讀

    創(chuàng)信息技術(shù)ARM9工控主板的SMS短信息應(yīng)用介紹

    的應(yīng)用越來越廣泛,其中主要以GPRS數(shù)據(jù)通訊及SMS短信息方式為主。GPRS數(shù)據(jù)通訊是以TCP/IP方式進行通訊,GPRS模塊發(fā)送SMS短信,是通過串口發(fā)送AT指令來實現(xiàn)。 創(chuàng)公司基于ARM
    的頭像 發(fā)表于 01-14 11:45 ?1347次閱讀