本帖最后由 jinglixixi 于 2020-12-21 23:41 编辑
在组态画布的组件中,有一类显示组件,其中就包括仪表盘。在通常情况下,我们要在界面中设计这样一个仪表盘并不困难,但难就难在让它转起来。 图1 仪表盘组件 同样在MicroLab中要创建一个带仪表盘的界面也不难,你只需在组态画布中拖入一个仪表盘组件即可,但让它动起来也是个问题。起初我以为它与开关组件有些类似,开关组件是通过串口发送信息;那仪表盘组件自然是要考串口接收信息了!于是就接上了串口为它发送数据,然而指针丝毫未动,显然是仪表盘无动于衷呀! 后来又从快捷菜单中选取了“DownloadMCU SDK”,下载了fengmeitech-canvas-master压缩包,解压得到了一个基于STM32F103的例程,但对于没有STM32F103开发板的人作用还是不大,应对典型的开发板都给出相应的使用示例才好。 其实,更根本的还是向大家给出发送数据的格式更为关键,有了它大家可以遵循这个标准来设计自己的程序就是了。 图2 例程下载 那么我们从例程能分析出什么内容呢? 例程的主程序如下: - int main(void)
- {
- float x = 0, y = 0, temp;
- char str[20];
- /*初始化各外设*/
- initSysTick();
- initNVIC(NVIC_PriorityGroup_2);
- initUART();
- initLED();
- initCanvas(events);
- while (1)
- {
- /*水位进度组件*/
- updateCanvas(WATERLEVER, 0, (char *)&x, sizeof(float));
- Delay_ms(100);
- updateCanvas(WATERLEVER, 1, (char *)&x, sizeof(float));
- Delay_ms(100);
- /*汽车仪表盘组件*/
- updateCanvas(CARDASHBOARD, 0, (char *)&x, sizeof(float));
- Delay_ms(100);
- updateCanvas(CARDASHBOARD, 1, (char *)&x, sizeof(float));
- Delay_ms(100);
- /*电池电量组件*/
- updateCanvas(BATTERY, 0, (char *)&x, sizeof(float));
- Delay_ms(100);
- updateCanvas(BATTERY, 1, (char *)&x, sizeof(float));
- Delay_ms(100);
- /*指南针组件*/
- updateCanvas(COMPASS, 0, (char *)&x, sizeof(float));
- Delay_ms(100);
- /*数码管组件*/
- updateCanvas(LCDNUMBER, 0, (char *)&x, sizeof(float));
- Delay_ms(100);
复制代码
由程序可以看出,它几乎对每一个显示组件都分配了相应的处理程序,但也有一个例外。 这个例外者你猜是谁呢? 原来它是时钟组件和时间日期组件,它们是无需外部数据配合的,自身就能运行起来,这是对程序进行分析的一个意外收获! 这样看来例程是个通用程序,在实际应用过程中是可以按照实际需要量身定制的。 此外,从组件后面的延时函数看,它是为数据刷新而设置的。 至于更具体的函数作用,还是配上一块STM32F103开发板来解析串口发送的信息比较高效。 图3 自运行的组件
|