uCGUI软件模拟示波器及界面初步设计笔记

本文记录了使用uCGUI软件模拟示波器的初步设计过程,包括解决对话框阻塞问题,采用非阻塞创建方法,以及回调函数的应用。在硬件未完成的情况下,通过模拟sin(x)函数数据来展示波形。目前实现了Y轴增益调整和波形平移,但水平平移功能尚未完善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天一直在学习uCGUI,一遍练习例子程序一边也在尝试着做示波器器的界面,但是总是遇到各种问题,用的是3.32a的源码,但是我的那个中文手册,很多函数查手册也查不到,后面想在网上搜一个比较全的中文手册,搜到的基本都是一个版本,好像是国内的UCGUI专业论坛的人前几年翻译的1.0版的uCGUI手册,好像是05年的版本,现在uCGUI估计最新的都到4.0以上的版本了。于是在网上搜了一个4.0版的英文的手册,还不错,写的很简洁、易懂。这才把最近几天的问题解决了。

        首先是对话框的问题,如果是用阻塞型的创建方法,就会阻止后面的函数运行,开始没有明白这一点,我以为反正没有操作系统 ,因此组不组塞都一样,因为没有进程之类的东西,因此,想了个弱智的办法,用while(1)大循环来解决,结果这样就会弹出内存不够,是啊,不停地产生对话框,确实费内存,真傻。后面我又仔细看了看手册,发现有个非阻塞的,这样的确可以了。

 然后就是回调函数的问题了,这个还比较方便,有源码可以参考,修改成自己的就行。要注意的首先是理解对话框的运行过程,用

GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

创建出对话框后,由于是非阻塞的,因此窗口的消息循环一直在进行,检测按键的状态变化等。

由于我队友的硬件部分还没有完成,因此,我想先用软件模拟一下示波器,就先试着模拟一下是sin(x)函数。就是申请一段内存,然后将sin函数的数据存入,然后读出来,在绘图区绘出波形。这个问题还算好解决,麻烦的就是示波器的控件,比如Y轴的增益,Y轴方向的平移等。目前先弄出来了简单的功能。

水平方向的平移还没有实现,只实现了Y轴增益变化和Y轴的波形平移。


下面分别是对话框部分的和绘图部分的源码:

/***************************************************************
*        这个文件里的函数完成了波形显示下方的按键面板          *
*                                                              *
***************************************************************/
#include <stddef.h>
#include "GUI.H"
#include "DIALOG.h"


//GUI_ID_XX是一个int型的变量
#define  GUI_ID_LISTBOX  10


//这个变量用来调节波形在Y轴方向振幅
float YGain;


//这个用来调节Y轴方向的平移
float YMove;

//extern int YGain;

/*********************************************************************
*
*       static data
*
**********************************************************************
*/

static U8 _aColorSep[3] = {1, 1, 1};  /* Red, green and blue components */



/*********************************************************************
*
*              Initializers for listbox
*/
static const GUI_ConstString _apListBox[] = {
  "English", "Deutsch", "France", "Japanese", "Italia", NULL
};



/*********************************************************************
*
*       Dialog resource
*
* This table conatins the info required to create the dialog.
* It has been created manually, but could also be created by a GUI-builder.
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Adjust color", 0,         10,  310, 780, 470 , FRAMEWIN_CF_MOVEABLE},
  { TEXT_CreateIndirect,     "YGain:" ,  0,               5,  20,  35,  20, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,     "XGain:", 0,                5,  50,  35,  20, TEXT_CF_LEFT },
  
  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER0,  40,  20, 100,  20 },
  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER1,  40,  50, 100,  20 },
  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER2,  40,  80, 100,  20 },
  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT0,   145,  20,  30,  20, 0, 3 },
  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT1,   145,  50,  30,  20, 0, 3 },
  { EDIT_CreateI
version : 3.1.0.0 1、修改了选择不同窗体属性窗口不更新的BUG; 2、修改了只能打开一个ucGUIBuilder的功能,现在可以同时启动多个; 3、修复了拖放非ucfrm引起软件错误的Bug; 4、添加了控件ID自动增加功能; 5、添加了控件ID检查功能,控件ID有重复时会有警告; 6、添加了用户自定义字体功能; 7、支持中英文切换(但功能不够完善); 8、支持自动检查更新; 9、修改了不能保存用户自定义ID的BUG; version : 1.0.0.0 功能很不完善; 还有好多BUG; 目前只能生成资源表; 暂时不能生成其他代码; version : 2.0.0.5 优化了控件库; 修复了一些Bug; 可以生成完整的C文件(包括 资源表,初始化代码等); 修改了部分功能; version : 2.1.0.5 优化了控件库; 修复了一些Bug; 代码生成窗口中添加了C语言语法高亮显示功能; C文件模板做了部分修改; 支持设计的窗体保存为文件,并可以打开; 对所有控件属性添加了Description(在属性窗口最下面显示); 窗体布局可以保存,可以自定义为自己喜欢的窗体布局; 修改了部分功能; version : 3.0.0.0 重写了部分内核,运行更稳定; 支持窗体设计器的复制、粘贴、剪切、删除、撤销、等基本操作; 支持多控件,对齐、公共属性修改等基本操作; 支持将.ucfrm文件与ucGUIBuilder关联功能; 支持控件自定义ID; 添加了窗体预览功能; 添加了对控件事件的支持; 添加了在线检查更新功能; 等……
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值