各位程序达人帮帮忙,用C++builder编程设计低通滤波器,显示波形的程序问题~~~~

各位程序达人帮帮忙,用C++builder编程设计低通滤波器,显示波形的程序问题~~~~,第1张

我以前做过类似的东西,但与你的稍有区别,不过也是要显示类似波形的曲线。我大体说说思路吧。

1.首先你要选好一个能够显示波形的控件,我当时使用的是delphi,所以用了里面一个chart控件,你可以参考下面的网站http://www.steema.com。在c++builder里面也是有控件的,你找找看,会有绘制图表的控件的。学会使用这个图表控件。

2.数据的载入。程序开始运行时,通过file读取函数从本地读取txt文件,读出后保存到内存中。

3.绘图。将读入内存中的数据传递给图表控件(可能需要对格式进行一些调整),这样就能显示出波形了。

4.滤波。巴特沃兹滤波算法你可以从通讯教材或者网上搜索到现成的代码,基本上不需要你自己编写。点击滤波按钮后,将你之前读入内存的数据进行滤波处理,然后将处理后的数据传递给图表控件,就能显示出滤波后的波形了。

各种类型的数据传输和存储就涉及到大小端的问题,首先要简单说下芯片的大小端问题,我们这里主要讨论Cortex-M内核。

M内核支持大端或者小端,实际应用中大部分内核都是小端。以STM32为例,全部都是小端,而且是芯片设计之初就固化进去的,不可修改。市面上其他厂家基本也都固化的小端格式。

F1编程手册

F3和F4编程手册

F7和H7编程手册

各种数据类型编程EEPROM,SPI Flash等存储器的简易方法,一般这些存储器都是字节编程,写入浮点等数据类型时不太方便。这里分享一个方法,定义一个结构体,将各种数据类型封装进去:

写入的时候采用下面方式:

读取时可以采用下面方式:

各种数据类型的SPI,UART,I2C等传输问题。这里我们以串口通信为例,比如主机要发送如下格式数据给从机:

我们可以做一个如下结构体格式:

typedef struct

{

uint8_t ucStart

uint16_t usCO2

uint16_t usPM25

uint16_t usHumidity

floatTemprature

uint32_t ulParam

uint8_t ucEnd1

uint8_t ucEnd2

}

UART_T

UART_T g_tUartParam

复制

主机发送的时候我们就可以采用如下方法:

comSendBuf(COM1, (uint8_t *)&g_tUartParam, sizeof(UART_T))

复制

从机工程也定义一个同样的结构体变量,比如我们把接收到一帧数据存到缓冲uint8_t buf[50]里面了。

我们就可以定义一个结构体指针变量:

UART_T *pUartParam

pUartParam = (UART_T *)buf

复制

那么我们就可以pUartParam->usCO2, pUartParam->Temprature等方式来访问,非常方便。

代码实现

结构体数据如下:

typedef struct

{

uint8_t ucStart

uint16_t usCO2

uint16_t usPM25

uint16_t usHumidity

floatTemprature

uint32_t ulParam

uint8_t ucEnd1

uint8_t ucEnd2

}

USART_T

USART_T g_tUartParam/* 串口1发送数据使用 */

USART_T *pUartParam /* 串口2接数据使用 */

uint8_t buf[128]/* 接收记录缓冲 */

复制

数据收发处理:

/*

*********************************************************************************************************

*函 数 名: main

*功能说明: c程序入口

*形参: 无

*返 回 值: 错误代码(无需处理)

*********************************************************************************************************

*/

int main(void)

{

uint8_t ucKeyCode

uint8_t read

uint8_t ucStatus = 0 /* 状态机标志 */

uint8_t ucCount=0

float ftest = 0.11f

pUartParam = (USART_T *)buf

bsp_Init() /* 硬件初始化 */

PrintfLogo() /* 打印例程名称和版本等信息 */

PrintfHelp() /* 打印 *** 作提示 */

bsp_StartAutoTimer(0, 100)/* 启动1个100ms的自动重装的定时器 */

memset(buf, 0, 128)

/* 进入主程序循环体 */

while (1)

{

bsp_Idle() /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */

/* 判断定时器超时时间 */

if (bsp_CheckTimer(0))

{

/* 每隔100ms 进来一次 */

bsp_LedToggle(2)

}

/* 按键滤波和检测由后台systick中断服务程序实现,我们只需要调用bsp_GetKey读取键值即可。 */

ucKeyCode = bsp_GetKey() /* 读取键值, 无键按下时返回 KEY_NONE = 0 */

if (ucKeyCode != KEY_NONE)

{

switch (ucKeyCode)

{

case KEY_DOWN_K1:/* K1键按下,串口1发送数据给串口2 */

g_tUartParam.ucStart = '$'

g_tUartParam.usCO2 = 1

g_tUartParam.usPM25 = 2

g_tUartParam.usHumidity = 3

g_tUartParam.Temprature = ftest++

g_tUartParam.ulParam = 5

g_tUartParam.ucEnd1 = '\r'

g_tUartParam.ucEnd2 = '\n'

comSendBuf(COM1, (uint8_t *)&g_tUartParam, sizeof(UART_T))

printf("发送数据完成\r\n")

break

default:

/* 其它的键值不处理 */

break

}

}

/* 串口2接收数据解析处理 */

if (comGetChar(COM2, &read))

{

switch (ucStatus)

{

/* 状态0保证接收到0x01 */

case 0:

if(read == '$')

{

ucStatus = 1

buf[ucCount++] = read

}

break

case 1:

buf[ucCount] = read

/* 接收够15个数据 */

if((buf[ucCount-1] == '\r')&&(buf[ucCount] == '\n'))

{

/* 打印接收到的数据值 */

printf("接收到的数据:\r\n")

printf("pUartParam->usCO2 = %d\r\n", pUartParam->usCO2)

printf("pUartParam->usPM25 = %d\r\n", pUartParam->usPM25)

printf("pUartParam->usHumidity = %d\r\n", pUartParam->usHumidity)

printf("pUartParam->Temprature = %f\r\n", pUartParam->Temprature)

printf("pUartParam->ulParam = %d\r\n", pUartParam->ulParam)

printf("\r\n")

memset(buf, 0, 128)

ucStatus = 0

ucCount=0

}

else

{

ucCount++

}

break

default:

break

}

}

}

}

复制

测试效果

单片机

stm32

嵌入式硬件

手机处理器对比

精选推荐

广告

ST发布采用SO8窄封装的SPI串口EEPROM存储器芯片

0下载·0评论

2020年12月4日

串口通信和EEPROM

4下载·0评论

2013年9月18日

硬件通信 I2C SPI EEPROM

11下载·2评论

2012年6月8日

读写I2C FLASH的Verilog程序

62下载·4评论

2010年9月21日

串口SPI FLASH实验

22下载·0评论

2019年2月25日

I2C总线与EEPROM

1941阅读·0评论·11点赞

2017年7月17日

属狗人2023运程,穿3种颜色衣服最旺!1月23日开始转变!

麦玲玲仅供娱乐

广告

完整的读写flash解读(IIC方式与SPI方式相比较,基于STM32F103ZET6)

4396阅读·5评论·7点赞

2020年3月28日

一文搞懂SPI通信协议

1.4W阅读·5评论·32点赞

2022年4月23日

【FPGA】i2c协议详解及eeprom的读写uart串口通信验证

1133阅读·1评论·0点赞

2022年2月18日

FlashTool STM32F103ZET6通过USB串口烧写SPI flash的上位机

41下载·2评论

2018年3月21日

I2C 烧录器| I2C EEPROM烧录器 | I2C Flash烧录器上位机配套软件

128下载·2评论

2013年6月21日

UART2-读写EEPROM

1下载·0评论

2016年8月3日

PIC FW开发,包含SPI,I2C,EEPROM,温度sensor,UART交互

8下载·0评论

2014年11月6日

STM32:I2C接口读写EEPROM(AT24C02)试验例程

1.4W阅读·2评论·5点赞

2017年4月24日

第十六章 IIC协议详解+UART串口读写EEPROM

1490阅读·0评论·1点赞

2017年3月6日

串口通信协议 UART+I2C+SPI

1527阅读·0评论·1点赞

2019年8月26日

UART 串口通讯协议 和I2C 简介

1698阅读·0评论·1点赞

2022年2月24日

I2C—读写EEPROM

4050阅读·2评论·7点赞

2022年3月23日

去首页

看看更多热门内容


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11203448.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存