迪文科技论坛

 找回密码
 立即注册
搜索
查看: 7633|回复: 8

【转载】【16.教学视频】T5L C51 绘制动态曲线

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11967
发表于 2020-5-25 11:09:50 | 显示全部楼层 |阅读模式
本节课介绍了T5L C51 绘制动态曲线 。
本视频教学由迪文开发者论坛用户  ID 熊家余 分享提供。
教学视频连接:https://www.yuanzige.com/course/detail/80041?section_id=81217
原视频链接:https://www.bilibili.com/video/BV1NQ4y1P7MW


本节课课程内容如下:

1.介绍
本章节将利用DGUS Tool软件中的”动态曲线控件”来绘制曲线效果,T5L迪文屏中总共支持8个通道的曲线,而曲线数据是需要缓冲区的,如果 8 通道曲线同时使用,0x1000-0x4FFF 将作为曲线缓冲区地址,此时该部分变量地址不能被其他控键使用,其他控键地址使用范围为0x5000-0xFFFF,当某曲线通道不被使用时,那么其所对应的缓冲区地址可以做其他用途。

2.例程设计2.1功能简介我们在0启动界面上放置一个动态曲线控件,然后当屏幕上电时,我们C51代码往0曲线通道上写入一个sin正弦曲线数据.
2.2 GUI界面设计
主要是用到一个”动态曲线控件”。

2.3 C51代码设计
我们可以直接利用在第1章节中已经创建好的C51项目工程模板,然后在此基础上进行修改.
main.c文件的代码如下:
#include "sys.h"
#include <math.h>

//绘制正弦曲线
void sin_chart_draw()
{
        #define X_POINTS_NUM                688         //需要688个数据点才能正好把X轴铺满
        #define CHART_ID                                0                 //使用第一个曲线通道
        float val;
        u16 point;

        for(point=0;point<X_POINTS_NUM;point++)
        {
                val = point*(2*3.14159f/X_POINTS_NUM);//得到sin函数的x坐标
                val = sin(val)*60+80;//sin的值先扩大60,然后向上平移80,这样sin曲线看起来美观一点
                sys_write_chart(CHART_ID,(u16)(val+0.5f));//写点
                sys_delay_ms(10);//延时一下,可以看到曲线动态绘制的效果
        }
}

void main(void)
{   
        sys_init();//系统初始化
        sin_chart_draw();

        while(1)
        {   

        }
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

7

主题

18

回帖

1141

积分

金牌会员

Rank: 6Rank: 6

积分
1141
发表于 2020-5-26 17:48:08 | 显示全部楼层
请问工程的压缩包有吗
回复

使用道具 举报

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11967
 楼主| 发表于 2020-5-26 18:18:54 | 显示全部楼层
Ethan 发表于 2020-5-26 17:48
请问工程的压缩包有吗

您好 ,已上传。
回复

使用道具 举报

0

主题

3

回帖

85

积分

注册会员

Rank: 2

积分
85
QQ
发表于 2021-3-4 23:11:04 | 显示全部楼层
     我看过这个视频的, “#define X_POINTS_NUM  688    /需要688个数据点才能正好把X轴铺满”,这个不合理,显示控件的宽度是430,应该定义为“#define X_POINTS_NUM  430”,这时候,显示不正常,这是延时时间不正确引起的,你可以将后面的“sys_delay_ms(10);”改成“sys_delay_ms(16);”,即可实现原有的效果,只要延时大于16ms,显示效果不变。
    如果是688,这个数是凑出来的,没有指导意义,会让编程工程师一头雾水,后面的延时10ms的时间改动,显示就会缩进或拉深,作为编程人员,一定不是模糊的操作,一定是唯一的值。
    我认为:10ms不够一个DGUS的写字节操作时间,写688次,结果是成功了430次,有一些被过滤了,所以应该设置成430,让延时延长到DGUS的写字节操作时间不失败。我测试下来,只要16ms以上就可以了。
回复

使用道具 举报

0

主题

1

回帖

137

积分

注册会员

Rank: 2

积分
137
发表于 2021-8-10 11:36:18 | 显示全部楼层
chenpeiguo 发表于 2021-3-4 23:11
我看过这个视频的, “#define X_POINTS_NUM  688    /需要688个数据点才能正好把X轴铺满”,这个不合 ...

非常有帮助,谢谢!您严谨的态度值得大家学习
回复

使用道具 举报

5

主题

19

回帖

268

积分

中级会员

Rank: 3Rank: 3

积分
268
发表于 2023-3-10 19:08:19 | 显示全部楼层
输入一个点怎么要17ms?开发指南里也不说明一下?
回复

使用道具 举报

4

主题

19

回帖

209

积分

中级会员

Rank: 3Rank: 3

积分
209
发表于 2023-5-5 14:45:23 | 显示全部楼层
你好,关于曲线的缩放和收缩的c51代码为啥我这个没变化呢,大哥们帮帮看看

void Dwinc_CurveyScaling(u16 sp,u16 val)
{
        #define Y_SCALING sp+8
        u16 temp;
        sys_read_vp(Y_SCALING,(u8*)&temp,1);
        val +=temp;
        sys_write_vp(Y_SCALING,(u8*)&val,1);       
}


/**
* @brief  改写字长度纵轴放大倍数,实现曲线x轴方向缩放
* @param  val: 缩放的数据
* @param  sp:迪文屏地址
* @retval
*/
void Dwinc_CurvexScaling(u16 sp,u16 val)
{
        #define X_SCALING sp+9
        u16 temp;
        sys_read_vp(X_SCALING,(u8*)&temp,1);
        val +=temp;
        sys_write_vp(X_SCALING,(u8*)&val,1);       
}
回复

使用道具 举报

0

主题

1276

回帖

5290

积分

论坛元老

Rank: 8Rank: 8

积分
5290
发表于 2023-5-5 15:06:59 | 显示全部楼层
这个需要测试, 可否提供下工程和代码文件 ?
回复

使用道具 举报

7

主题

8

回帖

826

积分

高级会员

Rank: 4

积分
826
发表于 2024-1-15 09:39:38 | 显示全部楼层
baiyutang 发表于 2023-3-10 19:08
输入一个点怎么要17ms?开发指南里也不说明一下?

开发指南中说的是DGUS的刷新周期是20ms
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 03:11 , Processed in 0.121609 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表