迪文科技串口屏里面如何实现曲线显示

DGUS 开发软件中,点击显示控键_动态曲线,之后用鼠标框选显示范围,并在右侧设置菜单中对曲线颜色、 数据源通道等进行配置即可实现该功能。

如果需要显示曲线线条比较粗,可在同一个位置放置多个上下(Y 轴)平移的曲线变量并引用同一个数据源通 达即可实现。即 CtrlCCtrlV 复制一个设置好的曲线框,点击复制的曲线框按住键盘的上下移动键,上下移动一个 像素即可,操作次数越多曲线越粗,其他设置参数不用更改.

实时曲线应用举例: 

0x00 通道显示数据 0 1000

5A A5 0D 82 03105AA5010000020000 03E8

含义: 0x5A A5 帧头;0x0D 数据字节长度;0x82 写指令;

0x0310:曲线缓冲区数据写启动,系统变量硬件接口曲线固定地址;

0x5AA5:启动一次曲线缓冲区数据写操作,CPU 操作完清零;

0x0100:高字节 0x01 曲线数据块个数即占用了几个通道,低字节未定义写 0x00

0x0002:高字节 0x00 表示 0 通道,低字节 0x02 表示数据字长度个数,此处为 2 个字长度数据,即 0x00000x03E8

0x0000:为要显示的数据 0,0x03E8 为要显示的数据 1000

T5L DGUS 曲线 8 通道的显示,一共 8 个通道,每个通道可以存放 2048 个字,

启用动态曲线显示后,从 0x1000 开始,按照每通道 2Kwords 为每条曲线建立数据缓冲区。

CH0 缓冲区为 0x1000-0x17FFCH1 缓冲区为 0x1800-0x1FFF

CH2 缓冲区为 0x2000-0x27FFCH3 缓冲区为 0x2800-0x2FFF

CH4 缓冲区为 0x3000-0x37FFCH5 缓冲区为 0x3800-0x3FFF

CH6 缓冲区为 0x4000-0x47FFCH7 缓冲区为 0x4800-0x4FFF

不使用的曲线缓冲区可以用作用户变量区。用户也可以直接改写曲线缓冲区,

例如直接改写变量地址 5A A5 05 82 1000 0065...曲线对应通道的值会跟着改变。

如果用户需要用到 8 条通道,其他显示控件的变量地址和描述指针从 0x5000~0xFFFF 区间进行使用

②实时曲线的描述指针使用说明举例

该功能的描述指针存储地址格式如表红色地址所示。下面列举的几个常用访问指令参考示例:

 

③曲线负数显示 

 

 

在使用32单片机和迪文串口屏进行通讯时,需要先确定两者之间的通讯协议,例如波特率、数据位、停止位等。以波特率为9600、数据位为8位、停止位为1位为例,以下是一个简单的程序示例: ```C #include <reg52.h> // 8051单片机头文件 #define FREQ_OSC 11059200UL // 晶振频率 #define BAUDRATE 9600 // 串口波特率 sbit lcd_rst = P2^4; // 定义复位引脚 sbit lcd_rs = P2^5; // 定义数据/命令选择引脚 sbit lcd_en = P2^6; // 定义使能引脚 void init_serial() { SCON = 0x50; // 8位数据,可变波特率 TMOD &= 0x0F; // 清零计数器模式 TMOD |= 0x20; // 设置计数器为自动重载方式 TH1 = 256 - FREQ_OSC / (32 * 12 * BAUDRATE); // 计算波特率 TL1 = TH1; // 初始化计数器 TR1 = 1; // 启动计数器 ES = 1; // 允许串口中断 EA = 1; // 允许总中断 } void serial_interrupt() interrupt 4 { if (RI) { // 接收中断 RI = 0; // 清零接收中断标志 // 处理接收到的数据 } if (TI) { // 发送中断 TI = 0; // 清零发送中断标志 // 发送下一组数据 } } void lcd_command(unsigned char cmd) { SBUF = cmd; // 发送命令 while (!TI); // 等待发送完成 TI = 0; // 清零发送中断标志 } void lcd_data(unsigned char dat) { SBUF = dat; // 发送数据 while (!TI); // 等待发送完成 TI = 0; // 清零发送中断标志 } void lcd_init() { lcd_rst = 0; // 复位 lcd_rs = 0; // 选择命令 lcd_en = 0; // 禁止 lcd_rst = 1; // 取消复位 lcd_command(0x38); // 设置显示模式 lcd_command(0x0c); // 打开显示 lcd_command(0x06); // 设置光标移动方向 lcd_command(0x01); // 清屏幕 } void main() { init_serial(); // 初始化串口 lcd_init(); // 初始化屏幕 while (1) { // 循环读取串口数据并显示到屏幕上 } } ``` 在程序中,`init_serial()`函数用于初始化串口,将波特率、数据位、停止位等设置好,并启动计数器。`serial_interrupt()`函数则是串口中断服务函数,用于处理接收和发送中断。`lcd_command()`和`lcd_data()`函数分别用于发送命令和数据到迪文串口屏,`lcd_init()`函数用于初始化屏幕。在`main()`函数中,可以通过循环读取串口数据并将其显示到屏幕上。 需要注意的是,以上代码仅为示例,具体实现可能需要根据具体的硬件和通讯协议进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值