【ESK32-360测评】+ A/D转换及应用
[复制链接]
1. A/D采集
在例程中提供A/D采集功能,它是通过采集外接的电位器来模拟电位变化,进而来获得数据的变化。此外,它通过串口通信来输出采集结果。
图1 电位器调节电位
经编译下载,程序的运行效果如图2所示。
图2 调整前的数据显示
为了改善观察效果,特添加了延时函数,修改后程序内容为:
void mdelay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
int main(void)
{
RETARGET_Configuration();
ADC_Configuration();
ADC_Cmd(HT_ADC0, ENABLE);
ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);
while (1)
{
if (gADC_SingleEndOfConversion)
{
printf("\rPotentiometer level is %04d \r\n", (int)gPotentiometerLevel); //115200
}
mdelay(100);
}
}
修改后的运行效果如图3所示,这样数据的变化就很便于观察了。
图3 调整后的数据显示
2.数据显示
前面为数据的显示,已经增添了数值显示函数,此时就可以排上用场了,实现图4显示效果的主程序如下:
int main(void)
{
RETARGET_Configuration();
ADC_Configuration();
ADC_Cmd(HT_ADC0, ENABLE);
ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);
LCD_Init();
LCD_Config();
LCD_Clear(0x2c5c);
LCD_BackColorSet(0x2c5c)
LCD_TextColorSet(Yellow);
LCD_StringLineDisplay(Line9, " ADC=");
while (1)
{
if (gADC_SingleEndOfConversion)
{
LCD_ShowNum(Line9,180,adc,4);
}
mdelay(100);
}
}
图4 采集数据显示
3.波形绘制
为了能更直观地观察数据的变化趋势,绘制数据的波形曲线是一种有效的方法。
在利用前面完成的画线函数和区域填充函数的检测上,实现图5所示效果的主程序如下:
int main(void)
{
int adc,p,q,t,l,k;
RETARGET_Configuration();
ADC_Configuration();
ADC_Cmd(HT_ADC0, ENABLE);
ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);
LCD_Init();
LCD_Config();
LCD_Clear(0x2c5c);
LCD_BackColorSet(0x2c5c);
LCD_TextColorSet(Yellow);
LCD_RectDraw(10, 10, 200, 300);
LCD_DrawLine(105,12 , 105,308 ,Red);
LCD_DrawLine(10,25 , 210,25 ,Red);
LCD_StringLineDisplay(Line9, " n= adc=");
mdelay(50000);
for(t=0;t<60;t++)
{
l=t*5+10;
LCD_DrawLine(210,l,214,l,Yellow);
}
for(t=0;t<10;t++)
{
l=t*21;
LCD_DrawLine(210-l,6,210-l,10,Yellow);
}
t=10;
l=15;
q=210;
p=210;
k=21;
while (1)
{
mdelay(50000);
if(gADC_SingleEndOfConversion)
{
adc=(int)gPotentiometerLevel;
LCD_ShowNum(Line9,220,adc,4);
p=adc/21;
l=t+5;
LCD_ShowNum(Line9,60,t/5-1,3);
LCD_DrawLine(q,t,p,l,Yellow);
t=l;
q=p;
if(t>=305)
{
LCD_fill(11,11,199,297,0x2c5c);
LCD_DrawLine(105,12 , 105,308 ,Red);
LCD_DrawLine(10,25 , 210,25 ,Red);
t=10;
l=15;
q=210;
}
}
}
}
图5 波形曲线绘制
|