原创 msOS人机交互设计之GUI篇

2013-9-2 10:47 2572 25 37 分类: 消费电子

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

 

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


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

 

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


msOS 灵活运用结构体,仿C# 的风格,轻便的设计出在硬件 JN12864J LCD上可交互的显示GUI,
设计思想是按添加组件方法,灵活的处理多界面,不同数据类型显示及参数调整。采用面向对象及链表方式设计方式如

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

 

具体见如下框图。

20130901130151298.jpg

表方式:
详细见如下函数
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 行地址。20130901130318810.jpg

variable = 0x00F80000 | ((instruct & 0xF0) << 8) |((instruct & 0x0F) << 4);
 variable = 0x00FA0000 | ((data & 0xF0) << 8) |((data & 0x0F) << 4);
// 来源于SPI 时序,上述就是组合出一次通信需要传输24BIT。20130901130538591.jpg

文章评论12条评论)

登录后参与讨论

用户1655282 2013-11-14 19:54

这也太业余了吧,发这样的科普贴能不能先查查资料。。。

用户1277994 2013-11-14 10:32

Good! Thanks.

linxin6868_103681996 2013-9-13 15:55

学习

用户1039176 2013-9-13 07:51

不错,支持!

用户1711683 2013-9-5 09:16

第一篇,我就不改了,记录第一次写博客的水平,其他的博客文章,我会及时更正,添加新的发现。

用户3809340 2013-9-4 11:20

手笔大起来了!

用户1516292 2013-9-3 09:49

不错

用户1610240 2013-9-3 09:40

很强大!

用户1711683 2013-9-3 08:38

恩,谢谢博主鼓励,玩这里的博客还是有点不习惯,也许使用时间可以让我习惯。

用户1602177 2013-9-2 10:45

热烈欢迎博主分享~~ 一定要推荐一下~~
相关推荐阅读
用户1711683 2014-05-08 06:32
亚马逊智能手机 解读
  亚马逊智能手机 查询各大网站,还真看到介绍出入不大的介绍,难道是为了前期推广之用还是?请各位高手解答为什么没有上市,外面的介绍这么详细且正确呢? 详细如下:     亚马逊智能手机 编辑 ...
用户1711683 2014-05-05 06:56
云存储及反向控制(51buddy)
                 软硬开发工作总算在青年节全部完成,恭喜。恭喜。      成本非常低廉,硬件和软件支持(云服务器服务2年)大约在300元。    ...
用户1711683 2013-12-07 00:47
PSU 设计学习与探讨
       最近学习,老是感觉身边没有一个程控电源,在网络里找到开源的,查询淘宝没有看到有程控电源学习扳子卖,所以想做自己DIY,看到元器件不知道如何采购,本着学习原则,想先购一批回来,大概投入...
用户1711683 2013-12-03 17:59
上下拉电阻大小计算
            上下拉电阻大小计算,一直很困惑,这些大小计算来路,还恳请各位帮忙引导~~决定因子有那些.   ...
用户1711683 2013-12-03 17:59
LDO 电路中LC 计算来由
LC 电路相关属性计算来由,这些困惑小弟很久,还请各位帮忙引导,L 的阻抗大小跟什么有关系,及感抗,C的大小确定. ...
用户1711683 2013-12-02 11:35
0欧姆电阻学习
         如下为收集到的资料,可是没有实力,还是不能完全理解,还肯请各位帮忙提供具体例子,Buddy 兄在此谢各位了.   1,在电路中没有任何功能,只是在PCB上为了调试方便或兼...
我要评论
12
25
关闭 站长推荐上一条 /2 下一条