历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2018年03月24日 | 浅谈人机交互msOS GUI设计

2018-03-24 来源:互联网

    人机交互(Human-Computer InteracTIon, 简写HCI):是指人与计算机之间使用某种对话语言,以一定的交互方式,为完成确定任务的人与计算机之间的信息交换过程。

  从上面的定义,可能太抽象化了,用生活中的例子来说,假如你要吃水煮鱼,选择不同功能电磁炉,人的劳累程度不一样。怎么样才可以做出色香俱全的菜肴,不同电磁炉提供的交互方法不同,有些电磁炉可以通过设定长时间低功率把鱼和其他配料味道炖在一起, 有些只能调整功率,也是可以做出美味的,有些一键设置模式,按普遍规律固定方法煮鱼。

  以上其实就是三种不同人机交互方式来完成相同功能,各有不同市场需求。

  今天把我学习理解到的 msOS GUI 设计跟大家分享。

  msOS 灵活运用结构体,仿C# 的风格,轻便的设计出在硬件 JN12864J LCD上可交互的显示GUI,

  设计思想是按添加组件方法,灵活的处理多界面,不同数据类型显示及参数调整。采用面向对象及链表方式设计方式如

  Form、Label及TextBox等控件,让图形界面设计非常简单而让设计者只关心业务逻辑设计。

  表方式:

  详细见如下函数

  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;

  界面设计:mmi.c 文件,通过注册控件方式,比如一个界面就是一个Form,一个form 由Label 及TextBox 及 BackText 构成。其中BackText 为固定内容,动态数据由Label 及TextBox 来控制。

  目前程序做了5个Form Logo、check,work,setup,service。拿一个最简单的Form 来分析。

  System.Gui.Form.Initialize(&App.Menu.CheckForm);// 即一个LCD 界面,目前只是显示三个三角形,可以编写

  实现自己公司的LOGO.

  CheckChart.Character = ’*‘;

  for(i = 0; i 《 16; i++)

  {

  CheckChart.Column = 0;

  }

  App.Menu.CheckForm.ChartPoint = &CheckChart;

  业务逻辑部分已经包含到控件的结构体定义中去,我们只要编写函数改变控件中相应变量,相对应的分层文件为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 中的一些函数设置很巧妙,必须要结合硬件驱动,这里驱动更加巧妙。


  几个关键点如下:

  GUi.c 如下函数设计来源硬件驱动及硬件功能。

  static char GuiBuffer[4][16];//用于交换显示的数据结构,显示4行16个字符。

  static char DisplayBuffer[4][16];

  //64×16 位字符显示 RAM(DDRAM 最多 16 字符×4 行,LCD 显示范围 16×2 行)

  硬件驱动基础函数:

  static void LcdSendData(byte data)// 写数据

  static void LcdSendInstruct(byte instruct)// 写指令

  封装函数

  static void LcdDisplayString(byte y, string string)

  最后是通过DisplayString来调用封装函数。

  System.Device.Lcd.DisplayString = LcdDisplayString;

  DisplayString 函数是通过GUI.C 中的Updata 函数来更新显示数据。

  static void Update(void)

  {

  byte i, j;

  bool update;

  for (i = 0; i 《 4; i++)

  {

  update = false;

  for (j = 0; j 《 16; j++)

  {

  if(DisplayBuffer[j] != GuiBuffer[j])

  {

  DisplayBuffer[j] = GuiBuffer[j];

  update = true;

  }

  }

  if(update == true)

  {

  System.Device.Lcd.DisplayString(i, DisplayBuffer);

  }

  else

  {

  DelayMs(1);

  }

  }

  }

  硬件驱动设计跟硬件相关的几点理解:

  const char Array[4] =

  {

  0x80, 0x90, 0x88, 0x98

  }; //来源于手册如下描述,DDRAM 行地址。

  variable = 0x00F80000 | ((instruct & 0xF0) 《《 8) |((instruct & 0x0F) 《《 4);

  variable = 0x00FA0000 | ((data & 0xF0) 《《 8) |((data & 0x0F) 《《 4);

  // 来源于SPI 时序,上述就是组合出一次通信需要传输24BIT。

推荐阅读

史海拾趣

APC (APC by Schneider Electric)公司的发展小趣事

在电子行业的早期,电源的稳定性是许多企业和个人用户面临的一大难题。正是在这样的背景下,APC公司凭借其敏锐的市场洞察力,将重心放在小型桌面不中断电力供应(UPS)系统的电源保护及开发上。1984年,APC推出了公司的首个UPS产品,为PC、PC服务器及其网络提供了可靠的电力保障。这一创新举措不仅解决了当时的电力供应问题,更为APC在UPS电源保护领域奠定了坚实的基础。

德国ACAM公司的发展小趣事

近年来,ACAM公司开始将目光投向增材制造领域。ACAM公司与上海交通大学等高校建立了紧密的合作关系,共同推动增材制造技术的发展。通过合作研究,ACAM公司成功地将时间数字转换技术应用于增材制造领域,为行业的发展提供了新的动力。

Components Corporation公司的发展小趣事

2023年,ACAM公司与上海科技大学智造系统工程中心(CASE)签署了增材制造联合研发、应用研究和教育培训协议。这次合作标志着ACAM公司在增材制造领域的布局进一步深化,双方将共同推动增材制造技术的创新和应用,为行业的发展贡献更多的力量。

这五个故事展示了德国ACAM公司在电子行业中的发展历程和取得的成就。从创立之初的技术突破,到被收购后的技术实力大增,再到超声波计量领域的革命性突破,以及与高校合作推动增材制造发展,ACAM公司始终保持着创新的精神和不断进取的态度,为电子行业的发展做出了重要贡献。

Hirose Electric公司的发展小趣事

近年来,ACAM公司开始将目光投向增材制造领域。ACAM公司与上海交通大学等高校建立了紧密的合作关系,共同推动增材制造技术的发展。通过合作研究,ACAM公司成功地将时间数字转换技术应用于增材制造领域,为行业的发展提供了新的动力。

Datatronic公司的发展小趣事

随着环保意识的提高,Datatronic公司开始探索绿色发展的道路。公司注重节能减排和资源循环利用,通过改进生产工艺和使用环保材料等方式降低对环境的影响。同时,公司还积极推广绿色产品和技术,引导客户树立绿色消费观念。这些努力使得Datatronic公司在环保方面取得了显著成效,赢得了社会的广泛赞誉。

AMD(超微)公司的发展小趣事

随着环保意识的提高,Datatronic公司开始探索绿色发展的道路。公司注重节能减排和资源循环利用,通过改进生产工艺和使用环保材料等方式降低对环境的影响。同时,公司还积极推广绿色产品和技术,引导客户树立绿色消费观念。这些努力使得Datatronic公司在环保方面取得了显著成效,赢得了社会的广泛赞誉。

问答坊 | AI 解惑

请教4数码管显示问题

大家好,我用的是holtek的HT46R322单片机,现在做一个程序,按加减键实现数字从0~9999变化,数码管用的是共阳的8位数码管,用循环点亮的方法。         我用一个存储单元保存要显示的数值,比如我要显示123,然后可 ...…

查看全部问答>

利用Labview开发网络化仪器的研究

利用Labview开发网络化仪器的研究…

查看全部问答>

Wince6.0是否支持WPF

我用C#2008中的WPF做了个三维动画,怎么移植到Wince下,那位大虾能否赐教,不胜感谢.…

查看全部问答>

只有platformbuilder和现成的pda,能否修改系统中的东西

是不是需要下一个什么软件  把重新生成的映像文件什么的刷到机器里?…

查看全部问答>

c++如何取GPS数据

在C++上试取GPS数据,结果发现找不到GPSAPI.DLL,不知道谁有,还有,有人说可以通过直接读串口的方式实现,不知道谁会,给教教呀。               谢谢。…

查看全部问答>

谁在windows XP Embeded下有过 开发经历 有什么建议 能否用ace

谁在windows XP Embeded下有过 开发经历 有什么建议 能否用ace…

查看全部问答>

Pocket PC2003操作系统中,界面右上角的叉是什么函数控制的啊?

我要在作的程序实现这样的功能:当要退出程序时,点击右上角的叉叉,弹出一个提示对话框,选择是否要退出.但EVC右上角的叉不像VC一样是CMainFrame中的WM_CLOSE事件响应的,哪位高人前辈给我讲讲我该怎么做才能达到这样的效果呢??…

查看全部问答>

电子工程师最关心的话题

中国有多少工作很多年的电子工程师;中国每年有多少电子新手需要开始全新的技术生涯;他们有什么困惑需要去解开;他们最关心的问题是什么?他们对未来的期待是什么? 中国缺少什么样的电子工程师?中国缺少满嘴胡须的电子工程师;中国缺少坐轮椅 ...…

查看全部问答>

放大电路疑问

共基极放大电路,是放大电流还是电压,输入信号与输出信号相同还是相反?输出阻值和输入阻值大小跟哪些因素有关系,能具体分析一下吗 谢谢…

查看全部问答>

怎么样在一个月内学好电路,看懂图纸,并能设计电路?

大家说说!怎么样在一个月内学好电路,看懂图纸,并能设计电路?…

查看全部问答>