datasheet

利用μC/GUI实现无纸记录仪界面

2008-03-27来源: www.eccn.com 关键字:GUI  无纸记录仪  窗体  界面  消息机制  全局变量  函数指针  多任务机制  OnT

  (东南大学Ic学院,江苏省南京市210096)

  引 言

  无纸记录仪记录采样得到的数据,并根据用户选择的配置显示出用户需要的时问段的数据。该记录仪实现无笔、无纸记录,日常维护工作小。可同时输入多种信号,互不干涉,实时显示,可靠性好,应用灵活。

  对无纸记录仪界面要求是:显示信息量大,方便用户查找所需要的信息;操作简单,界面友好,使用户不必进行专业培训即可操作。

  lμC/GUI

  1.1 μC/GuI简介

  μc/GUI是美国Micrium公司出品的一款针对嵌入式系统的优秀图形软件。它是为任何使用LcD(液晶显示器)图形显示的应用提供高效的、独立于处理器及LcD控制器而设计的GuI(图形用户接口),适用于单任务或多任务系统环境。其主要特性是:丰富的图形库,多窗口、多任务机制,窗口管理及丰富窗口控件类(按钮、检验框、单/多行编辑框、列表框、进度条、菜单等),多字符集和多字体支持,多种常见图像文件支持,鼠标、触摸屏支持,灵活自由配制等。

  1.2 μC/GuI文件组织

  μC/GUI文件结构见图l。

  

  

  μC/CUl\GuI\Ant认lias:处理显示的边缘模糊效果,即抗锯齿和优化LCD锯齿。

  μC/CuI\GUI\ConvertColor:涉及调色板模式。μC\GuI的调色板模式支持111、222、223、323、332、444、555、565、8666等相关模式。

  μc/GuI\GuI\ConvertMono:描述单色显示的不同模式。

  μC/GUI\GUI\Core:是μC/GUI的核心部分,包括GUI头文件、GUI显示各种文本和数字、设置各种字体、2一D图形库、绘图函数、键盘函数等。

  μC/GUI\GUI\Font:μC/GUl支持的字体。

  μC/GUI\GUI\LCDDriver:很多已经完备的LCD控制器的驱动程序以及API函数。

  tAC/GUI\GUI\MemDev:MemDev的所有函数。txC/GUI函数绘图不使用MemDev时,画图操作直接写到终端上显示,交迭绘图执行时刷新屏幕,多次刷新时就会出现抖动。如果在程序中使用MemDev,则所有的执行操作都在MemDev中执行,当所有的操作都执行完毕之后,最后的结果才会送到屏幕上显示,因而可以避免多次刷新,从而避免抖动。

  μC/GUI\GUI\Touch:触摸屏驱动函数。

  μC/GUI\GUI\Widget:窗口控件函数。

  μC/GUI\GUI\WM:窗口管理函数。

  1.3 μC/GUI与其他图形系统的比较

  a)μC/GUI优势在于体积小,配制性强,运用领域广泛。只要满足RAM 1 00 B,堆栈5 0 0 B,ROM10 kB的小型系统中都可以运行μC/GUI,而这个需求是其他图形系统所不及的。在资源丰富的大型系统中,也只需要RAM 2 kB~6 kB,堆栈1 2 00 B,ROM30kB一60kB就可以满足μC/GUI的各种功能。对比于其他图形系统最少几百kB,动辄上MB的系统而言是非常有优势的。其众多的配制,满足不同需求用户需要,方便灵活小巧,实用性大大增强。

  b)平台的广泛性,移植方便。由于μc/GuI是100%C编写,适应绝大多数软硬平台,相对于众多具有软硬件针对性的图形系统而言,结构划分和模块划分非常清晰,分设专门的LCD驱动模块,移植简单方便。代码量相对较小,易操作,可扩展性强,方便用户定制和自主更新完善,满足个性需求。

  2工程项目分析

  本文主要实现无纸记录仪的界面。项目中利用μC/GUI的消息传递机制来实现各控件之间的联系及功能,使用回调函数进行各界面之间的切换。

  2.1消息机制

  μC/GuI是采用消息驱动的,它专门有对外的一套收集消息的接口。

  一些基本的消息如下:

  wM-CREATE:窗体创建消息,每创建一个窗体完后都会向该窗体发送此消息。

  wM-SHOW:显示窗体消息,此消息在μC/GUI中各控件窗体内均未作处理。要显示窗体一般使用wM-ShowWindow函数。

  WM-PAINT:窗体重画消息,当窗体所在区域全部或部分无效时,系统会发出该消息,将无效区域重画,μC/GUI中是将全部区域重画;当由外部输人操作引起无效区域产生时,系统会在消息处理中发送该消息到窗体消息回调函数中,以重画此窗体。

  WM-KEY:处理按键式操作的输入外设的消息,消息中必须包含按键的按下或弹起状态,此消息在任务消息循环中循环处理,一旦产生就会发送给当前焦点窗体。

  wM-SET_FOCUS:所有外部输入设备消息都是发送给当前焦点窗体的,用户可以通过此消息来设定当前的焦点窗体。

  WM-NOTIFY-PARENT:此消息将子窗体的外设输入消息传送到它的父窗体,因为一般情况下消息都是在父窗体中统一处理,如对话框中的按钮点击事件,一般在用户自定义的窗体消息处理函数中处理,所以必须要子窗体将获取的输入外设的消息传送给父窗体,这样才能在父窗体中进行子窗体的点击事件消息的处理,处理该消息时通过控件ID来区别不同的控件,通过消息中的通知码来区别控件被操作的各种状态。

  wM_DELETE:要删除窗体时发送的消息,主要清除窗体数据结构所占用内存,此消息由WM-DeleteWindow函数发送。

  WIDGET_HandleActive:基础控件共通消息处理,大部分μC/GUI控件中都会在消息回调函数的头部进行这个调用,处理了消息后,就直接退出消息回调函数的调用。这个函数中处理如下消息:

  WM-GET-ID:返回窗体控件标志ID。

  WM-SET-FOCUS:设置当前窗体为焦点窗体,设置完后还必须向该窗体的父窗体发送WM-NOTIFY-CHILD-HAS-FOCUS消息,让其父窗体更新它记载的当前焦点子窗体。WM-GET-HAS-FOCUS:获取当前窗体是否为焦点窗体。

  WM-SET-ENABLE:设置窗体为不可用窗体。

  WM-GET-ACCEPT-FOCUS:获取当前窗体是否可设置为焦点窗体。 WM-GET-INSIDE-RECT:返回窗体内框矩形。

  WM-DefauhProc:窗体默认消息处理函数,μC/GUI中提供一些基础的控件,这些控件有些共通的消息均在此处理,如下:

  WM-GETCLIENTRECT:获取窗体矩形区域,相对于矩形自身。

  WM-GETORG:获取窗体矩形左上角坐标。

  WM-GET-INSIDE-RECT:获取窗体矩形区域,相刘屏幕。

  WM-GET-CLIENT-WINDOW:获取窗体客户区子窗体句柄。

  下面以项目中按下OK按钮事件为例来简单说明消息传递机制(见图2)。

  

  

  按下OK按钮,随后产生按钮WM-TOUCH消息。消息LOOP调用按钮默认的按钮窗口消息处理函数一BUTYON-Callback。一OnTouch默认处理按钮按下事件并发送给父窗体WM-NOTIFY-PARENT消息,这种情况下,消息中还有一个通知码WM-NOTIFICATION-REI_EASED。默认的对话框窗体消息处理函数一FRAMEWIN-Callback收至 WM-NOTIFY-PARENT消息并最终传送该消息到自己定义的对话框消息处理函数。由一FRAMEWIN-Callback传送的消息首先传送到对话框的默认窗体消息回调函数一CbDialog,然后再经它传送到用户自定义的窗体回调函数当中。在自己的对话框消息处理函数中处理wM-NOTIFY-PARENT消息,该消息参数中含有按钮的ID及操作状态,如果通知码是WM-NOTIFICATION-RELELASED,此时证明一次按下按钮事件完成。

  再来分析一下对话框外面的消息接收:GUI-Exec-DialogBox函数有几个参数:第1个是对话框的资源定义数组,这个数组定义了对话框的组成子窗体,其中数组第1个成员必须是FrameWin窗体,数组每1个成员记载了创建子窗体所用函数/子窗体Caption/子窗体标志:ID/子窗体的位置及宽高/创建窗体时样式标志/额外传送的参数。第2个参数是上述的数组的大小。第3个参数是用户指定的对话框窗体消息回调函数指针。第4个参数是对话框的父窗体,默认为0。第5、第6参数指定对话框的左上角屏幕位置。

  GUI-ExecDialogBox主要完成如下工作:

  a)根据传进来的对话框资源定义数组创建对话框及对话框中的子窗体。

  b)根据传进来的窗口消息处理函数,记载到一全局变量保存,当这个全局变量中记载的函数指针为非空时,执行消息LOOP,消息LOOP中会将当前KEY消息发送给当前焦点窗体。

  c)当对话框关闭时,记载对话窗体消息回调函数的全局变量会被清为0,此时消息LOOP就会退出,对话框结束。

  2.2回调函数

  回调函数是由用户定义的,当特定事件发生时,指示图形系统调用特定函数的函数。通常当窗口的内容发生改变时,它们用来自动重绘窗门。例如,窗口内显示一幅位图,当窗口移动时,位图并不会自动移动,此时,就需要调用回调函数对窗口进行重绘,即从观众的角度来看,移动窗口和窗口内容。

  μC/GuI提供给窗口和窗口控件的回调机制的背后,是一个事件驱动标志。在大多数的窗口系统中,不仅从用户程序到图形系统,而且还要能够从用户程序到图形系统,并且能够通过用户程序提供的回调函数,返回到用户程序。这个机制称为回调机制。在μC/GuI中,回调机制用来在窗口管理中控制窗口的重绘操作,这使得窗口管理的有效性成为可能。

使用回调函数建立一个窗口时,必须有一个回调函数。所用的回调函数必须有如下原型:void callback(wM-MESSAGE*pMsg)。其中pMsg为指向消息的指针。回调函数执行的功能依赖于所接收到的消息。以上原型后面一般跟着switch表达式,表达式定义不同的case表达式下不同的信息对应的不同行为,至少要有一个重绘函数:WM-PAINT()。在工程项目中所有功能都是通过上述消

[1] [2]

关键字:GUI  无纸记录仪  窗体  界面  消息机制  全局变量  函数指针  多任务机制  OnT

编辑:ssb 引用地址:http://www.eeworld.com.cn/gykz/2008/0327/article_42.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:利用MAXQ3210构建水位监测/报警系统
下一篇:数字接收机I/Q支路不平衡的时域补偿

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

更直观,更高效,意法半导体STM32CubeMX MCU引入多面板GUI

使用意法半导体最新版的STM32CubeMX配置工具创建STM32 微控制器(MCU)项目,将会更直观,更高效。STM32CubeMX v.5.0的最新设计的多面板GUI界面在不改变屏幕视图的情况下,能够让用户查看更多参数,完成更多任务,从而让优化MCU配置参数变得更加轻松自如,得心应手。STM32CubeMX帮助用户从800多款STM32产品中选择最适合的产品,配置基本硬件功能,自动生成MCU初始化代码,开启嵌入式项目开发之旅。 用户可以利用功能强大的器件配置实用工具配置微控制器参数,包括可解决冲突的引脚选择器和时钟树设置的辅助,以及能够在早期准确评估能耗需求和节能机会的功耗计算器,还有用于配置外围设备和中间件堆栈
发表于 2018-11-23
更直观,更高效,意法半导体STM32CubeMX MCU引入多面板GUI

菜鸟福利!STM32学习之uCGUI移植详解

以下内容大多是网上资源,我只做一些修改和结合,为的是能够方便更多的和我一样的菜鸟们搞懂GUI的移植。第一部分:在UCGUI移植之前在移植之前,首先要了解在网上下的UCGUI 3.98源码的文件结构是。UCGUI 3.98源码中有三个文件夹:1)“tool文件夹”是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的.2)“sample文件夹”下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能.3)“Start文件夹”里面,这是我们最主要的文件夹.里面就包含了uCGUI的源代码,uCGUI的作者
发表于 2018-11-20

STM32如何移植uCGUI,看这里!

第一部分:在UCGUI移植之前在移植之前,首先要了解在网上下的UCGUI 3.98源码的文件结构是。UCGUI 3.98源码中有三个文件夹:1)“tool文件夹”是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的.2)“sample文件夹”下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能.3)“Start文件夹”里面,这是我们最主要的文件夹.里面就包含了uCGUI的源代码,uCGUI的作者把源代码放进vc里面进行编译了(当然,这是用标准C语言写的程序,所以我们可以放在任何c语言平台下编译
发表于 2018-11-20

360Rize(TM)宣布推出360Penguin

这是世界首款家庭用360度VR视频和照片全景相机,适合所有年龄用户 纽约欧林2018年10月26日电-- 360Rize(TM)宣布在Kickstarter上正式推出360Penguin。这是一款出色的轻重量相机,可拍摄6K、4K的360度虚拟现实 (VR) 视频和2400万像素全景照片,适合所有年龄的使用者。通过移动应用程序,用户可以轻松通过蜂窝Wi-Fi或直接通过本地网络与Facebook和YouTube直接共享和直播数据流,而无需捆绑。再加上附加附件,360Penguin可以无限地直播和连接至所有的运动相机配件。 在全国企鹅日 (National Penguin Day),360Rize(TM)在底特律
发表于 2018-10-29
360Rize(TM)宣布推出360Penguin

瑞萨电子推出支持即时评估的血压监测评估套件

2018年4月23日,日本东京讯 – 全球领先的半导体解决方案供应商瑞萨电子株式会社(TSE:6723)今日宣布,推出其最新研发的血压监测评估套件,以扩充其健康看护产品线。该血压监测评估套件涵盖了快速启动血压监测设计所需的软硬件,包括:压力传感器、手臂袖带、泵、电子控制阀、LCD面板及参考板。该参考板包括基于RL78微控制器(MCU)系列的RL78/H1D ASSP(特定应用的标准产品),血压监测应用所需的模拟功能,以及参考软件。图形用户界面(GUI)开发工具也包含在该套件中。借助该评估套件,用户可在购买后立即开始系统评估,从而大大缩短血压监测应用的开发时间。物联网为消费者提供了连接工具,可帮助消费者更有效地进行个人健康管理
发表于 2018-04-23
瑞萨电子推出支持即时评估的血压监测评估套件

浅谈人机交互msOS GUI设计

到的 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
发表于 2018-03-24

小广播

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">