- 2024-11-12
-
回复了主题帖:
长大的你,还相信光吗?
本来他就有光,只是你提醒了他。
还以为是说了假话骗他。
-
回复了主题帖:
为什么查找flash_open()这个函数的定义时,查到的是 #define flash_open()
#define flash_open()
后面语句的flash_open()被替换为空字符串。也就是后面看到的所有flash_open()这句话被预处理后相当于删除了。但不用手工去删除它(保留代码 预处理去掉了这样的代码。但编译后没这部分代码)。
-
回复了主题帖:
【STM32H7S78-DK】 七 特殊功能计算器
秦天qintian0303 发表于 2024-11-12 12:19
直接来个工程师专属计算器
-
回复了主题帖:
【STM32H7S78-DK】 七 特殊功能计算器
秦天qintian0303 发表于 2024-11-11 23:42 直接上面显示区间充足,各种进制数直接显示
有道理,要把各种进制直接显示。这样更好进行对比。
有时间还可以加按位与或非异或, 逻辑与或非异或等。
搞了也可以转到C#,在电脑里面玩。
- 2024-11-11
-
回复了主题帖:
【STM32H7S78-DK】 七 特殊功能计算器
本帖最后由 damiaa 于 2024-11-11 14:04 编辑
Jacktang 发表于 2024-11-11 07:25 Screep1view.cpp中加入虚函数和更新按键函数,这段代码还是比较长
是啊,应该可以合并到一个虚函数里面判断是哪个按键按下的。
没仔细看是哪个api是判断哪个按键按下。
再加上昨天是10号。到了结束日。没时间仔细研究。
所以就这样先将就着。
多几个函数,但也还算比较直观。
也便于后面加功能,比如每个按键按下,弹起的颜色改变,形状改变就可以在自己按键的虚函数里面区实现。
还有数字框里面输入达到8位数字后数字颜色变灰,不让再输入,必须输入左移右移、*、%等。
- 2024-11-10
-
发表了主题帖:
【STM32H7S78-DK】 七 特殊功能计算器
本帖最后由 damiaa 于 2024-11-10 13:03 编辑
【STM32H7S78-DK】 七 特殊功能计算器
【STM32H7S78-DK】 一 开箱贴
【STM32H7S78-DK】 二 touchgxf环境搭建和基本测试
【STM32H7S78-DK】 三 touchgxf和stm32cubeide和led按键测试
【STM32H7S78-DK】 四 下载失败问题及解决、计数器实现及分析
【STM32H7S78-DK】 五 乱序键盘实现及分析
【STM32H7S78-DK】 六 可设置时钟及代码分析 之后
想用这个板子做个特殊功能计算器,能计算左移右移乘除和取余,开始。
一、打开touchgfx designer ,加上提按键0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,<<,>>,%,*,/,clear,=按键。
如下:
二、加上每个按键的虚函数。如下是0按键的,其他类似。
三、增加textArea1,textArea3,textArea3。分别加入wildcard1 并且勾选使用这个缓冲更新数据。
四、给每个设置字体为Large,40pt
并且在Texts的Typographies里面设置wildcard Ranges 0~f
五、Screep1view.hpp中加入头文件:
#ifndef SCREEN1VIEW_HPP
#define SCREEN1VIEW_HPP
#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
class Screen1View : public Screen1ViewBase
{
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
virtual void function_bt0();
virtual void function_bt1();
virtual void function_bt2();
virtual void function_bt3();
virtual void function_bt4();
virtual void function_bt5();
virtual void function_bt6();
virtual void function_bt7();
virtual void function_bt8();
virtual void function_bt9();
virtual void function_bta();
virtual void function_btb();
virtual void function_btc();
virtual void function_btd();
virtual void function_bte();
virtual void function_btf();
virtual void function_bt_eq();
virtual void function_bt_right();
virtual void function_bt_left();
virtual void function_bt_mul();
virtual void function_bt_els();
virtual void function_bt_div();
virtual void function_bt_clr();
void updateGFXElements(uint8_t bt_val);
protected:
uint32_t dat_a;
uint32_t dat_b;
uint32_t dat_c;
uint8_t point;
char oldchar;
};
#endif // SCREEN1VIEW_HPP
六、Screep1view.cpp中加入虚函数和更新按键函数的具体实现如下:
#include <gui/screen1_screen/Screen1View.hpp>
Screen1View::Screen1View()
{
}
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::function_bt0()
{
updateGFXElements(0);
}
void Screen1View::function_bt1()
{
updateGFXElements(1);
}
void Screen1View::function_bt2()
{
updateGFXElements(2);
}
void Screen1View::function_bt3()
{
updateGFXElements(3);
}
void Screen1View::function_bt4()
{
updateGFXElements(4);
}
void Screen1View::function_bt5()
{
updateGFXElements(5);
}
void Screen1View::function_bt6()
{
updateGFXElements(6);
}
void Screen1View::function_bt7()
{
updateGFXElements(7);
}
void Screen1View::function_bt8()
{
updateGFXElements(8);
}
void Screen1View::function_bt9()
{
updateGFXElements(9);
}
void Screen1View::function_bta()
{
updateGFXElements(0x0a);
}
void Screen1View::function_btb()
{
updateGFXElements(0x0b);
}
void Screen1View::function_btc()
{
updateGFXElements(0x0c);
}
void Screen1View::function_btd()
{
updateGFXElements(0x0d);
}
void Screen1View::function_bte()
{
updateGFXElements(0x0e);
}
void Screen1View::function_btf()
{
updateGFXElements(0x0f);
}
void Screen1View::function_bt_eq()
{
updateGFXElements(0x20);
}
void Screen1View::function_bt_right()
{
updateGFXElements(0x21);
}
void Screen1View::function_bt_left()
{
updateGFXElements(0x22);
}
void Screen1View::function_bt_els()
{
updateGFXElements(0x23);
}
void Screen1View::function_bt_mul()
{
updateGFXElements(0x24);
}
void Screen1View::function_bt_div()
{
updateGFXElements(0x25);
}
void Screen1View::function_bt_clr()
{
updateGFXElements(0x26);
}
void Screen1View::updateGFXElements(uint8_t bt_val)
{
if( bt_val <= 0x0f)
{
if(point == 0)
{
dat_a <<=4;
dat_a +=bt_val;
}
else
{
dat_b <<=4;
dat_b +=bt_val;
}
}
else
{ switch(bt_val)
{
case 0x20: //=
if(oldchar == 0x21)
dat_c = dat_a >> dat_b;
else
{
if(oldchar == 0x22)
{
dat_c =dat_a << dat_b;
}
else
{
if(oldchar == 0x23)
{
if(dat_b !=0)
dat_c =dat_a%dat_b;
}
else
{
if(oldchar == 0x24)
dat_c =dat_a*dat_b;
else
{
if(oldchar == 0x25)
{
if(dat_b !=0)
dat_c =dat_a/dat_b;
}
else
{
if(oldchar == 0x26)
{
point =0;oldchar =0x0;dat_a=dat_b=dat_c=0;
}
}
}
}
}
}
point =0;oldchar =0;
break;
case 0x21:point =1;oldchar =0x21;break;//>>
case 0x22:point =1;oldchar =0x22;break;//<<
case 0x23:point =1;oldchar =0x23;break;//%
case 0x24:point =1;oldchar =0x24;break;//*
case 0x25:point =1;oldchar =0x25;break;//div
case 0x26:point =0;oldchar =0x0;dat_a=dat_b=dat_c=0;break;//clear
}
}
touchgfx::Unicode::snprintf(textArea1Buffer,TEXTAREA1_SIZE,"%x", dat_a );
textArea1.invalidate();
touchgfx::Unicode::snprintf(textArea2Buffer,TEXTAREA2_SIZE,"%x", dat_b );
textArea2.invalidate();
touchgfx::Unicode::snprintf(textArea3Buffer,TEXTAREA3_SIZE,"%x", dat_c );
textArea3.invalidate();
}
五、编译运行,效果如下:
[localvideo]56b064fb52debb6ce2b549c29b795ac2[/localvideo]
好,先分析到这里。
谢谢
-
发表了日志:
【STM32H7S78-DK】 七 特殊功能计算器
- 2024-11-07
-
回复了主题帖:
【得捷电子Follow me第1期】+ 提交贴
ID.LODA 发表于 2024-11-7 09:31
不太行,至少得放窗边
知道了。谢谢。
- 2024-11-06
-
回复了主题帖:
【得捷电子Follow me第1期】+ 提交贴
不知道这个室内效果如何。
- 2024-11-05
-
回复了主题帖:
stm32f103c8t6定时器1遇到的诡异问题
芯片是真的,应该是代码的问题吧。可以看看时钟树和时钟相关的寄存器。看看哪里变了,为什么变了。
- 2024-11-03
-
发表了日志:
【STM32H7S78-DK】 六 可设置时钟及代码分析
-
发表了主题帖:
【STM32H7S78-DK】 六 可设置时钟及代码分析
本帖最后由 damiaa 于 2024-11-3 22:17 编辑
【STM32H7S78-DK】 六 可设置时钟及代码分析
【STM32H7S78-DK】 一 开箱贴
【STM32H7S78-DK】 二 touchgxf环境搭建和基本测试
【STM32H7S78-DK】 三 touchgxf和stm32cubeide和led按键测试
【STM32H7S78-DK】 四 下载失败问题及解决、计数器实现及分析
【STM32H7S78-DK】 五 乱序键盘实现及分析 之后
一、打开touchgfx designer ,加上提示文本数字时钟显示文本和模拟显示界面,这里直接使用例子里面的界面导过来。
加上时钟的时分秒设置的加减键,时钟设置的开始键,OK键其实没什么用,这里页懒得删除了。如下图所示:
二、给每个按钮设置Interactions为按下后调用虚函数。每个虚函数名字不一样 如下。
三、打开代码MainView.hpp中加入虚函数和一些时钟变量和时钟设置标记如下:
四、MainView.cpp中加入虚函数和更新按键函数的具体实现如下:
每秒更新实现
时分秒设置按键实现
允许设置和OK键 这里其实OK键没什么用懒得删除了,允许设置在没选中
也可以设置时间,只是时间还是走,设置允许就时钟不走,可以专注设置。
五、主要代码:
MainView.hpp:
#ifndef MAIN_VIEW_HPP
#define MAIN_VIEW_HPP
#include <gui_generated/main_screen/MainViewBase.hpp>
#include <gui/main_screen/MainPresenter.hpp>
class MainView : public MainViewBase
{
public:
MainView();
virtual ~MainView() {}
virtual void setupScreen();
virtual void tearDownScreen();
virtual void handleTickEvent();
virtual void bt1_function();
virtual void bt2_function();
virtual void bt3_function();
virtual void bt4_function();
virtual void bt5_function();
virtual void bt6_function();
virtual void toggle_function();
virtual void OK_function();
protected:
int tickCounter;
int analogHours;
int analogMinutes;
int analogSeconds;
int digitalHours;
int digitalMinutes;
int digitalSeconds;
bool setflag;
};
#endif // MAIN_VIEW_HPP
MainView.cpp:
#include <gui/main_screen/MainView.hpp>
MainView::MainView() :
tickCounter(0)
{
}
void MainView::setupScreen()
{
MainViewBase::setupScreen();
digitalHours = digitalClock.getCurrentHour();
digitalMinutes = digitalClock.getCurrentMinute();
digitalSeconds = digitalClock.getCurrentSecond();
analogHours = analogClock.getCurrentHour();
analogMinutes = analogClock.getCurrentMinute();
analogSeconds = analogClock.getCurrentSecond();
}
void MainView::tearDownScreen()
{
MainViewBase::tearDownScreen();
}
void MainView::handleTickEvent()
{
if(true != setflag )
{
tickCounter++;
if (tickCounter % 60 == 0)
{
if (++digitalSeconds >= 60)
{
digitalSeconds = 0;
if (++digitalMinutes >= 60)
{
digitalMinutes = 0;
if (++digitalHours >= 24)
{
digitalHours = 0;
}
}
}
if (++analogSeconds >= 60)
{
analogSeconds = 0;
if (++analogMinutes >= 60)
{
analogMinutes = 0;
if (++analogHours >= 24)
{
analogHours = 0;
}
}
}
// Update the clocks
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
}
}
void MainView::bt1_function()
{
if(digitalHours >=23)
digitalHours =0;
else
digitalHours++;
analogHours =digitalHours;
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
void MainView::bt2_function()
{
if(digitalHours ==0)
digitalHours =23;
else
digitalHours--;
analogHours =digitalHours;
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
void MainView::bt3_function()
{
if(digitalMinutes >=59)
digitalMinutes =0;
else
digitalMinutes++;
analogMinutes =digitalMinutes;
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
void MainView::bt4_function()
{
if(digitalMinutes == 0)
digitalMinutes=59;
else
digitalMinutes--;
analogMinutes =digitalMinutes;
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
void MainView::bt5_function()
{
if(digitalSeconds >=59)
digitalSeconds=0;
else
digitalSeconds++;
analogSeconds =digitalSeconds;
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
void MainView::bt6_function()
{
if(0 ==digitalSeconds)
digitalSeconds=59;
else
digitalSeconds--;
analogSeconds =digitalSeconds;
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
}
void MainView::toggle_function()
{
// Override and implement this function in Main
//setflag
setflag =toggleButton1.getState();
}
void MainView::OK_function()
{
digitalClock.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
toggleButton1.forceState(false);
digitalClock.invalidate();
toggleButton1.invalidate();
}
六、编译运行,效果如下:
[localvideo]a0fa491ad928c0f1bc4f3705f108be83[/localvideo]
好,先分析到这里。
谢谢
-
发表了日志:
【STM32H7S78-DK】 五 乱序键盘实现及分析
-
发表了主题帖:
【STM32H7S78-DK】 五 乱序键盘实现及分析
本帖最后由 damiaa 于 2024-11-3 15:33 编辑
【STM32H7S78-DK】 五 乱序键盘实现及分析
【STM32H7S78-DK】 一 开箱贴
【STM32H7S78-DK】 二 touchgxf环境搭建和基本测试
【STM32H7S78-DK】 三 touchgxf和stm32cubeide和led按键测试
【STM32H7S78-DK】 四 下载失败问题及解决、计数器实现及分析 之后
一、打开touchgfx designer ,加上提示文本和10个标号按键,一个toggle button按键,使用这个togglebutton按键 按下时打乱10个标号按键的位置顺序。
二、toggleButton1按钮设置Interactions为按下后调用虚函数change_key_name_val
三、打开代码Screen1View.hpp中加入虚函数和更新按键函数如下:
五、Screen1View.cpp中加入虚函数和更新按键函数的具体实现,并且加入随机数函数更新按键的位置信息如下:
随机数函数
六、虚函数实现 调用更新按键函数
七、更新按键函数
八、编译运行,效果如下:
[localvideo]7ebe38c248fe5bdc92f2328d1ac9f8e9[/localvideo]
好,先分析到这里。
谢谢
-
发表了日志:
【STM32H7S78-DK】 四 下载失败问题及解决、计数器实现及分析
-
发表了主题帖:
【STM32H7S78-DK】 四 下载失败问题及解决、计数器实现及分析
本帖最后由 damiaa 于 2024-11-4 08:30 编辑
【STM32H7S78-DK】 四 下载失败问题及解决、计数器实现及分析
【STM32H7S78-DK】 一 开箱贴
【STM32H7S78-DK】 二 touchgxf环境搭建和基本测试
【STM32H7S78-DK】 三 touchgxf和stm32cubeide和led按键测试 之后
一、 在测试和调试一个计数器的程序的时候发现下载不行,查看是连接不上ST-link V3了 如下:
但上次下的还是在显示屏上显示。
使用STM32CubeProgrammer连接也是连接不上:
发现这些问题后想想直接在复位时连接stlink接口IO,看行不行,如是还是用STM32CubeProgrammer连接 同时按板子复位键。连上 了还能读和擦除。
用同样的方法(在touchgfx下载程序时按复位),touchgfx designer 下载页可以了,
二、下面看看这个计数器的例子
从箭头哪里两个点 的地方进去可以编辑源代码
我们一般关注下面几个文件
MainViewBase.hpp和MainViewBase.cpp是touchgfx designer产生的文件,里面包含了基本的类和实现。
MainViewBase.hpp:
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef MAINVIEWBASE_HPP
#define MAINVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/main_screen/MainPresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/Image.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <touchgfx/widgets/Button.hpp>
class MainViewBase : public touchgfx::View<MainPresenter>
{
public:
MainViewBase();
virtual ~MainViewBase();
virtual void setupScreen();
/*
* Virtual Action Handlers
*/
virtual void increaseValue()
{
// Override and implement this function in Main
}
virtual void decreaseValue()
{
// Override and implement this function in Main
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::Image backgroundImage;
touchgfx::Image counterBackgroundImage;
touchgfx::TextAreaWithOneWildcard countTxt;
touchgfx::Button buttonUp;
touchgfx::Button buttonDown;
/*
* Wildcard Buffers
*/
static const uint16_t COUNTTXT_SIZE = 5;
touchgfx::Unicode::UnicodeChar countTxtBuffer[COUNTTXT_SIZE];
private:
/*
* Callback Declarations
*/
touchgfx::Callback<MainViewBase, const touchgfx::AbstractButton&> buttonCallback;
/*
* Callback Handler Declarations
*/
void buttonCallbackHandler(const touchgfx::AbstractButton& src);
};
#endif // MAINVIEWBASE_HPP
MainViewBase.cpp
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/main_screen/MainViewBase.hpp>
#include <touchgfx/Color.hpp>
#include <images/BitmapDatabase.hpp>
#include <texts/TextKeysAndLanguages.hpp>
MainViewBase::MainViewBase() :
buttonCallback(this, &MainViewBase::buttonCallbackHandler)
{
__background.setPosition(0, 0, 800, 480);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
backgroundImage.setXY(150, 120);
backgroundImage.setBitmap(touchgfx::Bitmap(BITMAP_BG_ID));
add(backgroundImage);
counterBackgroundImage.setXY(400, 152);
counterBackgroundImage.setBitmap(touchgfx::Bitmap(BITMAP_COUNTER_BOX_ID));
add(counterBackgroundImage);
countTxt.setPosition(316, 189, 302, 104);
countTxt.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
countTxt.setLinespacing(4);
Unicode::snprintf(countTxtBuffer, COUNTTXT_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_XERM).getText());
countTxt.setWildcard(countTxtBuffer);
countTxt.setTypedText(touchgfx::TypedText(T_TEXTID1));
add(countTxt);
buttonUp.setXY(169, 173);
buttonUp.setBitmaps(touchgfx::Bitmap(BITMAP_UP_BTN_ID), touchgfx::Bitmap(BITMAP_UP_BTN_PRESSED_ID));
buttonUp.setAction(buttonCallback);
add(buttonUp);
buttonDown.setXY(169, 265);
buttonDown.setBitmaps(touchgfx::Bitmap(BITMAP_DOWN_BTN_ID), touchgfx::Bitmap(BITMAP_DOWN_BTN_PRESSED_ID));
buttonDown.setAction(buttonCallback);
add(buttonDown);
}
MainViewBase::~MainViewBase()
{
}
void MainViewBase::setupScreen()
{
}
void MainViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
if (&src == &buttonUp)
{
//IncreaseValue
//When buttonUp clicked call virtual function
//Call increaseValue
increaseValue();
}
if (&src == &buttonDown)
{
//DecreaseValue
//When buttonDown clicked call virtual function
//Call decreaseValue
decreaseValue();
}
}
MainView.hpp和MainView.cpp是touchgfx designer产生的文件,里面包含了用户可以修改的类和实现,是继承了上面两个文件里面实现的基类。
MainView.hpp:
#ifndef MAIN_VIEW_HPP
#define MAIN_VIEW_HPP
#include <gui_generated/main_screen/MainViewBase.hpp>
#include <gui/main_screen/MainPresenter.hpp>
class MainView : public MainViewBase
{
public:
MainView();
~MainView() {};
virtual void setupScreen();
virtual void increaseValue();
virtual void decreaseValue();
void updateGFXElements();
protected:
private:
uint32_t count;
};
#endif // MAIN_VIEW_HPP
MainView.cpp:
#include <gui/main_screen/MainView.hpp>
#include "BitmapDatabase.hpp"
const uint32_t UPPER_LIMIT = 9999;
const uint32_t LOWER_LIMIT = 0;
MainView::MainView() : count(0) {}
void MainView::setupScreen()
{
updateGFXElements();
}
void MainView::increaseValue()
{
count = (count++ > UPPER_LIMIT) ? UPPER_LIMIT : count;
updateGFXElements();
}
void MainView::decreaseValue()
{
count = (count-- <= LOWER_LIMIT) ? LOWER_LIMIT : count;
updateGFXElements();
}
void MainView::updateGFXElements()
{
//Counter text area GFX uptade.
Unicode::snprintf(countTxtBuffer, 5, "%d", count);
//Button GFX update and touchable.
if (count < UPPER_LIMIT)
{
buttonUp.setBitmaps(Bitmap(BITMAP_UP_BTN_ID), Bitmap(BITMAP_UP_BTN_PRESSED_ID));
buttonUp.setTouchable(true);
}
else
{
buttonUp.setBitmaps(Bitmap(BITMAP_UP_BTN_DISABLED_ID), Bitmap(BITMAP_UP_BTN_DISABLED_ID));
buttonUp.setTouchable(false);
}
if (count > LOWER_LIMIT)
{
buttonDown.setBitmaps(Bitmap(BITMAP_DOWN_BTN_ID), Bitmap(BITMAP_DOWN_BTN_PRESSED_ID));
buttonDown.setTouchable(true);
}
else
{
buttonDown.setBitmaps(Bitmap(BITMAP_DOWN_BTN_DISABLED_ID), Bitmap(BITMAP_DOWN_BTN_DISABLED_ID));
buttonDown.setTouchable(false);
}
// Invalidate all GFX area, which will result in it being redrawn in next tick.
countTxt.invalidate();
buttonUp.invalidate();
buttonDown.invalidate();
}
为了把显示放的位置放到中间 并且显示数字可以9999以下,修改了几个地方
1,MainviewBase.hpp的基类中修改了这里,目的是把缓冲区变大,能存5个字节 :(这个文件一般用户代码不怎么修改一般由touchgfx designer修改,但我这里是借用的例子,就直接修改了)
2,修改下面MainviewBase.cpp
3,修改Mainview.hpp的uint8_t count uint32_t count
4,修改Mainview.cpp的UPPER_LIMIT为9999
5,代码浅释:
Mainview.hpp中定义了继承于MainViewBase 的MainView 类
主要定义了虚函数 设置屏幕、值加减、和图片更新函数和变量count
class MainView : public MainViewBase
{
public:
MainView();
~MainView() {};
virtual void setupScreen();
virtual void increaseValue();
virtual void decreaseValue();
void updateGFXElements();
protected:
private:
uint32_t count;
};
Mainview.cpp中定义了这些函数的实现
increaseValue()和decreaseValue()分别实现加数和减数,并且调用updateGFXElements();进行界面数据和按键背景更新。
界面设置中对显示countTxt的页面进行了下面的设置
所以在updateGFXElements()函数中使用
Unicode::snprintf(countTxtBuffer, 5, "%d", count);
能对countTxt的内容进行更新
updateGFXElements()函数页对数值的大小进行了限制,而且重新设置了按键的背景图片。
最后让countTxt和buttonUp和buttonDown失效,这样就能实现重画而更新界面。
count实现count变量的初始化。
好,先分析到这里。
谢谢
- 2024-11-01
-
回复了主题帖:
关于if else 代码中 else 后代码执行条件的问题
本帖最后由 damiaa 于 2024-11-1 09:32 编辑
楼上的 !( buffer==0x01 )并且!( total <0 ) ==》 (buffer!=0x01) 并且 ( total>=0)
就进入代码2.
- 2024-10-25
-
回复了主题帖:
这是哪款逻辑分析仪上位机采集到的波形?
QWE4562009 发表于 2024-10-24 11:06
啥意思 没看懂 分享一下购买的链接?
网上买个rp2040的板子,自己下个程序。可以搜索 rp2040做逻辑分析仪。
- 2024-10-24
-
回复了主题帖:
今天周三啦!!!
没法讨论,因为今天周四了。
- 2024-10-23
-
回复了主题帖:
这是哪款逻辑分析仪上位机采集到的波形?
pulse view 软件可以配个rp2040做的逻辑分析仪玩。