淺談人機(jī)交互msOS GUI設(shè)計(jì)
人機(jī)交互(Human-Computer InteracTIon, 簡(jiǎn)寫(xiě)HCI):是指人與計(jì)算機(jī)之間使用某種對(duì)話語(yǔ)言,以一定的交互方式,為完成確定任務(wù)的人與計(jì)算機(jī)之間的信息交換過(guò)程。
從上面的定義,可能太抽象化了,用生活中的例子來(lái)說(shuō),假如你要吃水煮魚(yú),選擇不同功能電磁爐,人的勞累程度不一樣。怎么樣才可以做出色香俱全的菜肴,不同電磁爐提供的交互方法不同,有些電磁爐可以通過(guò)設(shè)定長(zhǎng)時(shí)間低功率把魚(yú)和其他配料味道燉在一起, 有些只能調(diào)整功率,也是可以做出美味的,有些一鍵設(shè)置模式,按普遍規(guī)律固定方法煮魚(yú)。
以上其實(shí)就是三種不同人機(jī)交互方式來(lái)完成相同功能,各有不同市場(chǎng)需求。
今天把我學(xué)習(xí)理解到的 msOS GUI 設(shè)計(jì)跟大家分享。
msOS 靈活運(yùn)用結(jié)構(gòu)體,仿C# 的風(fēng)格,輕便的設(shè)計(jì)出在硬件 JN12864J LCD上可交互的顯示GUI,
設(shè)計(jì)思想是按添加組件方法,靈活的處理多界面,不同數(shù)據(jù)類型顯示及參數(shù)調(diào)整。采用面向?qū)ο蠹版湵矸绞皆O(shè)計(jì)方式如
Form、Label及TextBox等控件,讓圖形界面設(shè)計(jì)非常簡(jiǎn)單而讓設(shè)計(jì)者只關(guān)心業(yè)務(wù)邏輯設(shè)計(jì)。
具體見(jiàn)如下框圖。
表方式:
詳細(xì)見(jiàn)如下函數(shù)
typedef struct LabelSelf
{
byte X; // display informaTIon at X‘row locaTIon,it’s only 4 row.
byte Y; //display informaTIon at Y‘column location
byte Shift; //
int Offset;
DataType Type;
DataAlign Align;
void * DataPoint;
const string * StringBlockPoint;
struct LabelSelf * NextLabelPoint;//鏈表
}Label;
界面設(shè)計(jì):mmi.c 文件,通過(guò)注冊(cè)控件方式,比如一個(gè)界面就是一個(gè)Form,一個(gè)form 由Label 及TextBox 及 BackText 構(gòu)成。其中BackText 為固定內(nèi)容,動(dòng)態(tài)數(shù)據(jù)由Label 及TextBox 來(lái)控制。
目前程序做了5個(gè)Form Logo、check,work,setup,service。拿一個(gè)最簡(jiǎn)單的Form 來(lái)分析。
System.Gui.Form.Initialize(&App.Menu.CheckForm);// 即一個(gè)LCD 界面,目前只是顯示三個(gè)三角形,可以編寫(xiě)
實(shí)現(xiàn)自己公司的LOGO.
CheckChart.Character = ’*‘;
for(i = 0; i 《 16; i++)
{
CheckChart.Column = 0;
}
App.Menu.CheckForm.ChartPoint = &CheckChart;
業(yè)務(wù)邏輯部分已經(jīng)包含到控件的結(jié)構(gòu)體定義中去,我們只要編寫(xiě)函數(shù)改變控件中相應(yīng)變量,相對(duì)應(yīng)的分層文件為data.c
void InitializeData(void)
{
App.Data.Frequence = 980000;
App.Data.Power = 6000;
App.Data.PowerPercent = 12;
App.Data.Voltage = 99;
App.Data.Current = 101;
App.Data.Temperature = -25;
App.Data.State = 1;
App.Data.MaxPower = 6000;
App.Data.MaxTemperature = 50;
App.Data.MaxFrequence = 980000;
App.Data.MaxFrequenceOffset = 100000;
App.Data.MinStream = 50;
App.Data.SerialNumber = 0;
App.Data.ProductionDate = (13 《《 16) + (7 《《 8) + 24;
App.Data.IdentifyNumber0 = 0x12345678;
App.Data.IdentifyNumber1 = 0x34567890;
App.Data.IdentifyNumber2 = 0x56789012;
App.Data.IdentifyNumber3 = 0x78901234;
}
備注:GUi.c 中的一些函數(shù)設(shè)置很巧妙,必須要結(jié)合硬件驅(qū)動(dòng),這里驅(qū)動(dòng)更加巧妙。