单片机编程怎么写?
发布网友
发布时间:2022-04-26 18:03
我来回答
共1个回答
热心网友
时间:2023-10-19 23:06
首先要确切地知道AD转换需要的精度和速度,然后根据需要选择合适的CPU(片上AD要满足要求),如果AD转换需要的精度和速度要求特别高,就需要用专用的AD芯片了. 显示部分的选型对CPU速度会有一定的要求,如果显示屏用TFT LCD, 要选择最高48MHz以上主频的CPU,与LCD的接口最好用并口.如果你的设备是便携式的,CPU要选择低电压,带省电模式的.从性价比和要求方面考虑建议用ARM cortex M0 或者ARM cortex M3 系列CPU.
软件要注意的地方就是根据需要选择合适的滤波算法.
程序流程大概如下:
#include <.....>
#define SAMPLE_NUMBER 1024
int sample[SAMPLE_NUMBER];
int sampleFiltered[SAMPLE_NUMBER];
int output[SAMPLE_NUMBER];
volatile int sampleCount;
volatile BOOL sampleOK_flag;
BOOL filterOK_flag;
BOOL AD到输出物理的转换_flag;
void AD_Init()
{
.....................
}
void AD_handle() __irq
{
..............
sample[sampleCount++] = ADresult;
if (sampleCount == SAMPLE_NUMBER)
{
sampleCount = 0;
sampleOK_flag = TRUE;
}
}
int* filter(int* pSample, int* pSampleFiltered)
{
.....................
filterOK_flag = TRUE;
return &sampleFiltered[0];
}
int* AD到输出物理的转换(int* sampleFiltered,int *output)
{
.........................
AD到输出物理的转换_flag = TRUE;
return &output[0];
}
void lcd_init()
{
.....................
}
void lcd_display(int* output, int positionX,int positionY )
{
............................................
}
int main()
{
sampleCount = 0;
sampleOK_flag = FALSE;
filterOK_flag = FALSE;
AD到输出物理的转换_flag = FALSE;
System_init();
AD_Init();
lcd_init();
while (1)
{
if (sampleOK_flag )
{
filter(sample, sampleFiltered);
sampleOK_flag = FALSE;
}
if (filterOK_flag )
{
AD到输出物理的转换(sampleFiltered,output);
filterOK_flag = FALSE;
}
if (AD到输出物理的转换_flag )
{
lcd_display(output, positionX,positionY );
AD到输出物理的转换_flag = FALSE;
}
}
}